新闻中心 新闻
技术分享 | 如何在ROS中使用Serial包?
新闻 2021-12-06 09:39:05

首先,这个Serial 是一个跨平台、简单易用的库,用于在计算机上使用串行端口。该库提供了一个 C++、面向对象的接口,用于与 Linux 和 Windows 上的类似 RS-232 的设备进行交互。但是这个没有API文档,接下来我将把我的使用经验呈现给大家。

http://wiki.ros.org/serial  


Serial 的GitHub:

https://github.com/wjwwood/serial


一、开始使用:

  • 操作系统:Ubuntu18.04

  • ROS版本:melodic

首先在命令行中输入如下命令,安装serial功能包:

sudo apt update
sudo apt install ros-melodic-serial

创建功能包:打开终端 输入如下命令,创建功能包

mkdir -p catkin_ws/src
cd catkin_ws/src
catkin_create_pkg serial_example roscpp serial std_msgs

进入src,并创建serial_example_node.cpp 文件

    cd src 
    touch serial_example_node.cpp

    复制如下代码到serial_example_node.cpp文件中,注意修改自己的端口号:





































    #include <ros/ros.h>#include <serial/serial.h>#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/ttyTHS0");        ser.setBaudrate(9600);        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(5);    while(ros::ok()){        ros::spinOnce();        if(ser.available()){            ROS_INFO_STREAM("Reading from serial port");            std_msgs::String result;            result.data = ser.read(ser.available());            ROS_INFO_STREAM("Read: " << result.data);            read_pub.publish(result);        }        loop_rate.sleep();    }}

    修改CMakeLists.txt文件中,在文件的底部加上如下语句:

      add_executable(serial_example_node src/serial_example_node.cpp)target_link_libraries(serial_example_node  ${catkin_LIBRARIES})

      编译,输入如下命令开始编译

      catkin_makesource devel/setup.bash

      运行节点:

      roscorerosrun serial_example serial_example_node


      微信图片_20211206092110.png

      出现上图的时候,表示节点已经运行成功了~


      二、如何测试呢?

      1. 短接串口的TX与RX引

      2. 使用rqt_publisher工具,rqt_publisher - ROS Wiki,发布信息

        微信图片_20211206092625.png


      3.用rostopic list 命令查看当前的话题名称,然后用rostopic echo (话题名称)


      以上就是我们常用的机器人开发中上位机与下位机通信的方式了,这个功能非常的好用,您也可以按照上面的教程来试一试哦! 

      作者:阿木实验室-梓衡

      阿木实验室致力于前沿IT科技的教育和智能装备,让机器人研发更高效!


      公众号:阿木实验室 ( 领取免费资料包)

      官方淘宝店:阿木实验室(可购买硬件配件)

      硬件咨询:yanyue199506(欢迎洽谈合作)

      课程咨询:jiayue199506 (免费领取机器人工程师学习计划)




      - End -

      技术发展的日新月异,阿木实验室将紧跟技术的脚步,不断把机器人行业最新的技术和硬件推荐给大家。看到经过我们培训的学员在技术上突飞猛进,是我们培训最大的价值。如果你在机器人行业,就请关注我们的公众号,我们将持续发布机器人行业最有价值的信息和技术。

      您的浏览器版本过低,建议下载更换以下浏览器:

      官方店铺

       阿木实验室

      联系电话

      028-87872048

      扫一扫,快速加入

      硬件评测

      群号652692981

      课程学习

      群号652692981