本文档由北京小芽科技翻译,原文来自于ROBOTIS官方技术文档。
8.7 TurtleBot3 自动驾驶 2019 挑战赛
The AutoRace 2019是一个自主驾驶机器人平台的比赛。为了给机器人应用开发提供各种条件,比赛给出了尽可能少的结构规定。整个内容以软件(裁判系统的源代码)和硬件(比赛地图的stp/dwg文件)的方式开放。
整个机器人,甚至现场的裁判系统都是由ROS运行的,所以它将支持进一步制作多种内容。获取开放的各比赛项目的资料!
警告。请注意,您正在阅读本阶段的内容。如果你要参加2020年的AutoRace,请参阅[TurtleBot3 AutoRace 2020](https://emanual.robotis.com/docs/en/platform/turtlebot3/autonomous_driving/#turtlebot3-autorace-2020)。
8.7.1 TurtleBot3自动驾驶教程
AutoRace教程的源代码。turtlebot3_autorace packages
教程1:交通灯
教程2:车道跟踪
教程3:泊车
教程4:节点优化
教程5:交叉路口
教程6:隧道
8.7.2 教程:1. 要求
TurtleBot3 Burger
。- 需要在机器人中安装ROS和相关的ROS软件包。
- 在运行TurtleBot3 Auto源代码之前,需要测试TurtleBot3 Burger的所有功能,这些功能在TurtleBot3 e-Manual中描述。
- 远程PC(笔记本电脑、台式机等)”。
- 需要在电脑上安装ROS和依赖的ROS包。
- 在运行TurtleBot3 Auto源代码之前,需要测试TurtleBot3 Burger的所有功能,这些功能在[TurtleBot3 e-Manual](http://emanual.robotis.com/docs/en/platform/turtlebot3/overview/)中有所描述。
- TurtleBot3 Burger上的附加组件”。
- 树莓派相机G型(鱼眼镜头)。可用这里
- 在安装到任何导电材料的框架上之前,请仔细查看页面中的 “4个螺丝孔的特点”。
- 树莓派相机支架
- 树莓派相机G型(鱼眼镜头)。可用这里
- 轨迹结构和附件”,如交通标志、交通灯和其他物体。
- 从autorace_referee获取AutoRace裁判系统的来源
- 从[autorace_track]获取赛道的3D CAD模型数据(https://github.com/ROBOTIS-GIT/autorace_track)
8.7.3 教程: 2.安装AutoRace软件包
远程 PC & TurtleBot SBC
打开终端,然后安装AutoRace软件包。
1 | $ cd ~/catkin_ws/src/ |
8.7.4 教程:3. 安装额外的依赖包
Remote PC & TurtleBot SBC
Open new terminal, then enter
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 |
8.7.5 教程:4. 校准标定
教程:4.1. 相机成像校准
在
远程 PC
打开新终端,然后输入:1
$ roscore
在
TurtleBot SBC
打开新终端,然后输入:1
$ roslaunch turtlebot3_autorace_camera turtlebot3_autorace_camera_pi.launch
远程 PC
打开新终端,然后输入:1
$ rqt_image_view
然后在复选框中点击
/camera/image/compressed
或者/camera/image/
话题。 如果一切正常,屏幕上应该显示机器人的视图。在
远程 PC
打开新终端,然后输入:1
$ rosrun rqt_reconfigure rqt_reconfigure
然后,点击 “camera”,调整参数值,使相机显示干净、足够明亮的图像。之后,将每个值覆盖到
turtlebot3_autorace_camera/calibration/camera_calibration/camera.yaml
中。这将使摄像机从下一步开始按照你在这里设置的参数进行设置。
教程:4.2. 相机内参校准
在
远程 PC
打开新终端,然后输入:1
$ roscore
在
TurtleBot SBC
打开新终端,然后输入:1
$ roslaunch turtlebot3_autorace_camera turtlebot3_autorace_camera_pi.launch
远程 PC
在A4大小的纸上打印用于相机校准的棋盘。该棋盘在turtlebot3_autorace_camera/data/checkerboard_for_calibration.pdf
中。参见校准手册并修改写在turtlebot3_autorace_camera/launch/turtlebot3_autorace_intrinsic_camera_calibration.launch
的参数值。在
远程 PC
打开新终端,然后输入1
2$ export AUTO_IN_CALIB=calibration
$ roslaunch turtlebot3_autorace_camera turtlebot3_autorace_intrinsic_camera_calibration.launch远程 PC
完成校准后,相机内参校准文件将被保存在turtlebot3_autorace_camera/calibration/intrinsic_calibration/camerav2_320x240_30fps.yaml
.
教程:4.3. 外在的相机校准
在
远程 PC
打开新终端,然后输入:1
$ roscore
在
TurtleBot SBC
打开新终端,然后输入:1
$ roslaunch turtlebot3_autorace_camera turtlebot3_autorace_camera_pi.launch
在
远程 PC
打开新终端,然后输入:1
2$ export AUTO_IN_CALIB=action
$ roslaunch turtlebot3_autorace_camera turtlebot3_autorace_intrinsic_camera_calibration.launch在
远程 PC
打开新终端,然后输入:1
2$ export AUTO_EX_CALIB=calibration
$ roslaunch turtlebot3_autorace_camera turtlebot3_autorace_extrinsic_camera_calibration.launch在
远程 PC
打开新终端,然后输入:1
$ rqt
点击屏幕上方的
plugins
->visualization
->Image view
将为摄像机视图制作额外的监视器。在rqt板块中按照它制作2个额外的监视器。然后,在每个额外的监视器上选择/camera/image_extrinsic_calib/compressed
和/camera/image_projected_compensated
主题。如果一切正常,其中一个屏幕将显示红色矩形的图像,另一个将显示基于彼此的地面投影视图(鸟瞰图)。在
远程 PC
打开新终端,然后输入:1
$ rosrun rqt_reconfigure rqt_reconfigure
然后,调整
/camera/image_projection
和/camera/image_compensation_projection
中的参数值,对图像进行视觉修改。参数image_projection
将改变/camera/image_extrinsic_calib/compressed
图像的红色矩形的形状。本质相机校准将改变红色矩形所包围的图像,并将显示从车道上方看的图像。之后,将每个值覆盖到turtlebot3_autorace_camera/calibration/extrinsic_calibration/
中的yaml
文件上。这将使摄像机从下一步开始按照你在这里设置的参数进行设置。
教程:4.4. 识别的设置
到目前为止,所有的图像预处理都必须经过测试。
在
远程 PC
打开新终端,然后输入:1
$ roscore
在
TurtleBot SBC
打开新终端,然后输入:1
$ roslaunch turtlebot3_autorace_camera turtlebot3_autorace_camera_pi.launch
在
远程 PC
打开新终端,然后输入:1
2$ export AUTO_IN_CALIB=action
$ roslaunch turtlebot3_autorace_camera turtlebot3_autorace_intrinsic_camera_calibration.launch在
远程 PC
打开新终端,然后输入:1
2$ export AUTO_EX_CALIB=action
$ roslaunch turtlebot3_autorace_camera turtlebot3_autorace_extrinsic_camera_calibration.launch从现在开始,下面的描述将主要调整
feature detector / color filter
,用于物体识别。此后的每一次调整都是独立于其他过程的。然而,为了确保这一点,如果你想串联调整每个参数,请完美地完成每个调整,然后继续下一步。
8.7.6 教程:5. 任务
教程:5.1 车道检测
将机器人放在球道上。如果你正确放置了机器人,
yellow line
应该放在机器人的左边,当然,white line
应该放在机器人的右边。确保turtlebot3_robot
软件包的turtlebot3_bringup
节点尚未启动。如果它正在运行,机器人将突然在轨道上运行。在
远程 PC
打开新终端,然后输入:1
2$ export AUTO_DT_CALIB=calibration
$ roslaunch turtlebot3_autorace_detect turtlebot3_autorace_detect_lane.launch在
远程 PC
打开新终端,然后输入:1
$ rqt
点击屏幕上方的
plugins
->visualization
->Image view
将为摄像机视图制作额外的监视器。在rqt板中按照它制作3个额外的监视器。然后,在每个额外的监视器上选择/detect/image_yellow_lane_marker/compressed
、/detect/image_lane/compressed
和/detect/image_white_lane_marker/compressed
主题。如果一切正常,左右屏幕将显示黄线和白线的过滤图像,中间屏幕将显示机器人应该去的车道。在校准模式下,左右屏幕将显示白色,中间屏幕可能显示异常的结果。从这里开始,你应该调整过滤器的参数,以显示出正确的线条和方向。在
远程 PC
打开新终端,然后输入:1
$ rosrun rqt_reconfigure rqt_reconfigure
然后,调整
/camera/image_projection
和/camera/image_compensation_projection
中的参数值,对图像进行视觉修改。参数image_projection
将改变/camera/image_extrinsic_calib/compressed
图像的红色矩形的形状。本质相机校准将改变红色矩形所包围的图像,并将显示从车道上方看的图像。之后,将数值覆盖到turtlebot3_autorace_detect/param/lane/
中的lane.yaml
文件上。这将使摄像机从下一步开始按照你在这里设置的参数进行设置。TIP: 由于你所处的物理环境,包括房间里的光线亮度等原因,线色滤波的校准过程有时是很困难的。因此,你应该有耐心来执行这个程序。为了使一切都变得迅速,把
turtlebot3_autorace_detect/param/lane/lane.yaml
的值放在重新配置参数中,然后开始校准。首先校准色调低-高值。(1) 色相值意味着颜色,每种颜色,如yellow
,white
,都有自己的色相值区域(参考hsv地图)。然后校准饱和度的低-高值。(2) 每个颜色也有自己的饱和度区域。最后,校准亮度的低-高值。(3) 在源代码中,有自动调整功能,所以校准亮度低值是没有意义的。只要把亮度的高值调到255即可。清晰的过滤后的线条图像会给你清晰的车道结果。覆盖校准文件后,关闭
rqt_rconfigure
和turtlebot3_autorace_detect_lane
,然后输入1
2$ export AUTO_DT_CALIB=action
$ roslaunch turtlebot3_autorace_detect turtlebot3_autorace_detect_lane.launch输入时检查输出结果是否正常
远程 PC
1
$ roslaunch turtlebot3_autorace_control turtlebot3_autorace_control_lane.launch
TurtleBot SBC
1
$ roslaunch turtlebot3_bringup turtlebot3_robot.launch
输入这些命令后,机器人将启动运行。
教程: 5.2. 交通信号
交通标志检测需要一些交通标志的图片。使用
rqt_image_view
节点拍摄它们的照片,并通过Linux中任何一个photo editor
来编辑它们的大小和形状。该节点通过SIFT算法
找到交通标志,所以如果你想使用你定制的交通标志(在 “autorace_track “中没有介绍),只需注意 “交通标志中更多的边缘会使SIFT的识别结果更好”。将机器人放在车道上。这时,交通标志应该放在机器人可以轻易看到的地方。确保 “turtlebot3_bringup “软件包的 “turtlebot3_robot “节点尚未启动。如果它处于运行状态,机器人可能会突然在轨道上运行。
在
远程 PC
打开新终端,然后输入:1
$ rqt_image_view
然后,在选择框中点击
/camera/image_compensated
主题。如果一切正常,屏幕上应该显示机器人的视图。远程 PC
“通过alt
+print screen
拍摄照片,用你喜欢的照片编辑器编辑拍摄的照片。之后,把图片放到你放置的turtlebot3_autorace软件包/turtlebot3_autorace/turtlebot3_autorace_detect/file/detect_sign/
的地方,并按你的要求重新命名。(虽然,你应该改变写在源代码detect_sign.py
中的文件名,如果你想改变默认的文件名)。在
远程 PC
打开新终端,然后输入:1
$ roslaunch turtlebot3_autorace_detect turtlebot3_autorace_detect_sign.launch
在
远程 PC
打开新终端,然后输入:1
$ rqt_image_view
然后,在选择框中点击
/detect/image_traffic_sign/compressed
主题。如果一切正常,屏幕将显示交通标志检测的结果,如果它成功地识别了它。
教程: 5.3. 交通灯
将机器人放在球道上。如果你正确放置了机器人,
黄线
应该放在机器人的左边,当然,白线
应该放在机器人的右边。确保turtlebot3_bringup
软件包的turtlebot3_robot
节点尚未启动。如果它正在运行,机器人将突然在轨道上运行。在
远程 PC
打开新终端,然后输入:1
2$ export AUTO_DT_CALIB=calibration
$ roslaunch turtlebot3_autorace_detect turtlebot3_autorace_detect_traffic_light.launch在
远程 PC
打开新终端,然后输入:1
$ rqt
点击屏幕上方的
plugins
->visualization
->Image view
将为摄像机视图制作额外的监视器。在rqt板上按照它制作3个额外的监视器。然后,在每个额外的监视器上选择/detect/image_red_light
、/detect/image_yellow_light
、/detect/image_green_light
和/detect/image_traffic_light
主题。如果一切正常,三个屏幕将显示红/黄/绿光的过滤图像,另一个屏幕将显示带有短字符串的识别颜色。在校准模式下,三个屏幕将显示白色,另一个屏幕可能显示普通结果。从这里开始,你应该调整过滤器的参数,以显示出正确的线条和方向。在
远程 PC
打开新终端,然后输入:1
$ rosrun rqt_reconfigure rqt_reconfigure
then, adjust the parameter value in
/detect_traffic_light
. Changing the value of color filter will show the change of filtered view on each color’s screen. After that, overwrite value on to thetraffic_light.yaml
file inturtlebot3_autorace_detect/param/traffic_light/
. This will set its parameters as you set here from next launching.然后,调整
/detect_traffic_light
中的参数值。改变颜色过滤器的值将在每种颜色的屏幕上显示过滤后的视图的变化。之后,将参数值覆盖到turtlebot3_autorace_detect/param/traffic_light/
中的traffic_light.yaml
文件上。这将从下一步开始设置它的参数,就像你在这里设置的一样。Tip
: 和 [5.1 Lane Detection][lane_detection]一样远程 PC
覆盖校准文件后,关闭rqt_rconfigure
和turtlebot3_autorace_detect_traffic_light
,然后输入1
2$ export AUTO_DT_CALIB=action
$ roslaunch turtlebot3_autorace_detect turtlebot3_autorace_detect_traffic_light.launch使用
rqt_image_view
节点,并检查结果是否良好
教程:5.4. 停车场
泊车
只需要一个准备,即交通标志识别。- 将假机器人放在停车场的任何一个地方。
- 将机器人适当地放在车道上。
教程:5.5. 关卡穿越
关卡穿越在关卡上找到3个红色矩形,并计算关卡是打开还是关闭,以及机器人靠近多少。
将机器人正确地放在通道上。然后,将机器人带到关闭的关卡前。
远程PC
打开新的终端,然后输入1
2$ export AUTO_DT_CALIB=calibration
$ roslaunch turtlebot3_autorace_detect turtlebot3_autorace_detect_level.launch远程PC
打开新的终端,然后输入1
$ rqt
点击屏幕上方的
plugins
->visualization
->Image view
将为摄像机视图制作额外的监视器。在rqt板上按照它制作3个额外的监视器。然后,在每个额外的显示器上选择/detect/image_level_color_filtered
和/detect/image_level
主题。如果一切正常,三个屏幕将显示红色矩形的过滤图像,另一个屏幕将画一条连接矩形的线。在校准模式下,一个屏幕将显示白色,而另一个屏幕可能显示普通的结果。从这里开始,你应该调整过滤器的参数,以显示出正确的线条和方向。远程PC
打开新的终端,然后输入1
$ rosrun rqt_reconfigure rqt_reconfigure
然后,调整
/detect_level
中的参数值。改变颜色过滤器的值会在每种颜色的屏幕上显示过滤后的视图变化。然后,把这个值覆盖到turtlebot3_autorace_detect/param/level/
的level.yaml
文件中。这将从下一步开始,按照你在这里设置的参数进行设置。Tip
: 和 [5.1 Lane Detection][lane_detection]一样覆盖校准文件后,关闭
rqt_rconfigure
和turtlebot3_autorace_detect_level
,然后输入1
2$ export AUTO_DT_CALIB=action
$ roslaunch turtlebot3_autorace_detect turtlebot3_autorace_detect_level.launch使用
rqt_image_view
节点,并检查结果是否良好。
教程: 5.6. 隧道
- 隧道节点将通过使用Turtlebot3导航包把你从入口带到出口。你应该校准的是绘制隧道地图(或者如果你使用的是自动追踪轨道,你不需要自己修改),并检查机器人在从隧道出来之前应该摆出的姿势(如果你使用的是默认地图,这也是不必要的)。
远程PC
在RViz上检查exit
的pose
,同时 “SLAM “或Navigation
软件包正在运行。之后,将数值覆盖到detect_tunnel.py
文件的第144行
。
8.7.7 教程:6. 运行自动驾驶
从现在开始,所有相关的节点将以
action mode
运行。关闭远程PC
和TurtleBot SBC
上的所有ROS-related programs
和终端
,如果有些程序还没有关闭。然后,将机器人正确地放在车道上。远程PC
打开新的终端,然后输入1
$ roscore
TurtleBot SBC
打开新的终端,然后输入1
$ roslaunch turtlebot3_bringup turtlebot3_robot.launch
TurtleBot SBC
打开新的终端,然后输入1
$ roslaunch turtlebot3_autorace_camera turtlebot3_autorace_camera_pi.launch
远程PC
打开新的终端,然后输入1
2$ export AUTO_IN_CALIB=action
$ roslaunch turtlebot3_autorace_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_core turtlebot3_autorace_core.launch远程PC
打开新的终端,然后输入1
$ rostopic pub -1 /core/decided_mode std_msgs/UInt8 "data: 2"
turtlebot3_autorace_core将控制软件包中的所有系统(打开和关闭启动,软件包中的节点。)
8.7.8 TurtleBot3汽车赛在线竞赛
- TurtleBot3 竞赛
8.7.9 在Gazebo中进行竞速比赛
AutoRace是由Gazebo提供的。我们在R-BIZ挑战赛中创造了一个环境TurtleBot3 AutoRace 2017。
- 推荐规格
CPU | Intel Core i5 / 2 GHz Dual Core Processor |
---|---|
RAM | 4GB |
Storage | 20Gb of free hard drive space |
GPU | NVIDIA GeForce GTX 9 series |
警告:不要混淆你的真实相机校准配置文件和Gazebo校准配置文件。
注意: turtlebot3_autorace
软件包需要 turtlebot3_simulations
软件包作为先决条件。如果你在安装TurtleBot3 Simulations中没有安装它,请先安装它。
远程PC
运行AutoRace Gazebo。你可以在Gazebo中看到AutoRace 2017的地图。1
$ roslaunch turtlebot3_gazebo turtlebot3_autorace.launch
远程PC
运行任务启动。你可以在Gazebo看到 “交通灯”、”停放的TurtleBot3 “和 “收费站”。当TurtleBot3接近任务区时,它们会自动运行。1
$ roslaunch turtlebot3_gazebo turtlebot3_autorace_mission.launch
远程PC
运行AutoRace启动。如果你想真实地运行AutoRace,你必须校准你的相机。1
2
3$ export GAZEBO_MODE=true
$ export AUTO_IN_CALIB=action
$ roslaunch turtlebot3_autorace_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_core turtlebot3_autorace_core.launch远程PC
打开新的终端,然后输入1
$ rostopic pub -1 /core/decided_mode std_msgs/UInt8 "data: 2"
视频: 在Gazebo中运行竞速比赛