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 往期回顾

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

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

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

相关推荐
ViperL110 小时前
[智能计算]AutoDiffusion-基于进化NAS的扩散模型
人工智能·深度学习·计算机视觉
外收内放10 小时前
面向对象高级(实战案例)
开发语言·python·学习
光视界10 小时前
友思特 ALE系列技术参数详解:UV波段的真实性能表现
经验分享·紫外光源
专业程序开发源10 小时前
springboot欧缇蔓月子中心管理系统82697-计算机课程设计、毕业设计
java·spring boot·后端·python·spring·django·课程设计
FPGA小迷弟11 小时前
用 Claude Code 重构遗留系统:从评估到落地的完整实践指南
c++·python·ai·plotly·django·ai编程·claude
卷无止境11 小时前
面向arm64桌面客户端开发全景:语言、框架与生态
后端·python
薛定e的猫咪11 小时前
(ICLR 2020)MAML 靠的不是快速学习,而是特征复用
人工智能·深度学习·学习·算法·机器学习
fanruitian11 小时前
python else用法
开发语言·python
程序员-King.11 小时前
【ROS1】Noetic 开发工作流程与常用命令
c++·ubuntu·ros
薛定e的猫咪11 小时前
(ICLR 2026)DF-META:面向 FJSP 的无导数元学习实例自适应调度
人工智能·深度学习·学习·算法·机器学习