更新 Docs/2024-12-26/README.md

main
翟帅帅 2024-12-27 16:10:08 +08:00
parent 5ae799621e
commit 958ebd5926
1 changed files with 29 additions and 29 deletions

View File

@ -6,23 +6,23 @@
消息类型是nav_msgs消息包的OccupancyGrid占据栅格小格子+数字,数字表示是否有障碍物。
![image-20241217142513695](./image/1.png)
![image-20241217142513695](./Image/1.png)
栅格地图:
在地面画上栅格,然后根据栅格中是否有障碍物给栅格填色。然后把障碍物移走,剩下的就是栅格地图。
![image-20241217142902943](./image/2.png)
![image-20241217142902943](./Image/2.png)
栅格划分可大可小,栅格越小,区域划分就越精细,越接近障碍物轮廓。理论上栅格足够小,栅格就可以无限趋近于障碍物轮廓。但是栅格变小,就会使栅格的数量变多,机器人的计算量就会变大。所以一般会给栅格设置一个合适的尺寸。
![image-20241217143051922](./image/3.png)
![image-20241217143051922](./Image/3.png)
栅格尺寸单个栅格的边长体现了地图的精细程度用来表示栅格地图的分辨率。ros中分辨率默认0.05m。
![image-20241217143802121](./image/4.png)
![image-20241217143802121](./Image/4.png)
![image-20241217143826147](./image/5.png)
![image-20241217143826147](./Image/5.png)
栅格数组+行列数信息就可以表述一个栅格地图。这个就是OccupancyGrid消息包中的数据内容。
@ -32,17 +32,17 @@
地图样式:
![image-20241217145212886](./image/6.png)
![image-20241217145212886](./Image/6.png)
![image-20241217145427763](./image/7.png)
![image-20241217145427763](./Image/7.png)
实现步骤:
![image-20241217145516084](./image/8.png)
![image-20241217145516084](./Image/8.png)
首先创建软件包:
![image-20241217152200101](./image/9.png)
![image-20241217152200101](./Image/9.png)
完整代码:
@ -99,7 +99,7 @@ int main(int argc, char *argv[])
地图赋值注意起始点位置为0开始
![image-20241217154319974](./image/10.png)
![image-20241217154319974](./Image/10.png)
修改编译规则:
@ -117,11 +117,11 @@ catkin_make编译没有报错即成功编译。
然后启动roscore另一个终端启动刚刚的节点
![image-20241217155621500](./image/11.png)
![image-20241217155621500](./Image/11.png)
再启动rviz订阅/map
![8df7a9d835166eb7ccc8128e017defc9_720](./image/12.jpg)
![8df7a9d835166eb7ccc8128e017defc9_720](./Image/12.jpg)
发现可以正常显示地图。
@ -135,7 +135,7 @@ Hector_Mapping是开源的一个软件包可以在只有激光雷达的情况
流程:
![image-20241217172054317](./image/13.png)
![image-20241217172054317](./Image/13.png)
@ -145,23 +145,23 @@ Hector_Mapping是开源的一个软件包可以在只有激光雷达的情况
打开rviz添加机器人、雷达、地图订阅相应节点。
![859d94cfc7aed9acc24eb582770b7c12](./image/14.jpg)
![859d94cfc7aed9acc24eb582770b7c12](./Image/14.jpg)
打开wps_robot_steering控制机器人直到完全扫描出地图
![b382d7ca7e9d126c673834b4fcded82f](./image/15.jpg)
![b382d7ca7e9d126c673834b4fcded82f](./Image/15.jpg)
实测:运行之前写的避障算法也可以成功躲开障碍物,完成构图。
编译成功后尝试运行roslaunch slam_pkg hector.launch
![image-20241218103118759](./image/16.png)
![image-20241218103118759](./Image/16.png)
##### 4.里程计
在机器人建图的过程中,如果有一段长直的路,周围的参照物始终不变,那么激光雷达会认为参照物不表,机器人没有动,建图就不会再继续进行。
![image-20241218141337149](./image/17.png)
![image-20241218141337149](./Image/17.png)
对于机器人来说激光雷达虽然没有识别特征但是轮子还在运动。此时里程计odometry就可以计算位移信息位移=圈数*周长。里程计不是硬件设备而是软件算法在机器人的驱动节点中运行根据电机转动数据计算位移信息并将位移信息以TF消息包的形式发送到TF话题中。但是这个只是数值计算轮子可能在真实情况出现变化从而产生误差此时就应该通过激光雷达等方式继续吻合障碍物的特征。
@ -169,21 +169,21 @@ Gmapping
里程计输出的是odom到base_footprint的TF计算的机器人位移已经和机器人的底盘投影中心连接上无法再从base_footprint到机器人地盘再插入新的TF。如下图
![image-20241218142730698](./image/18.png)
![image-20241218142730698](./Image/18.png)
因此slam一般会迁就里程计。在计算的过程中slam节点最终要输出的是map到base_footprint所以slam移动了绿色部分的TF到odom节点之前也就是右边框出的部分。
![image-20241218143115800](./image/19.png)
![image-20241218143115800](./Image/19.png)
这样map到odom的TF和里程计的TF一连起来就形成了map到base_footprint的TF
![image-20241218144456128](./image/20.png)
![image-20241218144456128](./Image/20.png)
这个就是Gmapping的核心算法。
在hector中直接将雷达点云贴合障碍物轮廓得出的机器人位移作为最终结果。在TF树中是下面这一段
![image-20241218145823603](./image/21.png)
![image-20241218145823603](./Image/21.png)
在gmapping中机器人的位移主要由里程计推算激光点阵只适用于修正里程计的误差。而在hector中只使用雷达点云和障碍物配准的方法进行定位但是在输出时也会输出一段map到odom的TF用于修正里程计不断增长的TF使base_footprint和scanmatcher_frame保持一致但是实际上是为了保持一致而保持一致。
@ -201,29 +201,29 @@ gmapping软件包
可以看到gmapping订阅的话题只有两个
![image-20241218153441206](./image/22.png)
![image-20241218153441206](./Image/22.png)
1.tf坐标系转换关系有两个。
①雷达坐标系到底盘坐标系的base_link但是雷达坐标系没有规定具体名称需要跟雷达数据包的header里的frame_id保持一致。
![image-20241218153647577](./image/23.png)
![image-20241218153647577](./Image/23.png)
②里程计输出的TF。
![image-20241218153838867](./image/24.png)
![image-20241218153838867](./Image/24.png)
2.scan激光雷达的数据话题。
gmapping输出的话题有3个
![image-20241218154015883](./image/25.png)
![image-20241218154015883](./Image/25.png)
其中,第三个是机器人定位置信度,值越大,错误的可能性越大。
运行gmapping的需求列表
![image-20241218155728149](./image/26.png)
![image-20241218155728149](./Image/26.png)
首先运行仿真环境roslaunch wpr_simulation wpb_stage_robocup.launch
@ -233,7 +233,7 @@ gmapping软件包
之后使用键盘控制机器人使用gmapping算法建图。rosrun wpr_simulation keyboard_vel_ctrl。
![c3b506a1b59458f4e0162728b0eab131](./image/27.jpg)
![c3b506a1b59458f4e0162728b0eab131](./Image/27.jpg)
@ -241,10 +241,10 @@ gmapping软件包
把激光雷达LD14按照文档接线使用测试软件检验发现雷达可以正常使用。
![image-20241225223147349](./image/28.png)
![image-20241225223147349](./Image/28.png)
使用LD14在小车上进行cartographer建图。用键盘操控小车在办公室运动然后得到办公室的地图
![微信图片_20241225150650](./image/29.jpg)
![微信图片_20241225150650](./Image/29.jpg)
为了清楚显示建图结果只保留了TF坐标系和路径以及地图和激光雷达点阵。可以看到在室内可以正常完成建图操作部分没有显示的边缘是因为玻璃透光导致距离过远没有办法接收到反射回来的激光。