Carla仿真系列:9_Carla 单目障碍物测距,四种方法原理与实测

第8期做了点云和图像融合,这期聚焦一个经典问题------单目相机怎么测距。只有一路相机(没有激光雷达、没有双目),怎么知道前方障碍物有多远?

1 为什么单目测距难

复制代码
双目:两个相机视差 → 三角测量 → 距离
激光雷达:直接测距
单目:只有一张图 → 没有深度信息 → 只能靠"推断"

单目测距的核心:从一张2D图像里"推理"出3D距离,有四种主流方法。

2 四种测距方法

2.1 地平面假设方法

假设地面是平面,已知相机高度和姿态,图像每个像素投影到地平面(Z=0)算出距离。

要素 说明
前提 地面是平面、相机高度和姿态已知
优点 计算简单、实时性好(纯几何)
缺点 坡道就错;目标底部被遮挡时误差大

适用: 平直道路、前方车辆测距(利用车底着地点)。

2.2 迭代投影方法

不假设地面平,迭代搜索最优深度:把物体3D假设投影回图像,与检测框比对,调整深度直到匹配。

要素 说明
前提 知道物体真实3D尺寸(车辆宽1.8m等)
原理 投影-比对-迭代收敛
优点 不需地面假设,坡道鲁棒
缺点 依赖先验尺寸;迭代耗时

适用: 已知尺寸的物体(车辆、行人、路牌)。

2.3 点云融合图像方法

单目图像 + 稀疏点云(激光雷达/双目视差)融合:点云提供精确深度,图像提供语义。

要素 说明
前提 相机与雷达标定好、时间同步
核心 点云投影到图像,取深度
优点 距离准确,不受光照影响
缺点 依赖标定;远处点云稀疏

适用: 主流的"相机+激光雷达"融合方案(第8期做过)。

2.4 单目深度估计方法

用深度学习模型,从单张图像回归每个像素的深度------网络学会从透视、遮挡、纹理推断距离。

要素 说明
核心 网络学习深度先验
优点 稠密深度、无需其他传感器、成本低
缺点 泛化依赖数据
代表 Depth Anything

3 实测

代码里实现了两种可跑的方案(mode 1 和 mode 3):

bash 复制代码
cd /opt/carla_ws/sim_workspace/image_detect
python image_detect_nms_distance.py --mode 1   # 地平面假设
python image_detect_nms_distance.py --mode 3   # 迭代测距
  • mode 1(地平面假设) :计算快,平直路面效果好

  • mode 3(迭代测距) :对已知尺寸物体更准,坡道更鲁棒

    mode1:左侧车辆是13.2m

    mode3:左侧车辆是8.25m

    结论: 在平直的地面的场景,mode1的结果是更准确的,因为他的影响因数就只有接地点的值,但是从目标检测框看是接地点识别是比较准确的。mode3的影响因数就比较多(物体尺寸、迭代阈值设置、物体朝向等),所以误差是很大的。

9_实现单目障碍物测距

4 往期回顾

如果本文对你有帮助,欢迎点赞、关注、收藏

遇到问题可以评论区留言交流,也欢迎转发给需要的朋友。

开源项目地址放在个人主页简介中,欢迎前往查看。

相关推荐
Python私教1 小时前
多个项目怎么安全合并?适配层、双轨验证与可回滚切换
python·软件架构·系统迁移
船厂电气自动化ai大模型2 小时前
AI大模型与数学第42课:泰勒级数完整展开(神经网络近似核心)
人工智能·python·深度学习·算法·机器学习
格林威2 小时前
C#图像像素放大:邻域平均、双线性插值实现像素放大的C#实现代码
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·工业相机
刘新洲2 小时前
我以为 AI Agent 只是调模型,直到我亲手补上审批、Outbox 和故障恢复
python·agent·fastapi
qq_513728043 小时前
浏览器配置 + 文件上传 + 截图
python·selenium·测试工具·计算机外设
Fluxproxy3 小时前
Python请求玄学根治:彻底解决脚本间歇性超时、断连、假死问题
网络·python·安全
青 春 记 忆3 小时前
零基础入门Python15|关联、聚合、索引与事务:订单数据库
开发语言·python·后端开发
qq_513728045 小时前
Alert 原生弹窗处理
python