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上接收到信息