turtlebot简介 相信很多接触过ROS的人,对turtlebot这个机器人都不陌生。它是一款低成本、开源的个人机器人套件,有着ROS的官方支持,是ROS的标准平台。turtlebot系列的设计有着易于购买、搭建和组装,并且可以从ROS wiki下载官方的SDK进行二次开发,是作为入门级不可或缺的机器人移动平台。 turtlebot至今已经发布了三代,今天将会介绍如何以turtlebot3为载体,在gazebo中实现自动驾驶中寻路(lane detection)功能。 技术分享 | turtlebot3自动驾驶之识别道路_ros

前期准备 工欲善其事必先利其器,要想通过turtlebot3实现自动驾驶功能,首先需要安装一些环境。本次测试是基于 ubuntu 20.04的ROS Noetic版本。 技术分享 | turtlebot3自动驾驶之识别道路_自动驾驶_02

1.安装turtlebot3环境 打开终端,输入 cd ~/catkin_ws/src/ git clone https://github.com/ROBOTIS-GIT/turtlebot3.git cd turtlebot3 git clone https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3_autorace_2020.git git clone https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git sudo apt install ros-noetic-image-transport ros-noetic-cv-bridge ros-noetic-vision-opencv python3-opencv libopencv-dev ros-noetic-image-proc 当我们完成以上环境安装以后,编译即可 cd ~/catkin_ws catkin_make

当我们编译完成以后,可以尝试启动仿真环境。 打开终端,输入命令 roslaunch turtlebot3_gazebo turtlebot3_autorace_2020.launch 当出现以下图片,表示仿真环境成功安装 技术分享 | turtlebot3自动驾驶之识别道路_github_03

2.相机校准 自动驾驶在很大程度上依赖于视觉处理,因此相机校准对于成功完成任务起着重要作用。在gazebo仿真环境中不需要校准相机的内参,但需要校准相机外参。注意:在实际使用中需要按照一定的步骤详细校准相机的内外参数。 首先我们启动仿真环境 roslaunch turtlebot3_gazebo turtlebot3_autorace_2020.launch 新开一个终端(这里推荐使用 terminator,非常好用的一款终端,可以分屏) roslaunch turtlebot3_autorace_camera intrinsic_camera_calibration.launch 新开一个终端,输入 roslaunch turtlebot3_autorace_camera extrinsic_camera_calibration.launch mode:=calibration 新开一个终端,输入 rqt 然后再rqt的界面,选择plugins > visualization > Image view。创建两个窗口(重复操作两次) 在左边的窗口选择 /camera/image_extrinsic_calib/compressed话题,在右边的窗口选择 /camera/image_projected_compensated话题。如下图所示。 技术分享 | turtlebot3自动驾驶之识别道路_ros_04 然后再次打开一个终端,输入 rosrun rqt_reconfigure rqt_reconfigure 在窗口的左边选择 /camera/image_projection 和 /camera/image_compensation_projection。调整参数,然后观察rqt的两个窗口。直到左边窗口的红色线框在道路内,右边为道路的俯视图。如下图所示。 技术分享 | turtlebot3自动驾驶之识别道路_ros_05 对应参数如图所示。 技术分享 | turtlebot3自动驾驶之识别道路_ros_06 当参数调好以后,不要点击保存。找到加载参数的源文件,手动修改。在本文中,两个参数的位置都在 ~/catkin_ws/src/turtlebot3/turtlebot3_autorace_2020/turtlebot3_autorace_camera/calibration/extrinsic_calibration/ 目录下 在文件中找到上述文件,将对应的参数修改 技术分享 | turtlebot3自动驾驶之识别道路_自动驾驶_07 compensation.yaml文件内容 技术分享 | turtlebot3自动驾驶之识别道路_gazebo_08 projection.yaml文件内容

至此,在gazebo仿真环境中相机参数调节环节结束。

3.道路检测 当我们完成相机校准以后,下一步就可以进行道路检测了。 注意:车道检测左侧为黄色,右侧为白色。 确保黄色车道在机器人的左侧。 打开终端,输入 roslaunch turtlebot3_gazebo turtlebot3_autorace_2020.launch 新开终端,输入 roslaunch turtlebot3_autorace_camera intrinsic_camera_calibration.launch 新开终端,输入 roslaunch turtlebot3_autorace_camera extrinsic_camera_calibration.launch 新开终端,输入 roslaunch turtlebot3_autorace_detect detect_lane.launch mode:=calibration 新开终端,输入 rqt 在rqt的界面,选择 /detect/image_lane/compressed 话题,可以看到车道检测的结果。如下图所示。 技术分享 | turtlebot3自动驾驶之识别道路_ros_09 选择话题 /detect/image_yellow_lane_marker/compressed ,可以看到左边黄色的线,如下图所示。 技术分享 | turtlebot3自动驾驶之识别道路_ros_10 但这并不是我们想要的结果,我们仅仅需要左边的黄色的线,因此需要调节参数。 选择话题 /detect/image_white_lane_marker/compressed 可以看到右边白色的线,如下图所示。 技术分享 | turtlebot3自动驾驶之识别道路_自动驾驶_11 这也不是我们想要的结果。需要调节参数。 新开终端,输入 rosrun rqt_reconfigure rqt_reconfigure 选择窗口左边的 detect_lane ,调节参数,让左边的黄色线只检测到黄色,右边的白色线变得更加饱满。调节最终结果如下图所示 技术分享 | turtlebot3自动驾驶之识别道路_ros_12 调节的参数如下图 技术分享 | turtlebot3自动驾驶之识别道路_git_13 同上面的操作一样,打开源文件路径,对应参数列表修改参数。在本文中,参数文件位于 ~/catkin_ws/src/turtlebot3/turtlebot3_autorace_2020/turtlebot3_autorace_detect/param/lane/ 技术分享 | turtlebot3自动驾驶之识别道路_自动驾驶_14 lane.yaml文件内容

Tips: 线的滤色校准在实际中会因为物理环境而变得困难,例如房间内的光线亮度等。 首先校准hue值,从低到高。 然后校准 saturation 值,从低到高 最后校准 lightness 值,从低到高。但是在源代码中有自动调节,所以校准亮度值没有意义。只需将其设置为255即可。 上述所提参数校准,参考的是HSV色彩模型。 至此,道路检测校准完成 下面开始进行仿真测试。

4.仿真 首先关闭所有的终端,然后开始测试。 roslaunch turtlebot3_gazebo turtlebot3_autorace_2020.launch

roslaunch turtlebot3_autorace_camera intrinsic_camera_calibration.launch

roslaunch turtlebot3_autorace_camera extrinsic_camera_calibration.launch

roslaunch turtlebot3_autorace_detect detect_lane.launch

roslaunch turtlebot3_autorace_driving turtlebot3_autorace_control_lane.launch

5.结语 自动驾驶是未来的一个趋势,也是当前前沿热门技术。Turtlebot3的自动驾驶提供了用于科研与教学的低成本,小型低速自动驾驶的一个平台和方法,让我们可以对自动驾驶有一个基础的认知。 阿木实验室致力于前沿IT科技的教育和智能装备,让机器人研发更高效!