ROS2+OpenCV综合应用--8. 视觉巡线自动驾驶
1、程序功能说明
当程序启动时, 调节摄像头的角度, 将摄像头向下移动, 以确保其能够观察到线路. 然后单击图像窗口, 按下r 键切换至选色模式; 接着, 在画面中选定需要巡测的线路区域, 并勾勒出目标颜色; 完成勾勒后释放鼠标键即可自动生成处理后的结果图; 最后再按下空格键开启巡线功能. 当小车在运行过程中遇到障碍物时会立即停止运行并发出警报声音.
2、程序启动
2.1、启动命令
打开一个终端输入以下指令进入docker,
./docker_ros2.sh
出现以下界面就是进入docker成功

启动底盘
ros2 launch yahboomcar_bringup bringup.launch.py
再次启动一个新的终端,并连接到同一台docker容器。对于da8c4f47020a标识符,请将其配置为该终端实际显示的ID号码。
docker ps
docker exec -it da8c4f47020a /bin/bash

进入docker容器后,终端输入,
ros2 run yahboomcar_astra follow_line
以巡黄线为例,

按下r键后,如上图选择蓝线区域,选定后松开鼠标,

如上图所示,右边呈现的就是处理后的图像即黄线部分将被显示出来。然后按住空格键就会启动速度计算过程小车将实现巡线和自动驾驶功能。
2.2、动态参数调节
可以通过动态参数器可以调节相关参数,docker终端输入,
ros2 run rqt_reconfigure rqt_reconfigure

可调节的参数有,
| 参数 | 说明 |
|---|---|
| Kp | PID的P值 |
| Ki | PID的I值 |
| Kd | PID的D值 |
| scale | PID调节比例系数 |
| linear | 线速度大小 |
| ResponseDist | 避障检测距离 |
| refresh | 刷新参数按钮 |
3、核心代码
我们先梳理下巡线的实现原理,通过
- 测量路径中心相对于图像中心的位置偏差值,
- 通过位置偏差值推导出角速度数值,
- 向系统发送推动小车的动作。
计算中心坐标,
#计算hsv值
rgb_img, self.hsv_range = self.color.Roi_hsv(rgb_img, self.Roi_init)
#计算self.circle,计算出X的坐标、半径值。半径值为0说明没有检测到线,则发布停车信息
rgb_img, binary, self.circle = self.color.line_follow(rgb_img, self.hsv_range)
计算出角速度的值,
#320代表中间位置的X坐标值。通过获取当前图像中的X坐标值与其与320之间的偏离量(即偏移量),从而算出'我现在距离中心有多远'。接着利用这些数据计算角速度。
[z_pid, _] = self.pid_controller.update([(point_x_value - 320) * 1.0 / 16, 0])
