本文主要是使用rosserial_arduino包,可以通过msp430launchpad for arduino IDE直接使用ROS。此ide和audrino ide 的使用方法大同小异。rosserial提供了一个通信协议,它通过arduino的UART来工作。它允许arduino作为一个ROS的节点,可以直接发布和订阅ROS的消息,发布TF变换,以及获取ROS的系统时间。
我是在Ubuntu系统下编译好,拷贝到Windows的。
一.安装rosserial_arduino
####1 修改环境变量
source /opt/ros/indigo/setup.bash
roscore
####2 创建一个工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
3 下载编译
git clone https://github.com/ros-drivers/rosserial.git
cd ..
catkin_make (如果这样编译到最后出错,尝试`catkin_make -j2`就好咯)
catkin_make install
source ~/catkin_ws/install/setup.bash
cd ~/catkin_ws/install/share/rosserial_arduino
rosrun rosserial_arduino make_libraries.py .
即可生成ros_lib
文件夹,通过u盘挂载拷到msp430launchpad
的libraries
文件夹下,重启软件,即可看到ros_lib
已包含。(编译程序的时候发现一直报错,关于ros.h
,但是在arduino ide
下没有错误,所以还是用arduino uno
吧)
然而实践证明ROS_lib
是非常占用arduino
资源的,如果要订阅Twist
,同时发布TF,Odometry
消息则至少需要3k的SRAM
, Arduino UNO
只能作为接收Twist消息,来控制底盘,如果用rosserial_arduino
做到完整的Base Controller
就只能上Arduino Mega2560
了,这无疑会增加不少成本,所以笔者认为又更好的选择,那就是使用ros_arduino_bridge
作为Base Controller
,把逻辑的运算放在上位机上运行,Arduino
单纯的作为硬件的控制器,所以我也只能乖乖用ros_arduino_bridge
作为base controller
。(明天继续!)