myAGV-更新日志
为了带来更好的用户体验,我们在软件上面更新升级,优化dwa导航,新增teb导航功能,支持碰撞检测、动态避障。建议使用导航功能时,拆掉上盖外壳,导航效果最佳;有外壳导航可能会存在导航失败的情况。
注意: 收到货的小车底部有QC标签,为最新系统镜像,请您根据本章节教程操作。
1 软件更新说明
导航功能更新说明:
总结 :
一、代价地图
1、costscalingfactor inflation_radius
- 通常放在参数costmapcommonparams.yaml文件中,即全局代价地图和局部代价地图都使用此参数。但在狭窄通道中可globalcostmapparams.yaml ; localcostmapparams.yaml 文件中分别设置。避免膨胀过大导致无法通过。也可通过控制全局地图的代价参数,使得全局路径规划的路线位于通道中间;此过程可以使用动态调参工具,小心调试,选取合理值。
2、updatefrequency publishfrequency
- 导航过程中可能会警告map更新频率问题,可以将updatefrequency设置较小值,publishfrequency为发给rviz可视化频率,根据上位机性能设置,影响不大。
3、rolling_window
- 局部代价地图需要滚动窗口,全局代价地图不需要滚动窗口。
二、路径规划
1、baseglobalplanner baselocalplanner
- 路径规划器选择,在movebaseparams.yaml中设置。
2、lethalcost neutralcost cost_factor
全局路径规划器参数,在baseglobalplannerparam.yaml中设置。将costfactor设置过高或过低都会降低路径质量。这些路径没有穿过每侧障碍物的中间,也没有相对光滑的曲率。极端的COSTNEUTRAL值也有类似的效果。对于关键的cost值,如果设置的过低可能会无法产生任何路径,即使可行路径是明显的。
经过几次实验,发现当COSTFACTOR=0.55,COST_NEUTRAL=66,cost=253时,全局路径是很好的。
3、TEB参数
map_frame: odom 这里需要设置为里程计的frame。
maxglobalplanlookaheaddist 太大路径不平滑,太小避障和转弯时效果不好,太小还会导致小车不敢走。向前规划距离调小,可以使得局部路径较贴近全局路径并完成跑图,再慢慢调大找最佳值。因为teb使用全局规划器生成的初始轨迹来初始化TEB局部规划器。
4、feasibilitycheckno_poses
- 此值不应该选择很高,甚至可以为0;因为优化器可能不会完全收敛:比如,在将来的位姿规划中小障碍物的违背可以被纠正。当机器人向前移动到目标点的时候,如果是在狭窄的环境中驱动时,确定配置合适的障碍物避障行为(局部规划和全局规划)。另外局部路径规划器可能排斥一个不可行的轨迹(从它的观点来看),但是全局规划器相反可能认为选择的全局规划是可行的:此时机器人卡住了。
5、weight_optimaltime
- 值越大小车越大胆,越容易拉到最大速度,也容易碰撞。
6、footprint_model
- 在狭窄通道中,为了通过把膨胀半径调低。但容易发生碰撞,可以将车身设置的过大。
2 使用说明
1 实时建图
1、打开slam激光扫描launch文件
打开小车后,打开控制台终端(快捷键Ctrl+Alt+T),在命令行中输入以下指令:
cd myagv_ros
roslaunch myagv_odometry myagv_base.launch
注意:在开启launch文件之前,请先将小车放置在需要建图环境中的一个合适起始点位上,因为开启launch文件将会开启小车的IMU传感器及odom里程计,人为的移动小车将造成小车建图失真。
打开小车slam激光扫描所需的launch文件,若显示
Now YDLIDAR is scanning ......
则说明小车雷达文件打开成功,终端内显示状态如下:
2、打开gmapping建图launch文件
重新打开一个控制台终端,在命令行中输入以下指令:
cd myagv_ros
roslaunch myagv_navigation myagv_slam_laser.launch
3、打开键盘控制文件
重新打开一个控制台终端,在终端命令行中输入:
cd myagv_ros
roslaunch myagv_teleop myagv_teleop.launch
方向键:
按键 | 方向 |
---|---|
i | 前进 |
, | 后退 |
j | 向左运动 |
l | 向右运动 |
u | 逆时针旋转 |
o | 顺时针旋转 |
k | 停止 |
4、开始建图
现在小车可以在键盘的控制下开始移动了,操控小车在所需建图的空间内转一圈吧。与此同时,可以看到在Rviz空间里我们的地图也会跟着小车的移动一点点的把地图构建出来了。 注意:在用键盘操作小车的时候,确保运行myagv_teleop.launch文件的终端是当前选中的窗口,否则键盘控制程序无法识别键盘的按键。
5、保存所构建的地图
再打开一个新的控制台终端,在命令行中输入以下指令,用来保存小车扫描完成的地图:
rosrun map_server map_saver
运行成功后终端显示如下:
这里可以看到我们画了个红圈圈,只是地图保存后生成的两个文件,分别为 map.pgm 和 map.yaml。这两个文件默认会保存在家目录。在同一个终端内输入 cd 则会进入我们的家目录,再输入 ls 可以看到在家目录下生成的地图文件已经生成好了。
2 地图导航
在之前我们已经建好了一个空间地图并获得了两个地图文件,分别是在家目录下的 map.pgm 和 map.yaml
现在来看一下如何用建立好的地图来为小车进行导航
1、复制地图文件到项目文件夹对应的位置
1)点击桌面上的File system图标打开文件管理器,点击右侧的“ubuntu”进入/home/ubuntu 目录
2)可以看到之前我们建好的地图就保存在这个路径下,选中这两个文件
3)单击右键,点击Copy复制这两个文件
4)点击桌面上的File system图标打开另一个文件管理器进入如下路径,将刚才复制的地图文件粘贴到该路径下:
/home/ubuntu/myagv_ros/src/myagv_navigation/map/
2、修改launch文件
1)双击打开左上角的Visual Studio Code 打开代码编辑器,
2)打开/home/ubuntu/myagv_ros/src/myagv_navigation/launch/路径下的 navigation_active.launch文件
3)将第5行的 myroom2.yaml 替换成我们自己建图的文件名 map.yaml
4)保存修改文件并退出(VScode在运行的时候比较占内存,推荐修改完代码后关闭VScode,不然运行小车系统会非常卡顿,也可以使用vim等轻量化编辑器)
3、运行launch文件
1)打开小车后,打开控制台终端(快捷键Ctrl+Alt+T),在命令行中输入以下指令:
cd myagv_ros
roslaunch myagv odometry myagv base.launch
2)再打开一个控制台终端(快捷键Ctrl+Alt+T),输入如下指令:
teb导航
cd myagv_ros
roslaunch myagv_navigation teb_navigation_slam.launch
dwa导航
cd myagv_ros
roslaunch myagv_navigation dwa_navigation.launch
注:支持两种算法导航,选择一种导航运行即可,teb导航效果较好,建议使用teb导航;dwa动态避障效果较差。
3)可以看到开启了一个Rviz仿真窗口。
注意:小车的初始位置最好放置到我们建图时小车的出发位置
若Rviz界面的小车和实际小车对应不上,点击顶部工具栏的“2D Pose Estimate” 进行调整,使得Rviz界面的小车和实现的小车可对应上,调整后进行导航。
4)点击顶部工具栏的“2D Nav Goal”
5)点击地图上我们想要到达的点位,小车便会向着目标点位出发,同时还可以在rviz中看到起点到目标点位间有一条小车的规划路径,小车会沿着路线运动到目标点位。