当前位置: 首页 > news >正文

【调试记录】CARLA车辆actor设置BehaviorAgent自动规划后不沿道路行驶

〇、问题描述

目前的研究需要使用CARLA仿真环境进行数据集的录制,从github上面clone了一份从A点移动到B点的代码,这份代码是在地图中人工选择两个坐标然后进行移动,虽然能够满足数据录制的需求,但是只能沿直线移动。所以我参考carla给的automatic_control.py这个例子对代码进行了修改,基本的修改思路是利用get_spawn_points()从地图中提取点,然后将车辆放置在起点,利用BehaviorAgent对象控制车辆,同时设置终点给BehaviorAgent对象。在代码跑起来之后,车辆能够自主前进,但是完全不按照道路走,相当于给了一个目标,然后车就沿直线冲过去,最后撞到墙上停下。

一、调试流程

遇到的这个问题确实不好描述,所以也不知道怎么搜索。查了许多资料,基本确定可能出错的位置有三个:地图加载错误、车辆出错以及agent对象错误。

地图加载一般不会出错,整个过程使用初始化好的client对象的get_world函数就可以得到一个地图,而地图点又是地图内置的,不太可能出现问题。车辆出错的位置可能是加载或者中间过程中的每一步控制。agent对象出错则可能是规控策略、路标出错等原因。通过不断打断点,最终发现在agent对象创建后,我们需要通过set_destination函数来设置目的地,而在这个函数内,会直接根据起点和终点计算好中间过程的每个路标点,后续在循环过程就会根据计算的路标点对车辆下发控制指令。而在这个位置,我发现代码计算出的终点竟然为坐标原点(0,0,0,)。但是传入进去的时候设置好的起始点是有坐标的。更加离谱的是,就算在这一步将起点和终点设置为同样的,车辆也会开出去撞墙。
在这里插入图片描述
进一步排查发现,是在设置目的地时,车辆的自身位置被初始化为了(0,0,0,),所以导致第一个路标点的计算就出错了,所以车辆才会朝着一个方向走直线撞墙。但是对照两个文件的写法,在初始化actor车辆对象的时候是完全一样的,所以不存在车辆设置的问题。

最后通过各种搜索,无意中发现了在carla的github评论区,有一个老哥也遇见了这个问题,并且作者和其他人给出了一些解决方案。个人理解是这个属于系统的一个bug,在初始化车辆后,必须要使用同步系统的tick函数同步一下,否则设置的车辆并不出现在起点,而是出现在原点,所以在将这个车辆actor对象赋值给agent时,车辆自身的初始位置就是错的,进而导致了后续路标点计算的错误。

二、原因分析

估计是carlaAPI内部的bug,作者自己也没有指出问题所在。在初始化actor之后,调用tick函数进行一下同步即可。
在这里插入图片描述

修改过后的carla代码放在gitte里面了,链接如下:

https://gitee.com/zhang_zhi_he/carla_toolbox/tree/master

http://www.mrgr.cn/news/62895.html

相关文章:

  • Ubuntu环境本地部署DbGate数据库管理工具并实现无公网IP远程访问
  • 15分钟学 Go 小项目:Web API
  • Knife4j配置 ▎使用 ▎教程 ▎实例
  • git修改用户名与查看git的账号与密码
  • C++进阶-->多态(Polymorphism)
  • 五连杆VMC
  • Terraform Provider 加速方案
  • 什么是 Spring Cloud Bus?我们需要它吗?
  • 【AI日记】24.10.31 学习LangChain和寻找AI研究报告(比如麦肯锡)
  • ROS(快速初步入门)
  • 谷歌Google搜索广告账户代理开户!
  • iDP3复现代码运行逻辑全流程(一)——部署全流程代码逻辑梳理(Learning)
  • python opencv1
  • 金蝶云苍穹的Extension与Nop平台的Delta的区别
  • 基于LORA的一主多从监测系统_4G模块上巴法云
  • Linux高阶——1027—进程间关系相关
  • SpringFactoriesLoader
  • Java项目实战II基于Java+Spring Boot+MySQL的编程训练系统(源码+数据库+文档)
  • VB中如何处理国际化(Internationalization)和本地化(Localization)
  • 低代码的崛起:改变开发的游戏规则
  • Leetcode 移除元素
  • vector中去除重复的元素
  • [UVM] objection笔记
  • 7个提高 Python 代码运行效率的小贴士
  • 自制田字格word
  • Spring Boot2.x教程:(十)从Field injection is not recommended谈谈依赖注入