08-1-自动驾驶基本操作

小芽科技 2022-07-26 12:02:09
Categories: Tags:

img

本文档由北京小芽科技翻译,原文来自于ROBOTIS官方技术文档

自动驾驶

注意: ROS1 Kinetic 和 Noetic 支持 TurtleBot3 Autorace。

8.1 入门

注意:本说明已在Ubuntu 16.04和上进行了测试ROS Kinetic Kame

电子手册中的内容如有更新,恕不另行通知。因此,某些视频可能与电子手册中的内容有所不同。

以下说明介绍如何使用 AutoRace 包在 ROS 上构建自动驾驶 TurtleBot3。

8.1.1 自动驾驶需要什么

1
TurtleBot3 Burger
1
Remote PC
1
Raspberry Pi camera module with a camera mount
1
AutoRace tracks and objects

8.1.2 安装 Autorace 软件包

以下说明描述了如何安装软件包和校准相机。

  1. 远程PCSBC上安装 AutoRace 包

    1
    2
    3
    $ cd ~/catkin_ws/src/
    $ git clone -b kinetic-devel https://github.com/ROBOTIS-GIT/turtlebot3_autorace_2020.git
    $ cd ~/catkin_ws && catkin_make
  2. 远程PC上安装依赖包

    1
    $ sudo apt-get install ros-kinetic-image-transport ros-kinetic-cv-bridge ros-kinetic-vision-opencv python-opencv libopencv-dev ros-kinetic-image-proc
  3. 您需要在 SBC 上校准相机

8.2 相机校准

校准摄像头对于自动驾驶非常重要。下面将逐步介绍如何简单地校准相机。

8.2.1 相机成像校准

  1. 远程PC 上启动 roscore

    1
    $ roscore
  2. SBC上触发相机

    1
    $ roslaunch turtlebot3_autorace_${Autorace_Misson}_camera turtlebot3_autorace_camera_pi.launch

    警告:一定要指定${Autorace_Misson}(即roslaunch turtlebot3_autorace_traffic_light_camera turtlebot3_autorace_camera_pi.launch

  3. 远程PC上运行 rqt_image_view

    1
    $ rqt_image_view
  4. 在复选框上选择**/camera/image/compressed(或/camera/image/ )主题。**

img

  1. 在 上执行 rqt_reconfigure Remote PC
1
$ rosrun rqt_reconfigure rqt_reconfigure
  1. 点击摄像头,修改参数值,可以看到摄像头的清晰图像。

img

  1. 打开位于turtlebot3 autorace [ *Autorace* Misson]_camera/calibration/camera_calibration文件夹中的 camera.yaml 文件。

  2. 将修改后的值写入文件。

img

8.2.2 内在相机校准

在 A4 尺寸的纸上打印棋盘格。棋盘用于内在相机校准。

img

棋盘

  1. 在 上启动 roscore Remote PC

    1
    $ roscore
  2. 触发相机SBC

    1
    $ roslaunch turtlebot3_autorace_${Autorace_Misson}_camera turtlebot3_autorace_camera_pi.launch

    警告:一定要指定${Autorace_Misson}(即roslaunch turtlebot3_autorace_traffic_light_camera turtlebot3_autorace_camera_pi.launch

  3. 在[远程PC]运行一个摄像头内参标定的launch 文件

    1
    2
    3
    $ export AUTO_IN_CALIB=calibration
    $ export GAZEBO_MODE=false
    $ roslaunch turtlebot3_autorace_${Autorace_Misson}_camera turtlebot3_autorace_intrinsic_camera_calibration.launch
  4. 使用棋盘校准相机,然后单击 CALIBRATE.

    img

  5. 单击Save以保存内在校准数据。

    img

  6. calibrationdata.tar.gz 文件夹将在**/tmp**文件夹中创建。

    img

  7. 解压calibrationdata.tar.gz文件夹,打开ost.yaml

    img

    ost.yaml

    img

    ost.yaml 中的内在校准数据

  8. 将ost.yaml中的数据复制并粘贴到camerav2_320x240_30fps.yaml中。

    img

    camerav2_320x240_30fps.yaml

    img

    camerav2_320x240_30fps.yaml 中的内在校准数据

8.2.3 外部相机校准

  1. 在 上启动 roscore Remote PC

    1
    $ roscore
  2. SBC启动摄像头。

    1
    $ roslaunch turtlebot3_autorace_${Autorace_Misson}_camera turtlebot3_autorace_camera_pi.launch

    警告:一定要指定${Autorace_Misson}(即roslaunch turtlebot3_autorace_traffic_light_camera turtlebot3_autorace_camera_pi.launch

  3. 远程 PC上使用命令。

    1
    2
    3
    $ export AUTO_IN_CALIB=action
    $ export GAZEBO_MODE=false
    $ roslaunch turtlebot3_autorace_${Autorace_Misson}_camera turtlebot3_autorace_intrinsic_camera_calibration.launch
  4. 运行外部相机校准启动文件Remote PC

    1
    2
    $ export AUTO_EX_CALIB=calibration
    $ roslaunch turtlebot3_autorace_${Autorace_Misson}_camera turtlebot3_autorace_extrinsic_camera_calibration.launch
  5. 在远程PC上执行 rqt

    1
    $ rqt
  6. 单击插件>可视化>图像视图;将出现多个窗口。

  7. 在每个监视器上选择/camera/image_extrinsic_calib/compressed/camera/image_projected_compensated主题。

  1. 在远程PC上执行 rqt_reconfigure

    1
    $ rosrun rqt_reconfigure rqt_reconfigure
  2. 调整/camera/image_projection和中的参数/camera/image_compensation_projection

8.2.4 检查校准结果

当您完成所有相机校准(相机成像校准、内部校准、外部校准)后,请确保校准已成功应用于相机。
以下说明描述了识别设置。

  1. 在 上启动 roscore Remote PC

    1
    $ roscore
  2. 在SBC上启动摄像头

    1
    $ roslaunch turtlebot3_autorace_${Autorace_Misson}_camera turtlebot3_autorace_camera_pi.launch

    警告:一定要指定${Autorace_Misson}(即roslaunch turtlebot3_autorace_traffic_light_camera turtlebot3_autorace_camera_pi.launch

  3. 远程PC上运行摄像头内参标定文件:

    1
    2
    $ export AUTO_IN_CALIB=action
    $ roslaunch turtlebot3_autorace_${Autorace_Misson}_camera turtlebot3_autorace_intrinsic_camera_calibration.launch
  4. 远程PC上打开终端并执行以下命令:

    1
    2
    $ export AUTO_EX_CALIB=action
    $ roslaunch turtlebot3_autorace_${Autorace_Misson}_camera turtlebot3_autorace_extrinsic_camera_calibration.launch

从现在开始,以下描述将主要feature detector / color filter针对对象识别进行调整。此处之后的每一次调整都是相互独立的过程。但是,如果要对每个参数进行串联调整,请完美地完成每个调整,然后继续下一步。

8.3 车道检测

车道检测包允许 Turtlebot3 在没有外部影响的情况下在两条车道之间行驶。

以下说明描述了如何使用车道检测功能以及通过 rqt 校准摄像头。

  1. 将 TurtleBot3 放置在黄色和白色车道之间。

    注意:确保黄色车道位于机器人左侧,白色车道位于机器人右侧。

  2. 远程PC上启动roscore

    1
    $ roscore
  3. 触发SBC上的相机:

    1
    $ roslaunch turtlebot3_autorace_${Autorace_Misson}_camera turtlebot3_autorace_camera_pi.launch

    警告:一定要指定${Autorace_Misson}(即roslaunch turtlebot3_autorace_traffic_light_camera turtlebot3_autorace_camera_pi.launch

  4. 远程PC上运行摄像头内参标定文件:

    1
    2
    3
    $ export AUTO_IN_CALIB=action
    $ export GAZEBO_MODE=false
    $ roslaunch turtlebot3_autorace_${Autorace_Misson}_camera turtlebot3_autorace_intrinsic_camera_calibration.launch
  5. 远程PC 上运行一个相机外参校准文件

    1
    2
    $ export AUTO_EX_CALIB=action
    $ roslaunch turtlebot3_autorace_${Autorace_Misson}_camera turtlebot3_autorace_extrinsic_camera_calibration.launch
  6. 远程PC上运行车道检测启动文件

    1
    2
    $ export AUTO_DT_CALIB=calibration
    $ roslaunch turtlebot3_autorace_${Autorace_Misson}_detect turtlebot3_autorace_detect_lane.launch
  7. 远程PC上执行rqt

    1
    $ rqt
  8. 单击 plugins > visualization > Image view; 将出现多个窗口。

  9. 在每个图像视图中选择三个主题: /detect/image_yellow_lane_marker/compressed, /detect/image_lane/compressed, /detect/image_white_lane_marker/compressed

    • 左(黄线)和右(白线)屏幕显示过滤后的图像。

    img

    /detect/image_yellow_lane_marker/compressed主题的图像视图

    img

    /detect/image_white_lane_marker/compressed 主题的图像视图

    • 中心屏幕是 TurtleBot3 的相机视图。

      img

      /detect/image_lane/compressed 主题的图像视图

  10. 远程PC上执行 rqt_reconfigure

    1
    $ rosrun rqt_reconfigure rqt_reconfigure
  11. 点击Detect Lane然后调整参数进行线条颜色过滤。

    img

    检测通道参数列表

    img

    在 rqt_reconfigure 调整参数产生的过滤图像

    TIP : 线色过滤的校准过程有时会因为物理环境而变得困难,例如房间里的光线亮度等。为了让一切快速,请将位于turtlebot3 autorace* [Autorace_Misson]_detect/中的lane.yaml文件的值***param/lane/**重新配置参数,然后开始校准。首先校准色调低 - 高值。(1) 色相值表示颜色,以及每种颜色,如,yellow``white,有自己的区域色调值(参考hsv图)。然后校准饱和度低 - 高值。(2) 每种颜色也有自己的饱和度。最后,校准亮度低-高值。(3) 但是在源代码中,有自动调整功能,所以校准亮度低值是没有意义的。只需将亮度高值设置为 255。清晰过滤的线条图像将为您提供清晰的车道结果。

  12. 打开位于 turtlebot3_autorace[Autorace_Misson]_detect/param/lane/中的lane.yaml文件。您需要将修改后的值写入文件。这将使相机在下次启动时设置您在此处设置的参数。

    img

  13. 关闭rqt_rconfigureturtlebot3_autorace_detect_lane

  14. 远程PC上打开终端并执行命令

    1
    2
    $ export AUTO_DT_CALIB=action
    $ roslaunch turtlebot3_autorace_${Autorace_Misson}_detect turtlebot3_autorace_detect_lane.launch
  15. 检查结果是否正确。

    • 远程PC上打开终端并执行命令
    1
    $ roslaunch turtlebot3_autorace_${Autorace_Misson}_control turtlebot3_autorace_control_lane.launch
    • 远程PC上打开终端并执行命令
    1
    $ roslaunch turtlebot3_bringup turtlebot3_robot.launch
  16. 使用命令后,TurtleBot3 将开始运行。

8.4 交通标志检测

TurtleBot3 可以使用带有 的节点检测交通标志SIFT algorithm,并在它在已建轨道上行驶时执行编程任务。按照提供的说明使用交通标志检测。

注意:交通标志中的更多边缘会增加 SIFT 的识别结果。

  1. rqt_image_view使用 TurtleBot3 的摄像头和节点拍摄交通标志。

  2. 使用可在 Linux 操作系统中使用的照片编辑器编辑图片。

  3. 将 TurtleBot3 放在车道上。交通标志应放置在 TurtleBot3 可以轻松看到的位置。

    注意:暂时不要让 TurtleBot3 在车道上运行。

  4. 远程PC上执行 rqt_image_view

    1
    $ rqt_image_view
  5. 在选择框中选择/camera/image_compensated主题。屏幕将显示来自 TurtleBot3 的视图。

  6. Remote PC 中捕获图片,并使用照片编辑器对其进行编辑。

  7. 将编辑好的图片放到你已经放置的turtlebot3_autorace包**/turtlebot3_autorace/turtlebot3_autorace_detect/file/detect_sign/,并根据需要重命名。(不过,如果要更改默认文件名,则应更改源detect_sign.py文件中写入的文件名。)**

  8. 远程PC上打开终端并执行命令

    1
    $ roslaunch turtlebot3_autorace_${Autorace_Misson}_detect turtlebot3_autorace_detect_sign.launch
  9. 远程PC上打开终端并执行命令

    1
    $ rqt_image_view
  10. 在选择框中选择/detect/image_traffic_sign/compressed主题。屏幕将显示交通标志检测的结果。

8.5 任务

AutoRace 是针对自动驾驶机器人平台的竞赛。
为了给机器人应用开发提供各种条件,游戏尽可能少地提供结构性规定。前提是开源是基于 ROS 的,并且可以应用于本次比赛。内容可以不断更新。加入比赛并展示你的技能。

警告:请务必阅读自动驾驶以开始任务。

8.5.1 交通灯

交通灯是AutoRace的第一个任务。TurtleBot3认出了交通灯,并开始进行比赛。

交通灯检测

  1. 远程PC上打开终端并执行命令

    1
    2
    $ export AUTO_DT_CALIB=calibration
    $ roslaunch turtlebot3_autorace_traffic_light_detect turtlebot3_autorace_detect_traffic_light.launch
  2. 远程PC上运行rqt

    1
    rqt
  3. 选择四个话题: /detect/image_red_light, /detect/image_yellow_light, /detect/image_green_light, /detect/image_traffic_light.

  4. 运行rqt_reconfigure.

    1
    $ rosrun rqt_reconfigure rqt_reconfigure
  5. 调整有关交通灯主题的参数,以加强对交通标志的检测。调整参数的方式与车道检测的步骤5类似。

  6. 打开位于**turtlebot3_autorace_traffic_light_detect/param/traffic_light/traffic_light.yaml*文件。

  7. 将修改后的值写入文件并保存。

  8. 终止运行rqt和rqt_reconfigure,以便从下一步测试校准是否成功应用。

  9. 远程PC执行以下命令

    1
    2
    $ export AUTO_DT_CALIB=action
    $ roslaunch turtlebot3_autorace_traffic_light_detect turtlebot3_autorace_detect_traffic_light.launch
  10. 运行rqt_image_view.

    1
    $ rqt_image_view
  11. 将看到交通灯的标定是非常成功的。

如何运行交通灯任务

警告:在运行交通灯节点之前,请务必阅读 Camera Calibration for Traffic Lights

  1. 远程PC执行以下命令

    1
    2
    3
    $ export AUTO_IN_CALIB=action
    $ export GAZEBO_MODE=false
    $ roslaunch turtlebot3_autorace_traffic_light_camera turtlebot3_autorace_intrinsic_camera_calibration.launch
  2. 远程PC执行以下命令

    1
    2
    3
    $ export AUTO_EX_CALIB=action
    $ export AUTO_DT_CALIB=action
    $ roslaunch turtlebot3_autorace_traffic_light_core turtlebot3_autorace_core.launch
  3. 远程PC执行以下命令

    1
    $ rostopic pub -1 /core/decided_mode std_msgs/UInt8 "data: 3"

8.5.2 交叉路口

交叉路口是AutoRace的第二个任务。TurtleBot3在十字路口检测到一个特定的交通标志(如曲线标志),并向指定的方向前进。

如何执行十字路口任务

  1. 远程PC执行以下命令

    1
    2
    $ export AUTO_IN_CALIB=action
    $ roslaunch turtlebot3_autorace_intersection_camera turtlebot3_autorace_intrinsic_camera_calibration.launch
  2. 远程PC执行以下命令

    1
    2
    3
    $ export AUTO_EX_CALIB=action
    $ export AUTO_DT_CALIB=action
    $ roslaunch turtlebot3_autorace_intersection_core turtlebot3_autorace_core.launch
  3. 远程PC执行以下命令

    1
    $ rostopic pub -1 /core/decided_mode std_msgs/UInt8 "data: 2"

8.5.3 避障

避障是AutoRace的第三个任务。TurtleBot3在行驶过程中要避开赛道上的建筑。

如何执行避障任务

  1. 远程PC执行以下命令

    1
    2
    3
    $ export AUTO_IN_CALIB=action
    $ export GAZEBO_MODE=false
    $ roslaunch turtlebot3_autorace_construction_camera turtlebot3_autorace_intrinsic_camera_calibration.launch
  2. 远程PC执行以下命令

    1
    2
    3
    $ export AUTO_EX_CALIB=action
    $ export AUTO_DT_CALIB=action
    $ roslaunch turtlebot3_autorace_construction_core turtlebot3_autorace_core.launch
  3. 远程PC执行以下命令

    1
    $ rostopic pub -1 /core/decided_mode std_msgs/UInt8 "data: 2"

8.5.4 泊车

泊车是AutoRace的第四项任务。TurtleBot3检测到停车标志,并将自己停在一个停车场。

如何执行泊车任务

  1. 远程PC执行以下命令

    1
    2
    3
    $ export AUTO_IN_CALIB=action
    $ export GAZEBO_MODE=false
    $ roslaunch turtlebot3_autorace_parking_camera turtlebot3_autorace_intrinsic_camera_calibration.launch
  2. 远程PC执行以下命令

    1
    2
    3
    $ export AUTO_EX_CALIB=action
    $ export AUTO_DT_CALIB=action
    $ roslaunch turtlebot3_autorace_parking_core turtlebot3_autorace_core.launch
  3. 远程PC执行以下命令

    1
    $ rostopic pub -1 /core/decided_mode std_msgs/UInt8 "data: 2"

8.5.5 交叉路口

交叉路口是AutoRace的第五项任务。当TurtleBot3遇到平交道时,它将停止驾驶,并等待平交道的开启。

交叉路口关卡检测

  1. 远程PC执行以下命令

    1
    2
    $ export AUTO_DT_CALIB=calibration
    $ roslaunch turtlebot3_autorace_level_crossing_detect turtlebot3_autorace_detect_level.launch
  2. 执行rqt

    1
    $ rqt
  3. 选择两个话题: /detect/image_level_color_filtered, /detect/image_level

  4. 执行 rqt_reconfigure.

    1
    $ rosrun rqt_reconfigure rqt_reconfigure
  5. 选择/detect_level并调整有关平交道主题的参数,以加强对平交道对象的检测。调整参数的方式与车道检测的步骤5相似。

  6. 打开位于**turtlebot3_autorace_stop_bar_detect/param/level/level.yaml*。

  7. 将修改后的值写入文件并保存。

  8. 运行一个检测级别的lanuch文件。

    1
    2
    $ export AUTO_DT_CALIB=action
    $ roslaunch turtlebot3_autorace_detect turtlebot3_autorace_detect_level.launch

    如何执行交叉道口任务

  9. 远程PC执行以下命令

    1
    2
    3
    $ export AUTO_IN_CALIB=action
    $ export GAZEBO_MODE=false
    $ roslaunch turtlebot3_autorace_level_crossing_camera turtlebot3_autorace_intrinsic_camera_calibration.launch
  10. 远程PC执行以下命令

    1
    2
    3
    $ export AUTO_EX_CALIB=action
    $ export AUTO_DT_CALIB=action
    $ roslaunch turtlebot3_autorace_level_crossing_core turtlebot3_autorace_core.launch
  11. 远程PC执行以下命令

    1
    $ rostopic pub -1 /core/decided_mode std_msgs/UInt8 "data: 2"

隧道

隧道是AutoRace的第六项任务。TurtleBot3成功通过隧道。

bad asset path...

8.5.6 如何执行隧道任务

  1. 远程PC执行以下命令

    1
    2
    3
    $ export AUTO_IN_CALIB=action
    $ export GAZEBO_MODE=false
    $ roslaunch turtlebot3_autorace_tunnel_camera turtlebot3_autorace_intrinsic_camera_calibration.launch
  2. 远程PC执行以下命令

    1
    2
    3
    4
    $ export AUTO_EX_CALIB=action
    $ export AUTO_DT_CALIB=action
    $ export TURTLEBOT3_MODEL=burger
    $ roslaunch turtlebot3_autorace_tunnel_core turtlebot3_autorace_core.launch
  3. 远程PC执行以下命令

    1
    $ rostopic pub -1 /core/decided_mode std_msgs/UInt8 "data: 2"