本文档由北京小芽科技翻译,原文来自于ROBOTIS官方技术文档。
自动驾驶
注意: ROS1 Kinetic 和 Noetic 支持 TurtleBot3 Autorace。
8.1 入门
注意:本说明已在Ubuntu 16.04
和上进行了测试ROS Kinetic Kame
。
电子手册中的内容如有更新,恕不另行通知。因此,某些视频可能与电子手册中的内容有所不同。
以下说明介绍如何使用 AutoRace 包在 ROS 上构建自动驾驶 TurtleBot3。
8.1.1 自动驾驶需要什么
1 | TurtleBot3 Burger |
- 它是在 ROS 上使用 AutoRace 包进行自动驾驶的基本模型。
- 提供的源代码 AutoRace Packages 是基于 TurtleBot3 Burger 制作的。
1 | Remote PC |
- 它与 Turtlebot3 上的单板计算机 (SBC) 进行通信。
- 装有 ROS 1 的笔记本电脑、台式机或其他设备。
1 | Raspberry Pi camera module with a camera mount |
- 如果 ROS 支持,您可以使用不同的模块。
- 提供用于校准相机的源代码是基于(鱼眼镜头)模块创建的。
1 | AutoRace tracks and objects |
- 在ROBOTIS_GIT/autorace下载 AutoRace 赛道、交通标志、交通灯和其他对象的 3D CAD 文件。
- 在ROBOTIS-GIT/autorace_referee下载免费系统
8.1.2 安装 Autorace 软件包
以下说明描述了如何安装软件包和校准相机。
在
远程PC
和SBC
上安装 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在
远程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
您需要在 SBC 上校准相机。
8.2 相机校准
校准摄像头对于自动驾驶非常重要。下面将逐步介绍如何简单地校准相机。
8.2.1 相机成像校准
在
远程PC
上启动 roscore1
$ roscore
在
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)在
远程PC
上运行 rqt_image_view1
$ rqt_image_view
在复选框上选择**/camera/image/compressed(或/camera/image/ )主题。**
- 在 上执行 rqt_reconfigure
Remote PC
。
1 | $ rosrun rqt_reconfigure rqt_reconfigure |
- 点击摄像头,修改参数值,可以看到摄像头的清晰图像。
打开位于turtlebot3 autorace [ *Autorace* Misson]_camera/calibration/camera_calibration文件夹中的 camera.yaml 文件。
将修改后的值写入文件。
8.2.2 内在相机校准
在 A4 尺寸的纸上打印棋盘格。棋盘用于内在相机校准。
- 棋盘存储在turtlebot3_autorace_camera/data/checkerboard_for_calibration.pdf
- 修改turtlebot3_autorace_camera/launch/turtlebot3_autorace_intrinsic_camera_calibration.launch中的参数值
- 有关相机校准的详细信息,请参阅ROS Wiki 中的相机校准手册。
棋盘
在 上启动 roscore
Remote PC
。1
$ roscore
触发相机
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)在[远程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使用棋盘校准相机,然后单击 CALIBRATE.
单击Save以保存内在校准数据。
calibrationdata.tar.gz 文件夹将在**/tmp**文件夹中创建。
解压calibrationdata.tar.gz文件夹,打开ost.yaml。
ost.yaml
ost.yaml 中的内在校准数据
将ost.yaml中的数据复制并粘贴到camerav2_320x240_30fps.yaml中。
camerav2_320x240_30fps.yaml
camerav2_320x240_30fps.yaml 中的内在校准数据
8.2.3 外部相机校准
在 上启动 roscore
Remote PC
。1
$ roscore
在
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)在
远程 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运行外部相机校准启动文件
Remote PC
。1
2$ export AUTO_EX_CALIB=calibration
$ roslaunch turtlebot3_autorace_${Autorace_Misson}_camera turtlebot3_autorace_extrinsic_camera_calibration.launch在远程PC上执行 rqt
1
$ rqt
单击插件>可视化>图像视图;将出现多个窗口。
在每个监视器上选择
/camera/image_extrinsic_calib/compressed
和/camera/image_projected_compensated
主题。
两个屏幕之一将显示带有红色矩形框的图像。另一个显示地面投影视图(鸟瞰图)。
/camera/image_extrinsic_calib/compressed
话题/camera/image_projected_compensated
话题
在远程PC上执行 rqt_reconfigure
1
$ rosrun rqt_reconfigure rqt_reconfigure
调整
/camera/image_projection
和中的参数/camera/image_compensation_projection
。
更改
/camera/image_projection
参数值。影响/camera/image_extrinsic_calib/compressed
话题。内在的相机校准将转换红色矩形包围的图像,并显示从车道上方看的图像。
rqt_reconfigure
参数修改的结果。
8.2.4 检查校准结果
当您完成所有相机校准(相机成像校准、内部校准、外部校准)后,请确保校准已成功应用于相机。
以下说明描述了识别设置。
在 上启动 roscore
Remote PC
。1
$ roscore
在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)在
远程PC
上运行摄像头内参标定文件:1
2$ export AUTO_IN_CALIB=action
$ roslaunch turtlebot3_autorace_${Autorace_Misson}_camera turtlebot3_autorace_intrinsic_camera_calibration.launch在
远程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 校准摄像头。
将 TurtleBot3 放置在黄色和白色车道之间。
注意:确保黄色车道位于机器人左侧,白色车道位于机器人右侧。
在
远程PC
上启动roscore1
$ roscore
触发
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)在
远程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在
远程PC
上运行一个相机外参校准文件1
2$ export AUTO_EX_CALIB=action
$ roslaunch turtlebot3_autorace_${Autorace_Misson}_camera turtlebot3_autorace_extrinsic_camera_calibration.launch在
远程PC
上运行车道检测启动文件1
2$ export AUTO_DT_CALIB=calibration
$ roslaunch turtlebot3_autorace_${Autorace_Misson}_detect turtlebot3_autorace_detect_lane.launch在
远程PC
上执行rqt1
$ rqt
单击 plugins > visualization > Image view; 将出现多个窗口。
在每个图像视图中选择三个主题:
/detect/image_yellow_lane_marker/compressed
,/detect/image_lane/compressed
,/detect/image_white_lane_marker/compressed
- 左(黄线)和右(白线)屏幕显示过滤后的图像。
/detect/image_yellow_lane_marker/compressed
主题的图像视图/detect/image_white_lane_marker/compressed
主题的图像视图中心屏幕是 TurtleBot3 的相机视图。
/detect/image_lane/compressed
主题的图像视图
在
远程PC
上执行 rqt_reconfigure1
$ rosrun rqt_reconfigure rqt_reconfigure
点击Detect Lane然后调整参数进行线条颜色过滤。
检测通道参数列表
在 rqt_reconfigure 调整参数产生的过滤图像
TIP : 线色过滤的校准过程有时会因为物理环境而变得困难,例如房间里的光线亮度等。为了让一切快速,请将位于turtlebot3 autorace* [Autorace_Misson]_detect/中的lane.yaml文件的值***param/lane/**重新配置参数,然后开始校准。首先校准色调低 - 高值。(1) 色相值表示颜色,以及每种颜色,如,
yellow``white
,有自己的区域色调值(参考hsv图)。然后校准饱和度低 - 高值。(2) 每种颜色也有自己的饱和度。最后,校准亮度低-高值。(3) 但是在源代码中,有自动调整功能,所以校准亮度低值是没有意义的。只需将亮度高值设置为 255。清晰过滤的线条图像将为您提供清晰的车道结果。打开位于 turtlebot3_autorace[Autorace_Misson]_detect/param/lane/中的lane.yaml文件。您需要将修改后的值写入文件。这将使相机在下次启动时设置您在此处设置的参数。
关闭rqt_rconfigure和turtlebot3_autorace_detect_lane。
在
远程PC
上打开终端并执行命令1
2$ export AUTO_DT_CALIB=action
$ roslaunch turtlebot3_autorace_${Autorace_Misson}_detect turtlebot3_autorace_detect_lane.launch检查结果是否正确。
- 在
远程PC
上打开终端并执行命令
1
$ roslaunch turtlebot3_autorace_${Autorace_Misson}_control turtlebot3_autorace_control_lane.launch
- 在
远程PC
上打开终端并执行命令
1
$ roslaunch turtlebot3_bringup turtlebot3_robot.launch
- 在
使用命令后,TurtleBot3 将开始运行。
8.4 交通标志检测
TurtleBot3 可以使用带有 的节点检测交通标志SIFT algorithm
,并在它在已建轨道上行驶时执行编程任务。按照提供的说明使用交通标志检测。
注意:交通标志中的更多边缘会增加 SIFT 的识别结果。
rqt_image_view
使用 TurtleBot3 的摄像头和节点拍摄交通标志。使用可在 Linux 操作系统中使用的照片编辑器编辑图片。
将 TurtleBot3 放在车道上。交通标志应放置在 TurtleBot3 可以轻松看到的位置。
注意:暂时不要让 TurtleBot3 在车道上运行。
在
远程PC
上执行 rqt_image_view1
$ rqt_image_view
在选择框中选择
/camera/image_compensated
主题。屏幕将显示来自 TurtleBot3 的视图。从
Remote PC
中捕获图片,并使用照片编辑器对其进行编辑。将编辑好的图片放到你已经放置的turtlebot3_autorace包**/turtlebot3_autorace/turtlebot3_autorace_detect/file/detect_sign/,并根据需要重命名。(不过,如果要更改默认文件名,则应更改源detect_sign.py文件中写入的文件名。)**
在
远程PC
上打开终端并执行命令1
$ roslaunch turtlebot3_autorace_${Autorace_Misson}_detect turtlebot3_autorace_detect_sign.launch
在
远程PC
上打开终端并执行命令1
$ rqt_image_view
在选择框中选择
/detect/image_traffic_sign/compressed
主题。屏幕将显示交通标志检测的结果。
8.5 任务
AutoRace 是针对自动驾驶机器人平台的竞赛。
为了给机器人应用开发提供各种条件,游戏尽可能少地提供结构性规定。前提是开源是基于 ROS 的,并且可以应用于本次比赛。内容可以不断更新。加入比赛并展示你的技能。
警告:请务必阅读自动驾驶以开始任务。
8.5.1 交通灯
交通灯是AutoRace的第一个任务。TurtleBot3认出了交通灯,并开始进行比赛。
交通灯检测
在
远程PC
上打开终端并执行命令1
2$ export AUTO_DT_CALIB=calibration
$ roslaunch turtlebot3_autorace_traffic_light_detect turtlebot3_autorace_detect_traffic_light.launch在
远程PC
上运行rqt1
rqt
选择四个话题:
/detect/image_red_light
,/detect/image_yellow_light
,/detect/image_green_light
,/detect/image_traffic_light
.运行rqt_reconfigure.
1
$ rosrun rqt_reconfigure rqt_reconfigure
调整有关交通灯主题的参数,以加强对交通标志的检测。调整参数的方式与车道检测的步骤5类似。
打开位于**turtlebot3_autorace_traffic_light_detect/param/traffic_light/的traffic_light.yaml*文件。
将修改后的值写入文件并保存。
终止运行rqt和rqt_reconfigure,以便从下一步测试校准是否成功应用。
在
远程PC
执行以下命令1
2$ export AUTO_DT_CALIB=action
$ roslaunch turtlebot3_autorace_traffic_light_detect turtlebot3_autorace_detect_traffic_light.launch运行rqt_image_view.
1
$ rqt_image_view
将看到交通灯的标定是非常成功的。
如何运行交通灯任务
警告:在运行交通灯节点之前,请务必阅读 Camera Calibration for Traffic Lights 。
在
远程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在
远程PC
执行以下命令1
2
3$ export AUTO_EX_CALIB=action
$ export AUTO_DT_CALIB=action
$ roslaunch turtlebot3_autorace_traffic_light_core turtlebot3_autorace_core.launch在
远程PC
执行以下命令1
$ rostopic pub -1 /core/decided_mode std_msgs/UInt8 "data: 3"
8.5.2 交叉路口
交叉路口是AutoRace的第二个任务。TurtleBot3在十字路口检测到一个特定的交通标志(如曲线标志),并向指定的方向前进。
如何执行十字路口任务
在
远程PC
执行以下命令1
2$ export AUTO_IN_CALIB=action
$ roslaunch turtlebot3_autorace_intersection_camera turtlebot3_autorace_intrinsic_camera_calibration.launch在
远程PC
执行以下命令1
2
3$ export AUTO_EX_CALIB=action
$ export AUTO_DT_CALIB=action
$ roslaunch turtlebot3_autorace_intersection_core turtlebot3_autorace_core.launch在
远程PC
执行以下命令1
$ rostopic pub -1 /core/decided_mode std_msgs/UInt8 "data: 2"
8.5.3 避障
避障是AutoRace的第三个任务。TurtleBot3在行驶过程中要避开赛道上的建筑。
如何执行避障任务
在
远程PC
执行以下命令1
2
3$ export AUTO_IN_CALIB=action
$ export GAZEBO_MODE=false
$ roslaunch turtlebot3_autorace_construction_camera turtlebot3_autorace_intrinsic_camera_calibration.launch在
远程PC
执行以下命令1
2
3$ export AUTO_EX_CALIB=action
$ export AUTO_DT_CALIB=action
$ roslaunch turtlebot3_autorace_construction_core turtlebot3_autorace_core.launch在
远程PC
执行以下命令1
$ rostopic pub -1 /core/decided_mode std_msgs/UInt8 "data: 2"
8.5.4 泊车
泊车是AutoRace的第四项任务。TurtleBot3检测到停车标志,并将自己停在一个停车场。
如何执行泊车任务
在
远程PC
执行以下命令1
2
3$ export AUTO_IN_CALIB=action
$ export GAZEBO_MODE=false
$ roslaunch turtlebot3_autorace_parking_camera turtlebot3_autorace_intrinsic_camera_calibration.launch在
远程PC
执行以下命令1
2
3$ export AUTO_EX_CALIB=action
$ export AUTO_DT_CALIB=action
$ roslaunch turtlebot3_autorace_parking_core turtlebot3_autorace_core.launch在
远程PC
执行以下命令1
$ rostopic pub -1 /core/decided_mode std_msgs/UInt8 "data: 2"
8.5.5 交叉路口
交叉路口是AutoRace的第五项任务。当TurtleBot3遇到平交道时,它将停止驾驶,并等待平交道的开启。
交叉路口关卡检测
在
远程PC
执行以下命令1
2$ export AUTO_DT_CALIB=calibration
$ roslaunch turtlebot3_autorace_level_crossing_detect turtlebot3_autorace_detect_level.launch执行rqt
1
$ rqt
选择两个话题:
/detect/image_level_color_filtered
,/detect/image_level
执行 rqt_reconfigure.
1
$ rosrun rqt_reconfigure rqt_reconfigure
选择
/detect_level
并调整有关平交道主题的参数,以加强对平交道对象的检测。调整参数的方式与车道检测的步骤5相似。打开位于**turtlebot3_autorace_stop_bar_detect/param/level/的level.yaml*。
将修改后的值写入文件并保存。
运行一个检测级别的lanuch文件。
1
2$ export AUTO_DT_CALIB=action
$ roslaunch turtlebot3_autorace_detect turtlebot3_autorace_detect_level.launch如何执行交叉道口任务
在
远程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在
远程PC
执行以下命令1
2
3$ export AUTO_EX_CALIB=action
$ export AUTO_DT_CALIB=action
$ roslaunch turtlebot3_autorace_level_crossing_core turtlebot3_autorace_core.launch在
远程PC
执行以下命令1
$ rostopic pub -1 /core/decided_mode std_msgs/UInt8 "data: 2"
隧道
隧道是AutoRace的第六项任务。TurtleBot3成功通过隧道。
bad asset path...8.5.6 如何执行隧道任务
在
远程PC
执行以下命令1
2
3$ export AUTO_IN_CALIB=action
$ export GAZEBO_MODE=false
$ roslaunch turtlebot3_autorace_tunnel_camera turtlebot3_autorace_intrinsic_camera_calibration.launch在
远程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在
远程PC
执行以下命令1
$ rostopic pub -1 /core/decided_mode std_msgs/UInt8 "data: 2"