一、机器人必备条件
1、硬件要求,ROS中常用的功能包对机器人的要求
2、深度信息
起始角度一般为-180°,终止角度一般为+180°
将某一行做切面,其中取出的点将三维的数据转换成二维的点云数据,帮助实现slam的导航要求
3、里程计信息
ROS中使用的均为右手坐标系
4、仿真环境
二、ROS SLAM功能包应用方法
1、gmapping功能包
基于激光雷达,使用粒子滤波算法来创建二维栅格地图。
必须有的输入是深度信息和里程计信息
最重要的topic是map,用来发布地图栅格地图
map和odom均是全局坐标系,机器人开机的时候一般会规定为机器人的零位置由此进行一系列的
坐标变换,但机器人不一定最开始就处于map的零位置,理论上可以处于map上的任何位置,所以
需要进行坐标变换
栅格值越大,是障碍物的可能性越大
调整参数以改变建图效果
可以通过ROS wiki工具来了解功能包如何使用
地图一般保存在工作空间的根目录下,一般是图片的形式保存
image:地图名称
resolution:地图的分辨率(单位是m),0.05代表一个栅格是五厘米
origin:机器人的位置(下次加载出来的机器人初始位置)
negate:反转,布尔值(0或1)设置为1则地图颜色反转,若地图最初记录的可用空间和占用空间值相反通常会使用该值
occupation_thresh:占用阈值,用来确定地图中像元是否占用的阈值,单元格高于阈值则认为已被占用
free_thresh:空闲阈值,用来确定地图中像元是否空闲的阈值,单元格低于阈值则认为不可用
2、hector_slam功能包
传入深度信息即可,无需里程计信息
运动速度过快或激光雷达数据精度不高就会出现问题——由于没有里程计信息,仅依靠激光雷达进行里程计的估算
3、catographer功能包
修改了相关参数需要编译重新生效
4、ORB_SLAM功能包
三、ROS中的导航框架
1、move_base导航框架
白色部分是ROS已经提供的,灰色中是ROS提供的但不一定要选的模块
中间的方框部分是move_base提供的,是此框架的核心
map_server地图服务——会认为全局可用,不用进行避障
acml基于概率定位的功能包——一般有里程计可以实现导航的功能所以可以不用使用
sensor sources传感器的数据采集——激光器或者点云,一些数据的转发需要自己来操作,找不到驱动包需要自己配置
sensor transforms坐标转换——需要自己配置
odometry source里程计信息——需要自己积分进行计算
cmd_vel速度控制消息,结构是Twist类型来达到需要的线速度/角速度
action需要维持长时间的交互,在每个周期内会有反馈信息
可以打开ros wiki工具找到move_base对相关参数进行了解
obstacle_range:障碍物的范围
footprint:机器人的外形尺寸
robot_radius:机器人的半径
inflation_radius:安全区的膨胀半径
2、amcl导航框架(概率定位)
蓝色点的密度越高,机器人在此处的概率越高
里程计定位:编码器旋转的圈数计算速度,通过速度积分来获取机器人的位置
amcl定位:根据传感器信息(map_frame)完成机器人在地图坐标系下的位置估算