首页/文章/ 详情

Carla仿真系列:Carla 仿真中跑通 YOLOv8 实时目标检测

1天前浏览3

前两期搭建了 Carla + ROS 环境,添加了 NPC 交通流。这期是最关键的一步——用 YOLOv8 做实时目标检测。

但遇到一个麻烦:Carla ROS Bridge 跑在 Python 2.7 上,而 YOLOv8 需要 Python 3.10。

1 两种方案对比

为了解决"数据在 Python 2.7,模型在 Python 3.10"这个问题,我试了两种方案。

方案一:ros bridge + roslibpy

思路是通过 ros bridge 把 ROS 话题通过 WebSocket 转发出去,Python 3.10 这边用 roslibpy 接收。





# 启动 ros bridgeroslaunch ros bridge_server ros bridge_websocket.launch queue_size:=1 port:=9099# Python 3.10 环境接收python ros bridge_roslib.py

启动简单,但跑起来发现两个问题:

  • 延迟高,画面卡顿
  • 图像丢帧严重,实时性不行

方案二:TCP 直接传输图像数据

放弃 ros bridge,直接用 TCP 把图像数组从 Python 2.7 发给 Python 3.10。
服务端(Python 2.7):







# 订阅 ROS 图像话题 → 转为 numpy → TCP 发送def image_callback(msg):    img = np.frombuffer(msg.data, dtype=np.uint8)    img = img.reshape(msg.height, msg.width, 4)[:, :, :3]    header = str(len(img.tobytes())).encode().ljust(16)    conn.sendall(header + img.tobytes())

客户端(Python 3.10):
















# TCP 接收 → numpy → YOLOv8 检测 → 可视化def recv_all(sock, length):    buf = b""    while len(buf) < length:        chunk = sock.recv(length - len(buf))        if not chunk: raise ConnectionError()        buf += chunk    return buf# 主循环while True:    header = recv_all(sock, 16)    img_bin = recv_all(sock, int(header.strip()))    frame = pickle.loads(img_bin)    results = model(frame)    # 绘制检测框并显示

整个跑起来就很流畅了,基本不影响使用。

2 完整启动流程






终端1: Carla UE4终端2: ROS Bridge终端3: NPC 生成(可选)终端4: TCP Bridge Server(Python 2.7环境)终端5: YOLOv8 检测(Python 3.10环境)

按顺序启动:








# 终端1-3:跟第二期一样,先启动Carla、ROS Bridge、NPC# 终端4:启动 TCP 服务端(Python 2.7)cd /opt/carla_wspython tcp_bridge/tcp_bridge_server.py# 终端5:启动 YOLOv8 检测(Python 3.10)cd /opt/carla_ws/sim_workspace/image_detectpython image_detect_nms.py

启动后,终端5会弹出检测窗口,实时显示 YOLOv8 的检测结果——车辆、行人、骑行者都被框出来了。

来源:车路漫漫
ADSpythonUM
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2026-11-12
最近编辑:1天前
李慢慢
硕士 自动驾驶仿真工程师一枚
获赞 14粉丝 93文章 326课程 0
点赞
收藏
作者推荐

做仿真为什么会觉得痛苦呢?

仿真非常重要,但一定要嵌入到研发的正规流程中,才能不断迭代成熟,鸟枪变大炮。来自粉丝的疑问大家好,我是李慢慢。公众 号收到小伙伴的留言,应该是worldsim-hil的测试手段,对pnc模块进行测试,测试结果和实车结果有些出入,感觉比较迷茫。原问题如下: 关于仿真的分类此前尝试解释过什么是自动驾驶仿真:《关于自动驾驶仿真的定义》,也解释过一些常见手段的分类:《自动驾驶测试的4大“显眼包”:LogSim/WorldSim/SIL/HIL,终于分清了》,但貌似还是不全面,因为时代进步太快了,又冒出来了些新技术,所以如今的仿真,我想把它分为以下几个方向:1、worldsim:人工构建虚拟场景的仿真,纯虚拟仿真,这种目前一般用于规控的测试,代表软件CARLA,搭建小镇3D地图,然后模拟传感器数据,给到自动驾驶算法,根据算法结果再控制车辆行驶,一般是闭环的。2、logsim:回放真实路测数据的仿真,把路采数据灌给自动驾驶的算法模型,这种一般用于感知的测试,代表软件ROS,通过ROS把数据包以消息的方式播报出来,算法来接收。由于采集的数据是固定的,算法接收后输出的控制指令很难控制原始数据进行变化,所以这种仿真一般是开环的。3、世界模型:生成式AI的仿真,以图像为主,根据输入的视频或者图像能生成新的视频或者图像,代表软件英伟达的COSMOS,能根据当前的传感器状态,直接预测接下来的世界状态,从而可以用来仿真(甚至做智驾逻辑)的测试或者训练。这种仿真目前落地应用比较有限,比如多模态数据很难做到一致,比如涉及到自车转向类的视角大变动,新生成的世界有点跟不上,比如它也非常依赖显卡。虽然缺点很多,但它能闭环,是目前一段式端到端智驾的热门解决方案,是具身智能物理AI叙事的底层技术。4、3DGS:三维重建式的仿真(早先还有Nerf这类三维重建技术不过因为重建效率太低而渐渐不再热门),它是通过实车采集数据进行3D模型重建,从而可以进行场景编辑,再进行渲染,理论上能重新模拟出来任意角度的传感器数据,也能闭环控制,所以也是一段式端到端智驾的热门解决方案。但也是缺点很多的,废卡、三维重建效率低、伪影、画面模糊、遮挡区易出错等。上面4个技术并不孤立,4个技术之间可以互相配合,扩大仿真的能力边界。哎,仿真技术这么多,慢慢学吧,心累。但不管怎么说,仿真很重要,仿真测试作为智驾测试的三支柱之一,是写到国标中的,是车企和Tier1们的重要竞争壁垒。仿真怎么发挥出价值所以留言的那位小伙伴为什么会觉得痛苦呢?就像我现在要写这么多字来解释这个解释那个一样,要讲清楚这个仿真,我也觉得很痛苦。仿真总是在不断自我证明中,证明自己仿的足够真,证明自己发现的问题是开发认可的,这一方面需要仿真本身做的好,另一方面也需要跨部门进行反复的沟通,对内容易自我怀疑,对外又需要不断争取,确实很痛苦呀。如果算上我研究生阶段的CAE仿真经历,到目前也是有十多年的仿真经验了,不断在这种内外博弈中走到今天,要把仿真做好,就要不断学习更新仿真技术,要对仿真结果时刻保持谨慎,要对外讲清楚能力边界,要争取更多的资源,要把仿真嵌入研发流程。从解释概念,到说服上层,到培训团队,到调试工具链,到说服其它部门,到嵌入研发流程,到成为刚需,这是每个使用仿真的公司都要经历的吧,好在,自动驾驶仿真,已经是被证实是一条对的路,后来人少了方向上的迷茫,剩下的就是打磨技术,产生价值,掌握话语权。痛苦已经少了很多了。能参与到产品落地交付的仿真,才是真仿真。工程能力很重要,工具链很重要。如果说仿真方法决定了能力上限,那么工程能力决定了能力的下限。没有哪种仿真是完美的,实车测试也不完美。你已经拿到了一手仿真的牌,能否打好,还是得看工程能力。在这个“降本增效”的内卷行业,仿真能力只会越来越重要。以上,本文完。来源:车路漫漫

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈