myAGV-更新日志

为了带来更好的用户体验,我们在软件上面更新升级,优化dwa导航,新增teb导航功能,支持碰撞检测、动态避障。建议使用导航功能时,拆掉上盖外壳,导航效果最佳;有外壳导航可能会存在导航失败的情况。

注意: 收到货的小车底部有QC标签,为最新系统镜像,请您根据本章节教程操作。 开启小车launch终端

1 软件更新说明

导航功能更新说明: teb

总结 :

一、代价地图

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文件的终端是当前选中的窗口,否则键盘控制程序无法识别键盘的按键。 建图轨迹Rviz

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复制这两个文件

复制地图1

4)点击桌面上的File system图标打开另一个文件管理器进入如下路径,将刚才复制的地图文件粘贴到该路径下:

/home/ubuntu/myagv_ros/src/myagv_navigation/map/

复制地图2

2、修改launch文件

1)双击打开左上角的Visual Studio Code 打开代码编辑器,

vscode图标

2)打开/home/ubuntu/myagv_ros/src/myagv_navigation/launch/路径下的 navigation_active.launch文件

修改launch文件1

3)将第5行的 myroom2.yaml 替换成我们自己建图的文件名 map.yaml

修改launch文件2

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界面的小车和实现的小车可对应上,调整后进行导航。

运行launch文件1

4)点击顶部工具栏的“2D Nav Goal”

运行launch文件3

5)点击地图上我们想要到达的点位,小车便会向着目标点位出发,同时还可以在rviz中看到起点到目标点位间有一条小车的规划路径,小车会沿着路线运动到目标点位。

运行launch文件4

results matching ""

    No results matching ""