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 - 320)\*1.0/16, 0\])

相关推荐
Elastic 中国社区官方博客15 小时前
使用 Elasticsearch 管理 agentic 记忆
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
升职佳兴16 小时前
从 0 到 1:我做了一个提升 AI 对话效率的浏览器插件(架构+实现+发布)
人工智能·架构
linmoo198616 小时前
Langchain4j 系列之二十二 - Embedding Models
人工智能·langchain·embedding·嵌入模型·langchain4j
三不原则16 小时前
实战:基于 GitOps 实现 AI 应用的自动化部署与发布
运维·人工智能·自动化
沈浩(种子思维作者)16 小时前
什么才叫量子物理学?什么是真正量子计算?
人工智能·python·flask·量子计算
张彦峰ZYF16 小时前
AI 编码工具全景分析与选型决策指南——从「代码补全」到「工程级智能体」的范式跃迁
人工智能·ai 编码工具·选型决策·代码补全·工程级智能体·ai 尚不等同于工程自治
Coder_Boy_16 小时前
基于SpringAI的在线考试系统-DDD(领域驱动设计)核心概念及落地架构全总结(含事件驱动协同逻辑)
java·人工智能·spring boot·微服务·架构·事件驱动·领域驱动
敏叔V58716 小时前
CAMEL-AI框架揭秘:如何通过角色扮演激发大模型复杂推理与规划能力
人工智能
悟纤16 小时前
Suno 摇滚歌曲创作提示词全解析 | Suno高级篇 | 第21篇
人工智能·suno·suno ai·suno api·ai music
乙真仙人16 小时前
Claude Skills 的本质
人工智能·大模型·skills