跳转到内容

定位导航示例

本示例基于激光雷达和 IMU 传感器实现机器狗定位导航功能,使用的定位算法为 hdl_localization 定位算法,并使用 move_base 功能包实现了基于地图的导航。

注意: 定位导航过程中需保持激光雷达驱动开启(参考建图示例中的雷达驱动启动方法)。

  1. 打开一个终端,输入以下指令以启动对应的雷达驱动(如果在建图中已经启动雷达驱动则无需再次启动)。
Terminal window
cd /home/ysc/lite_cog/system/scripts/lidar
./start_lslidar.sh # 镭神雷达
./start_livox.sh # Livox 雷达
./start_rslidar.sh # 速腾雷达
  1. 打开一个终端,输入以下指令以启动定位导航节点。
Terminal window
cd /home/ysc/lite_cog/system/scripts/nav
./start_nav.sh
  1. 开启导航后,需要对机器狗定位进行初始化: RViz 导航初始化(ROS1)

a) 点击顶部工具栏中的”2D Pose Estimate”按钮;

b) 确定机器狗的实际位置和朝向,将鼠标移动到地图中的对应位置,按住左键并依照实际朝向拖拽出箭头,然后松开鼠标左键;

c) 若定位初始化成功,激光点云与栅格地图会重合,且终端打印”initial pose received!!”;

d) 若激光点云与栅格地图没有重合,则说明初始位置没给对,请重新操作;

e) 若地图上没有出现激光点云,且终端打印的是”globalmap has not been received!!”,请用 Ctrl+C 关闭程序,重新运行尝试;

f) base_link 坐标系为机器狗坐标系,x 轴(红色)表示机器狗朝向。

【RViz 使用技巧】RViz 中,用鼠标滚轮可放大缩小,用鼠标左键可旋转地图,按住 Shift 并使用鼠标左键,可平移拖动地图。

  1. 定位初始化成功后,可按照相似方法给定一个目标点:

a) 点击顶部工具栏中的”2D Nav Goal”按钮; b) 将鼠标移动到地图中的目标位置,按住左键并依照目标朝向拖拽出箭头,然后松开鼠标; c) 若目标点指定成功,界面中会出现规划好的机器狗运动路径;若目标点指定失败,重新操作即可。

  1. 在 APP 上打开机器狗的自主模式,并使机器狗起立,机器狗将按照全局规划得到的大致路径前进,并通过局部规划避开动态障碍物,最终到达目的地。

注意: 为防止机器狗身体被认定为障碍物,只有达到一定高度的物体才会被认定为障碍物。

本案例还提供了使机器狗按序到达一系列目标点进行循环导航的功能。

注意: 开始标点前,请检查 /home/ysc/lite_cog/pipeline/src/pipeline/data 文件夹中是否存在以前记录的目标点文件,如有,可移动到其他文件夹,以避免覆盖。

  1. 首先参照单目标点定位导航中的第 1 步至第 3 步启动导航程序并给定初始定位,然后再打开一个终端,运行以下指令开启目标点配置程序:
Terminal window
cd /home/ysc/lite_cog/pipeline/src/pipeline_tracking/tools
python3 location_record.py # 中文版
python3 location_record_en.py # 英文版

DR Location Recorder 中文界面 DR Location Recorder 英文界面

  1. 将机器狗手动遥控至某个目标点位置,在”位点编号”/“location number”处输入 1,点击”获取点位”/“get location”,再点击”记录点位”/“record location”,在 /home/ysc/lite_cog/pipeline/src/pipeline/data 目录下会出现一个名为 1.json 的记录文件。然后将机器狗遥控至下一个位置,重复上述操作,直至所有点位记录完毕后,关闭标点程序。若中途标点程序被关闭,再次打开即可(参考第 1 步)。

  2. 打开一个终端,运行以下命令,并在 APP 上将机器狗的自主模式打开,机器狗将前往距离最近的记忆位点,并按照位点序号循环导航。

Terminal window
cd /home/ysc/lite_cog/pipeline
source devel/setup.bash
cd /home/ysc/lite_cog/pipeline/src/pipeline_tracking/scripts
python3 Task.py
  1. 此后,再次使用时,只需要先参照单目标点定位导航启动导航程序并给定初始定位,然后执行第 3 步,即可使机器狗按照先前记录的目标点进行循环导航。

本示例基于激光雷达和 IMU 传感器实现机器狗定位导航功能,使用的定位算法为 hdl_localization 定位算法,并使用 bt_navigator 功能包实现了基于地图的导航。

注意: 定位导航过程中需保持激光雷达驱动开启。

  1. 打开一个终端,根据所使用雷达种类输入以下指令以启动对应的雷达驱动(如果在建图中已经启动雷达驱动则无需再次启动)。
Terminal window
cd ~/lite_cog_ros2/system/scripts/lidar
./start_lslidar.sh # 镭神雷达
./start_livox.sh # Livox 雷达
./start_rslidar.sh # 速腾雷达
  1. 打开一个终端,输入以下指令以启动定位导航节点。
Terminal window
cd /home/ysc/lite_cog_ros2/system/scripts/nav
./start_nav.sh
  1. 开启导航后,需要对机器狗定位进行初始化: RViz 导航初始化(ROS2)

a) 点击顶部工具栏中的”2D Pose Estimate”按钮;

b) 确定机器狗的实际位置和朝向,将鼠标移动到地图中的对应位置,按住左键并依照实际朝向拖拽出箭头,然后松开鼠标左键;

c) 若定位初始化成功,激光点云与栅格地图会重合,且终端打印”initial pose received!!”;

d) 若激光点云与栅格地图没有重合,则说明初始位置没给对,请重新操作;

e) 若地图上没有出现激光点云,且终端打印的是”globalmap has not been received!!”,请用 Ctrl+C 关闭程序,重新运行尝试;

f) base_link 坐标系为机器狗坐标系,x 轴(红色)表示机器狗朝向。

【RViz 使用技巧】RViz 中,用鼠标滚轮可放大缩小,用鼠标左键可旋转地图,按住 Shift 并长按鼠标左键,可平移拖动地图。

  1. 定位初始化成功后,可按照相似方法给定一个目标点:

a) 点击顶部工具栏中的”Navigation2 Goal”按钮; b) 将鼠标移动到地图中的目标位置,按住左键并依照目标朝向拖拽出箭头,然后松开鼠标; c) 若目标点指定成功,界面中会出现规划好的机器狗运动路径;若目标点指定失败,重新操作即可。

  1. 在 APP 上打开机器狗的自主模式,并使机器狗起立,机器狗将按照全局规划得到的大致路径前进,并通过局部规划避开动态障碍物,最终到达目的地。

注意: 为防止机器狗身体被认定为障碍物,只有达到一定高度的物体才会被认定为障碍物。

本案例还提供了使机器狗按序到达一系列目标点进行循环导航的功能。

注意: 开始标点前,请检查 /home/ysc/lite_cog_ros2/pipeline/src/pipeline/data 文件夹中是否存在以前记录的目标点文件,如有,可移动到其他文件夹,以避免覆盖。

  1. 首先参照单目标点定位导航中的第 1 步至第 3 步启动导航程序并给定初始定位,然后再打开一个终端,运行以下指令开启目标点配置程序:

a) 如需打开中文版界面,请运行:

Terminal window
cd ~/lite_cog_ros2/pipeline/src/pipeline
python3 LocationRecorder.py

b) 如需打开英文版界面,请运行:

Terminal window
cd ~/lite_cog_ros2/pipeline/src/pipeline
python3 LocationRecorder_EN.py

DR Location Recorder 中文界面 DR Location Recorder 英文界面

  1. 将机器狗手动遥控至某个目标点位置,在”位点编号”/“location number”处输入 1,点击”获取点位”/“get location”,再点击”记录点位”/“record location”,在 /home/ysc/lite_cog_ros2/pipeline/src/data 目录下会出现一个名为 1.json 的记录文件。然后将机器狗遥控至下一个位置,重复上述操作,直至所有点位记录完毕后,关闭标点程序。若中途标点程序被关闭,再次打开即可。

  2. 打开一个终端,运行以下命令,并在 APP 上将机器狗的自主模式打开,机器狗将前往距离最近的记忆位点,并按照位点序号循环导航。

Terminal window
cd /home/ysc/lite_cog_ros2/pipeline/src/pipeline
python3 Task.py
  1. 此后,再次使用时,只需要执行第 1 步和第 3 步,即可使机器狗按照先前记录的目标点进行循环导航。