作者: Sam (甄峰) sam_code@hotmail.com
0.
Base_Controller基础知识:
在ROS控制模型中,把对ROS底盘的驱动,对各轮子的PID调节,对底盘回报速度和odom处理等模块统称为Base_Controoler.
这部分对机器人底盘制作者,使用者都有意义。这部分最终的意义在于:让底盘的使用者看来,底盘就是一个Node。它吃cmd_vel数据并执行之。并上报odom消息。
ROS相关控制模型中Base_Controller所处位置和作用如下:
ROS设计者对降低耦合性思路真是值得学习:
ROS上位机发送/cmd-vel(Twist).
仅仅是告诉底盘它想以何种线速度,角速度做移动。至于如何做到这个移动,则是Base_Controller负责。底盘制作者根据自己底盘的特性(2轮差速,4轮,N轮,N脚)来把这个命令转换为每个轮子或者脚的动作,并最终转化为每个电机的PWM。
底盘制作者再通过自己的手段得到移动距离,并向ROS上位机发布ODOM。
1. rosserial分析:
1.1: http://wiki.ros.org/rosserial
当ROS上位机和下位机使用串口连接时,即可使用rosserial.
rosserial是个原包(就是以前的栈)。
它封装了串行消息和多路topic以及service,通过一个字符设备(Serial Port或者Network
Socket)
它里面的包,分为部分:
A. ROS端接口(或者说Core):
rosserial_python, roserial_server,
rosserial_java.
这部分代码在ROS机上申请一个Node并桥接远端平台的命令。
B:Client Libraries:
rosserial_arduino, rosserial_embeddedlinux,
rosseral_windows, rosserial_mbed, rosserial_tivac.
这部分允许用户很容易的在各种平台得到和运行ROS Node,监听和发布Topic等。
它是ROSSerial的Client端。它让那些可以运行ANSI C++的各类微处理器,并使用Serial
Port连接到ROS 机器的设备,可以方便的使用类ROS接口。
当这个设备是Arduino时,则可以直接看rosserial_arduino.
如果其它没有支持的平台,如STM32,则需要自己做一些工作。(http://wiki.ros.org/rosserial_client/Tutorials)
C:Examples and Use Cases:
1.2: rosserial_arduino使用:
1.2.1:下载(Sam使用Indigo):
git checkout indigo-devel
它允许允许Arduino上直接使用ROS接口,作为一个Node,发布Topic,
发布TF转换,获取ROS系统时间等。
1.2.2:编译获取Arduino库:
cd ~/catkin_ws
catkin_make
roscd rosserial_arduino
rosrun rosserial_arduino make_libraries.py lib_ros
则在当前目录下生成lib_ros目录。