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

密码:raspberrysshnfs挂载不可在一个终端,否则无法成功 )

------------------------

建图

查看节点分布: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_modedefault的值.

Costmap——代价地图:

导航包move_base的框架图

全局代价地图,局部代价地图,调用同一个功能包。修改参数注意层数

地图文件:.pgm

格式:除了pgm(便携式灰度图)外,还支持jpgpng等常用图片格式

可用画图工具修改或重画地图

灰度值:[0255]黑 白

.yaml地图参数文件

image:包含占用数据的图像文件的路径(绝对或者相对路径)

resolution:地图的分辨率,米/像素

origin:地图中的起始姿态(xyyaw

negate:是否应该反转 白/黑   空闲/占用。

occupied_thresh:大于此阈值的像素被视为完全占用。取值[0,1]

free_thresh:小于此阈值的像素被认为是完全空闲的。取值[0,1]

可选参数:

modeTrinary是默认值三元解释,即解释所有值,使输出最终成为三个值之一

灰度值[0,255]转换成p[0,1]

转换公式p =255 - x/ 255.0

膨胀(障碍物膨胀,膨胀半径需大于小车轮廓外接圆半径,避免撞击)

footprint(车身投影到二维地图上的轮廓)

地图层数:

Static Layer(静态地图层),Obstacle Layer(障碍物层),Inflation Layer(膨胀层)

Masterrviz最终呈现地图)

tatic Layer(静态地图层):接收/map话题信息,加载的地图文件

Obstacle Layer(障碍物层):接受雷达等信息,实时监测环境障碍物,observation_sources(观测源)有"PointCloud", "PointCloud2", and "LaserScan一般使用"

Inflation Layer(膨胀层):根据inflation_radius(膨胀半径)参数,膨胀障碍物,使机器人更安全

自适应蒙特卡洛定位amcl:

基本思想——当所要求解的问题是某种事件出现的概率,或者是某个随机变量的期望值时,它们可以通过某种试验的方法,得到这种事件出现的频率,或者这个随机变数的平均值,并用它们作为问题的解。

粒子滤波:

初始化(采样,随机分布粒子)

计算权重(根据距离得出假设估计权重)

重采样(重新采样,分布在权重大的位置处,完成后权重相同)

状态转移(粒子随状态移动)

自适应解决了两个问题:

1.粒子数固定的问题,当机器人定位基本完成的时候,比如这些粒子都集中在一块了,这个时候重采样的粒子数可以少一点。

2.机器人绑架的问题,当粒子的平均分数突然降低(意味着正确的粒子在某次迭代中被抛弃了),在全局再重新的撒一些粒子。

相关