智能机器人(02):系统功能
1. 自助定位导航机器人的功能
建图、定位、和导航:
gmapping – 负责建立地图
amcl – 确定在地图的位置
move_base – 导航
2. 自助定位导航机器人的控制
这张三种颜色的图:
白色代表已经实现而且是必需的
灰色代表已经实现的但是可选的
蓝色代表必需的,而且对硬件平台不独立的
中间的move_base这个大框包括: 全局地图,局部地图,全局路径,局部路径,还有恢复机制。
把move_base大框看作黑盒子,可以看到它要五个接口:
4个输入(”/tf”, “/odom”, “/map”,“/scan”)
1个输出(“cmd_vel”)
要使move_base大方框运行起来,就得构建好这4输入和1输出:
tf: 各个坐标系之间的转换关系。
odom: 根据各个轮速度推算出的航向信息,即机器人在odom坐标系的x,y坐标及航向角yaw。
map: 机器人在此地图中的目标位置。
scan: 传感器的信息用于定位。如果假定map坐标系和odom坐标系重合就不要scan了。
cmd_vel: 包含的是期望的机器人的前进速度和转向速度。
具体流程是:
move_base收到goal以后,通过基于actionlib的client向服务器发送此目标goal,actionlib服务器根据tf关系以及odom消息,不断feedback机器人状态给client, 规划和控制twist。
3. 自助定位导航机器人的架构
从低到高依次分为:
*1 motion driver
*2 base controller
*3 sensor sources
*4 gmapping+amcl
*5 move_base navi
*1 motion driver
这是最底层的电机驱动和反馈:
电机驱动: 硬件重要模块,不存在通用的电机驱动。
点击反馈:通过编码器将滚动圈数转化为距离,在ROS中edcoder就是 odometry
DSP活51单片机都可以满足要求。定时采样码盘值给base,同时对左右轮分别进行控速。
*2 base controller
base controller必须运行在robot自己的电脑上,负责两件事情:
第一是:在odom话题发布里程计数据,并可选的发布 odom -> base_link的tf转换。
第二是:在cmd_vel话题上发布控制线速度和角速度的大小。
这层的软件不需要关注硬件的差异,根据ROS接口写的程序换台robot依然可以运行。
给让其他节点订阅的odom,主要用航迹推演法将各个轮速度转化为机器人的x轴方向速度和机器人的旋转速度,然后发布。
由move_base规划输出的cmd_vel, 需要注意速度的平滑速度,给下位机执行。
要注意odom发布频率,涉及到costmap更新与坐标系的访问超时。
*3 sensor sources
单靠一个传感器可能是不够的,尤其是采用 kinect 之类只有小角度的景深设备。
这时候就需要用到多传感器融合的方法。多传感器融合定位、自定位是很重要的一部分,精度直接影响到建图导航的准确性。
*4 gmapping+amcl
通过laser或者rgbd完成地图的构建。一旦有了环境的地图,通过amcl实现robot的自主定位。
amcl定位模块作为move_base规划层的输入,模块间通讯方式实现了模块间的完全解耦。
所以导航规划层用什么定位方法,静态还是动态的地图,对于导航层内部几乎没有区别。
*5 move_base navi
在地图上指定一目标地点及到达时的robot位姿,通过自主规划路径到达。
机器人根据里程计的数据依靠move_base同时结合local和global代价地图去做路径规划,最终到达目标地点。
在机器人运动过程中,可以做到避障。在避障过程中,自动调整robot的移动速度。
NEXT:
智能机器人系统功能(01)
智能机器人运动驱动(03)
智能机器人基控制器(05)
智能机器人传感器源(07)
智能机器人自助定位(09)
智能机器人数据融合(11)
智能机器人自主导航(13)
智能机器人导航调试(15)
智能机器人任务调度(17)
智能机器人系统功能(19)
发表评论
Want to join the discussion?Feel free to contribute!