目标

  • 了解自主导航的实现方法
  • 用实验五里建好的地图,实现自主导航功能

内容

1、机器人自主导航的实现

首先确保机器人已经回到实验二中设定的起点,锁定机器人遥控器。在香橙派终端打开navigation文件夹,同样可以输入

ls

查看navigation文件夹下的文件。

依次运行run_navi.sh、start_mavros.sh和set_ekf_origin.sh脚本,并依次检查弹终端窗口,检查每个终端中的节点是否正常启动。

输入

./run_navi.sh

启动重定位和导航算法。

输入

./start_mavros.sh

启动飞行控制单元。飞控部分负责处理传感器数据,计算机器人的姿态和位置,并生成控制信号来调整执行器的动作,从而实现对机器人的控制。

输入

./set_ekf_origin.sh

为机器人设置原点,为了与实验二的建图保持一致,选取大黑楼的地理坐标为原点。

将遥控器右上方拨杆拨到左端的自动模式,机器人会按照实验二中建好的地图运动。由于纯跟踪轨迹跟踪控制算法的设定,可以选择两种运动模式。

第一,执行避障功能。进入pure_persuit文件夹下的launch文件夹,打开pure_persuit.py文件,修改避障函数is_avoid_obstacle中的参数为true,并同时修改local_planner文件夹下的local_planner.py文件,同样修改避障函数is_avoid_obstacle中的参数为true。在完成以上两处修改后,机器人在进行导航运动时将执行避障功能。执行避障功能时,当机器人前方出现障碍物,机器人将自动绕过障碍物并重新回到原路线继续行驶。

视频演示

第二,不执行避障功能。当pure_persuit.py和local_planner.py文件中函数is_avoid_obstacle的参数均设置为为false时,机器人在进行导航运动时不执行避障功能。机器人运动的过程中, 每前进五米就会暂停五秒。当机器人前方出现障碍物时,机器人会停止前进,障碍物消失后,机器人继续按照地图运动。

视频演示

当机器人返回起点,停止运动,可以在终端输入输入

./kill.sh

关闭全部进程。

2、rviz可视化结果

导航结束后,会自动生成俩个文件夹,分别保存里程计的数据和实验数据。进入navigation文件夹,进入data文件夹下的bags文件夹,输入

ls

可以查看当前文件夹下保存的包名。这里将存放里程计数据的包命名为navigation01,将存放实验数据的包命名为navigation02。

首先查看里程计数据的可视化结果。打开香橙派终端,输入

rviz2

进入rviz可视化界面。

在bags文件夹下打开终端,输入

ros2 bag play navigation01/

将navigation01包中的消息载入到rviz中。

在rviz界面中,点击Add——By topic—— 选择里程计数据话题 —— 点击OK。

将rviz中的Fixed_Frame参数修改为odom。将shape参数修改为Axes显示坐标系。将keep参数修改为100000显示机器人运动的整个轨迹。

等待一段时间后,可以显示机器人导航运动的完整轨迹。这里显示的是在避障模式下机器人的轨迹,从图中可以看到机器人的轨迹出现一定的弯曲,表示在该位置机器人绕过障碍物并返回原路线。

接着查看导航实验数据的可视化结果。打开终端,输入

./run_navi_replay.sh

运行脚本,rviz窗口会自动弹出。

进入navigation文件夹,进入data文件夹下的bags文件夹,在bags文件夹下打开一个新的终端,输入

ros2 bag play navigation02/

将navigation02包中的消息载入到rviz中。这时可以看到rviz界面中出现一条蓝色的线,这条线代表建图过程录入的机器人的轨迹。

机器人前方的白线代表机器人可以选择的运动轨迹,当前方蓝色的轨迹上出现障碍物,机器人可以选择白线的轨迹进行避障。

图中的红线代表机器人的实际运动轨迹,由可视化结果可以看出,机器人的实际运动轨迹与设定的轨迹基本相符。

作者:hyx  创建时间:2024-09-26 15:07
最后编辑:hyx  更新时间:2024-09-26 15:07