rosserial是ros的一种数据协议,通过某个字符设备,如串口或网络socket,用于传递标准ros消息或者复用多个话题、服务
主要分两个部分:客户端和ros代理接口
客户端允许用户获取ros节点,并在不同的设备上运行。客户端通常是general ANSI C++库,包括:
Arduino, especially UNO and Leonardo but also Arduino MEGA and DUE, Teensy 3.x and LC, Spark, STM32F1 and ESP8266 based boards | |
support for Embedded Linux (eg, routers) | |
support for communicating with Windows applications | |
support for mbed platforms | |
support for TI's Launchpad boards, TM4C123GXL and TM4C1294XL | |
support for STM32 MCUs | |
support for teensy platforms |
A Python-based implementation (recommended for PC usage). | |
A C++ implementation based on the ShapeShifter message, some limitations compared to rosserial_python but recommended for high-performance applications. |
cd <ws>/src
git clone https://github.com/ros-drivers/rosserial.git
cd <ws>
catkin_make
catkin_make install
source <ws>/install/setup.bash
完成后会在<ws>/install目录中创建ros_lib库,必须运行catkin_make install
2、删除rosserial-embededlinux目录下的example和ros_lib文件夹,然后利用make_libraries.py脚本重新生成
cd <some_directory>
rm -rf ros_lib examples
rosrun rosserial_embeddedlinux make_libraries.py . //.表示当前目录
重新生成的ros_lib库相比之前多了很多当前workstation的一些运行库(个人理解)
3、将新的rosserial-embededlinux包拷到客户端的机子上,本文是TX2板子
4、客户端上,将ros_lib目录添加到系统头文件搜索目录,参考ubuntu下默认的头文件搜索路径
本文采用通过查找gcc的环境变量C_INCLUDE_PATH/CPLUS_INCLUDE_PATH/OBJC_INCLUDE_PATH来搜索头文件位置
export CPLUS_INCLUDE_PATH = CPLUS_INCLUDE_PATH:ros_lib所在目录的绝对路径
5、构建一个使用ros接口的嵌入式linux应用程序(通常使用交叉编译器-请参阅您的开发环境文档)
本文进入客户端example所在HelloROS目录,修改cpp文件中的IP为workstation所属IP,然后编译生成可执行文件
g++ HelloROS.cpp -o test
如果上一步没有添加头文件搜索目录,可以使用-I ros_lib目录的指令(是I,不是i)
g++ HelloROS.cpp -o test -I ros_lib目录
如果出现错误,参考rosserial_embeddedlinux编译
注:本文中如果在workstation中生成该可执行文件,在workstation上可以执行,但拷贝到客户端上无法执行,可能是两个系统的ros版本不一致,
6、运行。首先在workstation启动
rosrun rosserial_python serial_node.py tcp
然后在客户端运行上步生成的可执行文件,即可在workstation上接收到信息