跳转至

作业4 - 小车导航

在本次作业中,请将 launch.sh 中的 ID=test 改为 ID=[Student ID] ,其中 [Student ID] 为自己的学号。

1. 这次作业的目标是什么?

本次作业的任务是:给定仿真环境中目标点的坐标,将 EP 小车导航至该目标点。

导航过程分为两步:

  1. 全局路径点规划:本次作业中采用 ros-noetic-global-planner 包实现,其作用是根据 EP 小车当前位置和目标位置,在地图上选取多个短期规划目标(即路径点)
  2. 局部路径点跟踪:本次作业中由助教实现。其作用是获取最近未到达的路径点,输出小车地盘速度和角度,将 EP 小车驱动至该路径点。

本次作业中需要大家调整全局规划和局部跟踪两个步骤中的参数,使得小车从起点出发到达目标点的时间尽可能短。

2. 我要怎样完成这次作业?

2.1 克隆作业仓库

将作业仓库克隆至本地:

git clone --recursive https://gitee.com/tb5zhh/is2022-fall-hw4.git

git clone --recursive https://github.com/AIR-DISCOVER/IS2022Fall-hw4.git

点击这里下载压缩包。

2.2 修改参数

修改 cartographer_navigation/param/cartographer_2d_localization.lua 中的参数配置。

3. 如何检验我的实现是否正确?

3.1 准备环境

IS2022Fall-hw4 目录下,执行以下命令(请将 launch.sh 中的 ID=test 改为 ID=[Student ID] ,其中 [Student ID] 为自己的学号):

./launch.sh

等待命令执行,出现以下界面时,表明已经完成编译控制节点、启动仿真环境、启动可视化、启动控制节点,导航功能开始运行:

launch

于此同时,启动完成时会出现两个可视化界面和一个参数调整面板。第一个可视化界面是小车的第三人称视角相机输出:

第二个可视化界面是 cartographer 的可视化界面:

参数调整面板如下所示:

3.2 选择目标点,开始导航

IS2022Fall-hw4 目录下,执行以下命令:

./set_goal.sh [x] [y]

其中 xy 是目标点的坐标;不提供两个参数时,会导航至默认目标点 \((2.05, 2.68)\) 。执行此命令后,可视化界面2上会出现全局规划生成的路径点(如下所示),同时小车开始逐步向最近未达到路径点前进。

3.3 调整参数

全局规划部分参数位于 navigation/param/global_costmap_params.yaml 中,主要需要修改以下参数: * inflation_radius: 障碍物在地图中向外扩展的膨胀区的半径。这个值越大,规划出的路径会越靠近通道中央,但是过大会导致路径无法生成。 * cost_scaling_factor: 膨胀过程中应用到代价的比例因子。成本函数的计算方法如下: $$ \exp(-k * (D - r)) $$ 其中\(k\)为比例因子,这个值与越大代价越小。\(D\)\(r\) 分别是小车到目标点距离和小车外接圆半径。

实际运行过程中,也可以通过参数调整面板实时地调整参数,但是最终提交作业时需要将选定的参数在 navigation/param/global_costmap_params.yaml 中修改后编译提交。


局部跟踪部分参数位于 navigation/scripts/tracker.py 中 20 - 25 行,共有五个参数:

/navigation/dis_angle_k   # 角度追踪增益,数值越大给出越大的角速度指令
/navigation/dis_disx_k    # x方向追踪增益,数值越大给出越大的x方向线速度指令(相对世界坐标系)
/navigation/dis_disy_k    # y方向追踪增益,数值越大给出越大的y方向线速度指令(相对世界坐标系)
/navigation/pre_point     # 追踪点与当前点之间间隔点的个数,即前馈点间隔
/navigation/window_size   # 查找最近点时搜索区间的长度

实际运行过程中,也可以通过以下命令实时调整参数,但是提交作业时需要将选定的参数在 navigation/scripts/tracker.py 中修改后编译提交。

./shell.sh rosparam set <参数的名字> <设定值>
# 例如:
# rosparam set /navigation/dis_disx_k 5.0

追踪算法参考pure pursuit算法,参数的含义请参考课件中纯追踪算法部分。

3.4 停止运行中的容器

./halt.sh

4. 如何提交我的作业?

如果你确认你的实现正确,你可以通过以下命令将你的控制容器镜像推送到课程Docker平台。

docker login docker.discover-lab.com:55555
docker push docker.discover-lab.com:55555/[Student ID]/client:hw4

注意,在本次作业中,你至少需要运行过一次 ./launch.sh (即至少编译过一次控制容器),才能完成作业的提交。

我们的评测系统会自动运行你的容器并打分。