博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ROS下树莓派USB串口通信(具体为接收到某个ROS的topic数据后,向串口下发数据。)
阅读量:4083 次
发布时间:2019-05-25

本文共 2401 字,大约阅读时间需要 8 分钟。

USB端口号和波特率都能通过launch文件配置。 

       manipulator_ros_serial.launch

感觉应该就像apm.launch一样,可以在里面修改指定对应串口和波特率。或者可以命令行启动的时候指定。

摘自:

ROS下树莓派USB串口通信

    做工程时需要在树莓派进行串口通信。具体为接收到某个ROS的topic数据后,向串口下发数据。代码编写有两种方法。

    方法一:借助serial库

          1、运行环境为ubuntu,首先安装serial库:

sudo apt-get install serial

          2、配置编写的package中的CMakeLists.txt

                在find_package中添加serial;

          3、给设备的USB端口权限;

          4、代码范例:

               manipulator_ros_serial.cpp

#include #include #include #include #define sBUFFERSIZE 7unsigned char s_buffer[sBUFFERSIZE]; using namespace std;serial::Serial ser;//trans different serial cmds according to different action_cmd(joystick button)void write_action_cmd(const std_msgs::Int64& action_cmd){	memset(s_buffer,0,sizeof(s_buffer));	if( 1 == action_cmd.data ){		s_buffer[0] = 0x55;		s_buffer[1] = 0x55;		s_buffer[2] = 0x05;		s_buffer[3] = 0x06;		s_buffer[4] = 0x01;		s_buffer[5] = 0x01;		s_buffer[6] = 0x00;		//std::cout<<"cmd has been received and published!!!"<<&std::endl;		}	ser.write(s_buffer,sBUFFERSIZE);	}int main(int argc, char** argv){	ros::init(argc, argv, "manipulator_ros_serial_node");	ros::NodeHandle nh;	ros::NodeHandle nh_private("~");		std::string serial_port_;	int baudrate_;	nh_private.param("serial_port", serial_port_, "/dev/ttyUSB0");	nh_private.param("baudrate", baudrate_, 9600);		std::cout<<"The serial port is  "<

      5、USB端口号和波特率都能通过launch文件配置。 

       manipulator_ros_serial.launch

 

  

方法二:借助boost

      1、运行环境为raspbian,raspbian没有serial库;

      2、代码范例

           manipulator_ros.h

#ifndef MANIPULATOR_SERIAL_H_#define MANIPULATOR_SERIAL_H_#include #include #include  #include #include boost::asio::io_service io;boost::asio::serial_port sp(io);namespace manipulator_serial_namespace{class ManipulatorSerial{	public:	      ManipulatorSerial();	      ~ManipulatorSerial();	      	      ros::Subscriber write_sub;	      	      //boost::asio::io_service io;	      	      void write_action_cmd(const std_msgs::Int64& action_cmd);	  };	}#endif

       manipulator_serial.cpp

#include #define sBUFFERSIZE 7unsigned char s_buffer[sBUFFERSIZE];using namespace std;using namespace  boost::asio;namespace manipulator_serial_namespace{	ManipulatorSerial::ManipulatorSerial(){		ros::NodeHandle nh;	    ros::NodeHandle nh_private("~");		    std::string serial_port_;	    int baudrate_;	    nh_private.param("serial_port", serial_port_, "/dev/ttyUSB0");	    nh_private.param("baudrate", baudrate_, 9600);		    std::cout<<"The serial port is  "<

      5、USB端口号和波特率都能通过launch文件进行配置。

    manipulator_serial.launch

 

 

转载地址:http://qxlni.baihongyu.com/

你可能感兴趣的文章
对RTMP视频流进行BitmapData.draw()出错的解决办法
查看>>
FMS 客户端带宽计算、带宽限制
查看>>
在线视频聊天(客服)系统开发那点事儿
查看>>
SecurityError Error 2148 SWF 不能访问本地资源
查看>>
Flex4的可视化显示对象
查看>>
Flex:自定义滚动条样式/隐藏上下箭头
查看>>
烈焰SWF解密
查看>>
Qt 静态编译后的exe太大, 可以这样压缩.
查看>>
3D游戏常用技巧Normal Mapping (法线贴图)原理解析——基础篇
查看>>
乘法逆元
查看>>
STL源码分析----神奇的 list 的 sort 算法实现
查看>>
Linux下用math.h头文件
查看>>
Linux中用st_mode判断文件类型
查看>>
Ubuntu修改host遇到unable to resolve host
查看>>
路由选择算法
查看>>
Objective-C 基础入门(一)
查看>>
Objective-C 基础入门(三) 读写文件与回调
查看>>
C++ STL标准库与泛型编程(一)概述
查看>>
C++ STL标准库与泛型编程(四)Deque、Queue、Stack 深度探索
查看>>
C++ STL标准库 算法
查看>>