zoukankan      html  css  js  c++  java
  • 编写ros串口节点,使用官方serial包

    参考http://www.roswiki.com/read.php?tid=557&fid=39

    1.通过sudo apt-get install ros-<distro>-serial下载ROS对应版本的工具包

    serial会安装在opt/ros/<distro>/share/serial目录下,

    重启终端,输入 roscd serial,可以检测到serial包的路径,说明serial包已经安装成功

    2.使用ros自带的serial包,编写节点

    #include <ros/ros.h> 
    #include <serial/serial.h>  //ROS已经内置了的串口包 
    #include <std_msgs/String.h> 
    #include <std_msgs/Empty.h> 
      
    serial::Serial ser; //声明串口对象 
      
    //回调函数 
    void write_callback(const std_msgs::String::ConstPtr& msg) 

        ROS_INFO_STREAM("Writing to serial port" <<msg->data); 
        ser.write(msg->data);   //发送串口数据 

      
    int main (int argc, char** argv) 

        //初始化节点 
        ros::init(argc, argv, "serial_example_node"); 
        //声明节点句柄 
        ros::NodeHandle nh; 
      
        //订阅主题,并配置回调函数 
        ros::Subscriber write_sub = nh.subscribe("write", 1000, write_callback); 
        //发布主题 
        ros::Publisher read_pub = nh.advertise<std_msgs::String>("read", 1000); 
      
        try 
        { 
        //设置串口属性,并打开串口 
            ser.setPort("/dev/ttyUSB0"); 
            ser.setBaudrate(115200); 
            serial::Timeout to = serial::Timeout::simpleTimeout(1000); 
            ser.setTimeout(to); 
            ser.open(); 
        } 
        catch (serial::IOException& e) 
        { 
            ROS_ERROR_STREAM("Unable to open port "); 
            return -1; 
        } 
      
        //检测串口是否已经打开,并给出提示信息 
        if(ser.isOpen()) 
        { 
            ROS_INFO_STREAM("Serial Port initialized"); 
        } 
        else 
        { 
            return -1; 
        } 
      
        //指定循环的频率 
        ros::Rate loop_rate(50); 
        while(ros::ok()) 
        { 
      
            if(ser.available()){ 
                ROS_INFO_STREAM("Reading from serial port\n"); 
                std_msgs::String result; 
                result.data = ser.read(ser.available()); 
                ROS_INFO_STREAM("Read: " << result.data); 
                read_pub.publish(result); 
            } 

            //处理ROS的信息,比如订阅消息,并调用回调函数 
            ros::spinOnce(); 
            loop_rate.sleep(); 
      
        } 

  • 相关阅读:
    py-day1-2 python的循环语句
    B/S和C/S结构的区别
    php get_magic_quotes_gpc() addslashes()
    SqlHelper数据库访问类
    随滚动条滚动的居中div
    有关Repeater的事件
    Repeater的ItemCommand事件和ItemCreated事件,高手请跳过~
    温故而知新之数据库的分离和附加…高手请跳过….
    自己做的一个小功能~
    php什么是变量的数据类型
  • 原文地址:https://www.cnblogs.com/TooyLee/p/6104863.html
Copyright © 2011-2022 走看看