Turtlebot3自动驾驶入门教程-车道识别
说明
- 介绍如何通过摄像头来识别车道
操作步骤
- [Remote PC] 新终端,启动roscore
$ roscore
- [TurtleBot SBC] 新终端,启动摄像头
$ roslaunch turtlebot3_autorace_camera turtlebot3_autorace_camera_pi.launch
- [TurtleBot SBC] 新终端,打开action模式下的内标定程序
$ export AUTO_IN_CALIB=action
$ roslaunch turtlebot3_autorace_camera turtlebot3_autorace_intrinsic_camera_calibration.launch
- [Remote PC] 新终端,打开action模式下的外标定程序
$ export AUTO_EX_CALIB=action
$ roslaunch turtlebot3_autorace_camera turtlebot3_autorace_extrinsic_camera_calibration.launch
主要调整
feature detector/color filter
来优化对象识别将tb3放置在车道中间,左边为黄色线,右边为白色线
[Remote PC] 新终端,启动calibration模式下的车道识别
$ export AUTO_DT_CALIB=calibration
$ roslaunch turtlebot3_autorace_detect turtlebot3_autorace_detect_lane.launch
- [Remote PC] 新终端,启动rqt
$ rqt
在左上角选择
plugins
->visualization
->Image view
新建图像窗口打开第二个图像窗口,选择topic:
/detect/image_yellow_lane_marker/compressed
打开第三个图像窗口,选择topic:
/detect/image_lane/compressed
打开第四个图像窗口,选择topic:
/detect/image_white_lane_marker/compressed
如果一切正常,左右屏幕将显示黄线和白线的过滤图像,中心屏幕将显示机器人应该去的路径
在标定模式下,左右屏幕将显示白色,中央屏幕可能显示异常结果
应该调整滤镜参数以显示正确的线条和方向
[Remote PC] 新终端,启动rqt_reconfigure
$ rosrun rqt_reconfigure rqt_reconfigure
由于实际物理环境包括房间内的光亮等,车道的彩色滤波的校准过程有时会非常困难
校准时可以参考
turtlebot3_autorace_detect/param/lane/lane.yaml
里面的参数值首先校准色调低 - 高值。 色调值表示颜色,每种颜色,如黄色,白色,都有自己的色调值区域(参考hsv图)
然后校准饱和度低 - 高值。 每种颜色也有自己的饱和度。
最后,校准亮度低 - 高值。 将亮度高值设置为255.清晰过滤的线条图像将为您提供清晰的通道结果。
最终校准好的参数值保存在PC端的
turtlebot3_autorace_detect/param/lane/lane.yaml
的参数文件里效果图:
注意事项:
- 以上效果图仅供参考,请根据实际环境来设置参数
由于车道识别极其容易受到环境光线影响,校准时应将机器人放置在不同位置测试车道检测效果,比如手持机器人绕行车道几圈来测试识别效果
车道识别测试
- [Remote PC] 完成标定之后关闭
rqt_rconfigure
andturtlebot3_autorace_detect_lane
- [Remote PC] 新终端,启动action模式下的车道识别测试
$ export AUTO_DT_CALIB=action
$ roslaunch turtlebot3_autorace_detect turtlebot3_autorace_detect_lane.launch
- [Remote PC] 新终端,启动车道识别控制程序
$ roslaunch turtlebot3_autorace_control turtlebot3_autorace_control_lane.launch
- [TurtleBot SBC] 新终端,启动tb3
$ roslaunch turtlebot3_bringup turtlebot3_robot.launch
FAQ
- 错误一:执行车道识别测试步骤时,容易出现以下错误
[ERROR] [1531197022.305949]: bad callback: <bound method DetectLane.cbFindLane of <__ main __. DetectLane instance at 0x7ff7b58a9cf8 >>
Traceback (most recent call last):
File "/opt/ros/kinetic/lib/python2.7/dist-packages/rospy/topics.py", line 750, in _invoke_callback
cb (msg)
File "/ home / cutop14 / catkin_ws / src / turtlebot3_autorace / turtlebot3_autorace_detect / nodes / detect_lane", line 170, in cbFindLane
self.left_fit = np.array ([np.mean (self.mov_avg_left [:: - 1] [:, 0] [0: MOV_AVG_LENGTH]),
AttributeError: DetectLane instance has no attribute 'mov_avg_left'
问题所在:无法识别到车道
解决方法:需要重新校准,得出能稳定地识别到车道的参数
演示视频
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号