背景
1. 现在使用的机器人在新的场所应用, 常规手段是通过机器人现在场地内走一圈, 通过激光雷达扫一圈, 历史数据通过cartograph 或者 其他算法, 得出 SLAM地图. 一般根据实地场所大小, 得出的地图精度 5cm/像素. PGM P5格式.
是不是相当的土, 这要是显示在界面上, 多尴尬.
OK, 现在的想法,
1. 界面上的图实现能否通过建筑平面图替代?
2. SLAM的地图能否用
建筑平面图替代?
1. 肯定可以, Bmp2PGM.zip , 通过把 CAD图
转变为 关心的图层
进而PS为合适的底图.
那么像素长队应该对应于 39700mm/50mm = 794 个像素.
1. PS, 选择<编辑><预设><单位与标尺>设置单位为<像素>
2. 选择工具的<标尺> , 从A拉倒B. 得出原图只有 466个像素.
而我们需要的是 794.所以要进行缩放. 即扩大1.7倍. 即把原图长宽都扩大 1.7倍即可.
3. PS选择<图像><图像大小>. 设置长宽为原来的 1.7倍.
4. 新图用标尺确定, 尺寸刚好 794.
5. 切记 pgm 图在rviz中是需要逆时针90度显示, 正上为我们需要的正北项, 所以新图还需要在PS中顺时针90度才可以, 也就是说原始图应该为正北为右的一个方位图.
然后地图适当的缩放到 5cm/每像素的合适大小, 再通过程序处理成 P5 PGM格式的地图文件. (在程序中,为了锐化地图数据, 只保留三种数据, 空白, 障碍,未知)
这一步验证是OK, 那么剩下的就是配套的 yaml文件的编写了, 这个就相对都好处理了.
1. 首先做个 map.yaml, 设置 origin: [0.0, 0.0, 0.0], 即整个地图的右下角为 坐标系原点.
2. 用 big_nav 加载地图, 在rviz中选定原点. 记住rviz中的此位置, 把这个位置设置到 map.yaml, 设置 origin 中.
3. 重新 用 big_nav 加载地图, 机器人默认位置为 0, 0 是刚好处于地图原点, 大功告成.
那么对于问题2, 可以么? 这个尚待验证一下. 主要是精度, 以及slam定位时的可靠性问题, 毕竟手工地图和实时建立的地图有误差(例如说实际的门套, 施工墙壁的宽度), 另外就是精度问题肯定比实时地图粒度要粗的多. 预计可能有 10cm/像素的误差. 这部分对货柜/充电座灯精准位置的移动影响会比较大.
阅读(5437) | 评论(0) | 转发(0) |