ROS学习笔记(5)——建图学习
快速建图:
小车开机,连接WIFI
SSH远程登录:ssh wheeltec@192.168.0.100
启动激光建图
roslaunch turn_on_wheeltec_robot mapping.launch
查看建图效果:rviz
可以使用键盘控制、APP遥控、PS2遥控、航模遥控进行控制小车运动。
建图完成,保存地图
①一键保存:roslaunch turn_on_wheeltec_robot map_saver.launch
②打开地图路径:cd /home/wheeltec/wheeltec_robot/src/turn_on_wheeltec_robot/map
保存地图:rosrun map_server map_saver -f 地图名
注:地图文件可以使用PhotoShop进行编辑,若地图名称不是默认的,需进行NFS挂载之后打开launch文件进行修改。
如需验证地图是否保存成功,可先进行NFS挂载,打开文件目录查看地图是否保存成功。
sudo mount -t nfs 192.168.0.100:/home/wheeltec/wheeltec_robot/mnt
密码:raspberry(ssh和nfs挂载不可在一个终端,否则无法成功 )
------------------------
建图
查看节点分布:rqt_graph
建图节点介绍:
mapping.launch:/slam_gmapping(建图节点)
小车初始化节点:turn_on_wheeltec_robot.launch
雷达节点:rplidar.launch
/scan(雷达节点信息)
gmapping建图节点:algorithm_gmapping.launch
查看TF树:
rosrun rqt_tf_tree rqt_tf_tree
保存TF树:
rosrun tf view_frames
robot_pose_ekf.launch 发布小车与地图原点的坐标距离关系
urdf 小车外形描述文件
args 雷达相对小车原点的距离
x 前进 y 左右 z 高低 绕Z轴角度(3.14旋转180°安装)
可更改0-360°激光雷达扫描范围
gmapping建图节点
algorithm_gmapping节点:
首先读取雷达节点以及odom的两个TF坐标(可以通过雷达来消除里程计的误差)
建图算法切换:
maping.launch修改mapping_mode的default的值.
Costmap——代价地图:
导航包move_base的框架图
全局代价地图,局部代价地图,调用同一个功能包。修改参数注意层数
地图文件:.pgm
格式:除了pgm(便携式灰度图)外,还支持jpg、png等常用图片格式
可用画图工具修改或重画地图
灰度值:[0,255]黑 白
.yaml地图参数文件
image:包含占用数据的图像文件的路径(绝对或者相对路径)
resolution:地图的分辨率,米/像素
origin:地图中的起始姿态(x,y,yaw)
negate:是否应该反转 白/黑 空闲/占用。
occupied_thresh:大于此阈值的像素被视为完全占用。取值[0,1]
free_thresh:小于此阈值的像素被认为是完全空闲的。取值[0,1]
可选参数:
mode:Trinary是默认值三元解释,即解释所有值,使输出最终成为三个值之一
灰度值[0,255]转换成p值[0,1]
转换公式p =(255 - x)/ 255.0
膨胀(障碍物膨胀,膨胀半径需大于小车轮廓外接圆半径,避免撞击)
footprint(车身投影到二维地图上的轮廓)
地图层数:
Static Layer(静态地图层),Obstacle Layer(障碍物层),Inflation Layer(膨胀层)
Master(rviz最终呈现地图)
tatic Layer(静态地图层):接收/map话题信息,加载的地图文件
Obstacle Layer(障碍物层):接受雷达等信息,实时监测环境障碍物,observation_sources(观测源)有"PointCloud", "PointCloud2", and "LaserScan一般使用"
Inflation Layer(膨胀层):根据inflation_radius(膨胀半径)参数,膨胀障碍物,使机器人更安全
自适应蒙特卡洛定位amcl:
基本思想——当所要求解的问题是某种事件出现的概率,或者是某个随机变量的期望值时,它们可以通过某种“试验”的方法,得到这种事件出现的频率,或者这个随机变数的平均值,并用它们作为问题的解。
粒子滤波:
初始化(采样,随机分布粒子)
计算权重(根据距离得出假设估计权重)
重采样(重新采样,分布在权重大的位置处,完成后权重相同)
状态转移(粒子随状态移动)
自适应解决了两个问题:
1.粒子数固定的问题,当机器人定位基本完成的时候,比如这些粒子都集中在一块了,这个时候重采样的粒子数可以少一点。
2.机器人绑架的问题,当粒子的平均分数突然降低(意味着正确的粒子在某次迭代中被抛弃了),在全局再重新的撒一些粒子。