技术分享 | 如何在ROS中使用Serial包?

file 首先,这个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_make source devel/setup.bash 运行节点:

roscore rosrun serial_example serial_example_node file

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

二、如何测试呢? 1.短接串口的TX与RX引 2.使用rqt_publisher工具,rqt_publisher - ROS Wiki,发布信息 file 3.用rostopic list 命令查看当前的话题名称,然后用rostopic echo (话题名称)

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

作者:阿木实验室-梓衡

  • End -

技术发展的日新月异,阿木实验室将紧跟技术的脚步,不断把机器人行业最新的技术和硬件推荐给大家。看到经过我们培训的学员在技术上突飞猛进,是我们培训最大的价值。如果你在机器人行业,就请关注我们的公众号,我们将持续发布机器人行业最有价值的信息和技术。 阿木实验室致力于前沿IT科技的教育和智能装备,让机器人研发更高效!

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值