Carla与Ros联合仿真教学与踩坑经历

news2024/9/22 15:41:55

Carla与Ros联合仿真教学与踩坑经历

前言

本人需要用到carla进行仿真,做实验,研究了这个平台几个月。
需要注意的是,本人没有保留所有的ros包,而是选择一些进行使用,其他大家可以进行扩展。

carla0.9.5版本和carla0.9.11版本对比

carla-0.9.5的优点:

(1)内存小,显卡要求不高,友好运行。

(2)代码框架友好,足以进行传统规划算法的学习使用。

(3)适合入门。

carla-0.9.5的缺点:

(1)传感器不齐全。

(2)ros-bridge不可以在carla绘制Marker。

(3)ros-bridge不能订阅traffic light等道路信息

(4)ros-bridge只支持ROS1

carla-0.9.11的优点:

(1)ros-bridge可扩展到多智能体,carla_ad_agent(在目前的开发中此包被本人删除)

(2)ros-bridge可以订阅traffic light等道路信息

(3)ros-bridge可以在carla绘制Marker

(4)ros-bridge可以扩展到ROS2

(5)传感器更加齐全

carla-0.9.11的缺点:

(1)较长时间运行,leaderboard 会崩溃,暂未找到原因… 随机发生

4.26.2-0+++UE4+Release-4.26 522 0
Disabling core dumps.
Signal 11 caught.
Malloc Size=65538 LargeMemoryPoolOffset=65554 
CommonUnixCrashHandler: Signal=11
Malloc Size=131160 LargeMemoryPoolOffset=196744 
Malloc Size=131160 LargeMemoryPoolOffset=327928 
Engine crash handling finished; re-raising signal 11 for the default handler. Good bye.
Segmentation fault (core dumped)

(2)内存大于0.9.5版本,显卡要求更高。

(3)bug更多,比如自己写的放置车的位置的代码在0.9.5版本可以,在0.9.11版本会有偏移。

(4)ros联合关闭rviz时,CarlaUE4容易挂掉。

学习建议

(1)如果只学习使用路径规划和控制算法,而且电脑配置较差的,建议大家使用carla-0.9.5版本,此版本bug少。

(2)如果想学习感知融合,定位融合等其他内容,建议使用carla-0.9.11及以上的版本,因为传感器齐全,但此版本bug较多。

(3)不要用carla的0.9.6,0.9.7,0.9.8,0.9.9版本,有TF的bug。

carla联合ros开发-0.9.5版本

carla-0.9.5源码:

https://github.com/carla-simulator/carla/tree/0.9.5

下载完解压,给整个文件夹赋权限

sudo chmod -R 777 文件夹

单独carla的代码测试

安装环境

pip install pygame numpy future networkx scikit-learn
pip install networkx
sudo apt-get install -y libomp5
sudo apt-get install jstest-gtk

本人使用的是python3.8

配置环境与测试

首先在~/.bashrc添加:

export PYTHONPATH=$PYTHONPATH:/opt/carla-0.9.5/PythonAPI/carla/dist/carla-0.9.5-py3.5-linux-x86_64.egg
export PYTHONPATH=$PYTHONPATH:/opt/carla-0.9.5/PythonAPI/egg/carla-0.9.5-py3.5-linux-x86_64.egg:/opt/carla-0.9.5/PythonAPI/agents

然后:

source ~/.bashrc

测试一下:
python -c 'import carla; print("Success")'

运行carla:

./CarlaUE4.sh # 电脑配置可以
./CarlaUE4.sh -prefernvidia -quality-level=Low -benchmark -fps=15  # 电脑配置可以

-prefernvidia:使用NVIDIA显卡启动

-quality-level=Low:调低渲染水平

-benchmark -fps=15:引擎以1/15秒的固定时间逐步运行

配置选项可用:

carla-rpc-port=N:侦听端口 N 处的客户端连接。默认情况下,流式端口 Streaming port 设置为 N+1;
carla-streaming-port=N:指定用于传感器数据流的端口。 使用 0 获取随机未使用的端口。 第二个端口将自动设置为 N + 1;
quality-level={Low,Epic}:更改图形质量级别;
-carla-server:让 carla以服务的方式运行;
-benchmark -fps=15:引擎以1/15秒的固定时间逐步运行;
-windowed -ResX=800 -ResY=600:屏幕窗口大小;

测试py脚本:

python PythonAPI/examples/spawn_npc.py -n 30
python PythonAPI/examples/manual_control.py  
python PythonAPI/examples/automatic_control.py
python PythonAPI/examples/dynamic_weather.py -s 5   

-s 5意思是把天气变化加速了5倍。

注意,使用vscode打开文件夹的时候,有些py文件运行会出现找不到目录的问题,可以通过以下指令,来修改import目录:

import sys
import os
sys.path.append(os.path.join(os.path.dirname(__file__), '../'))

ros-bridge(0.9.5.1版本)

源码下载:https://github.com/carla-simulator/ros-bridge/tree/0.9.5.1

下载完解压。

安装依赖环境

sudo apt-get install python-protobuf
sudo apt install ros-noetic-ackermann-msgs
sudo apt install ros-noetic-derived-object-msgs
sudo apt install ros-noetic-vision-msgs

(base) pip install pyyaml
(base) pip install simple_pid
(base) pip3 install pycryptodomex

编译

py不用编译:

1.catkin build carla_msgs t4ac_msgs
2.catkin build

运行

窗口运行carla:

./CarlaUE4.sh -windowed -ResX=640 -ResY=480 -quality-level=Low -fps=15

再加些车辆

python PythonAPI/examples/spawn_npc.py -n 30

测试

source ./devel/setup.bash
roslaunch carla_ros_bridge carla_ros_bridge_with_example_ego_vehicle.launch
(注意:此launch文件在本人开发的工程中被本人修改)

运行指令后,再加载rviz,可以看到自主车的Marker,还有其他车辆的Marker,还有图像等等。还可以通过rostopic list查看发布和订阅的话题。

具体参考:https://github.com/carla-simulator/ros-bridge/tree/0.9.5.1

本人针对carla-0.9.5实现的ros联合仿真过程

注意:carla版本和ros版本要对应,不然运行不了

1.将ros-bridge的python2内容修改为python3

这个简单,一开始python3运行报错的地方,有两个,修改方案为:

(1)has_key函数改为in

(2) items()替换iteritems()

2.修改源代码

本人对源代码进行修改,除了一些小Bug,主要有以几点:

(1)只保留以下几个ros包和协议,本人将carla_msgs移动到自己的msgs文件夹。本人在0.9.5版本将carla_waypoint_publisher整合到了carla_ego_vehicle.py。而0.9.11版本则保留carla_waypoint_publisher,具体见0.9.11版本的介绍。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uqX0mXrF-1688824666285)(/home/cg/.config/Typora/typora-user-images/image-20230122094733881.png)]

(2)新建文件夹my_py,主要是写了三个脚本

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U6pMZm1w-1688824666286)(/home/cg/.config/Typora/typora-user-images/image-20230122094831393.png)]

作用分别是:更改地图,销毁actor,放置静态车辆作为静态障碍物。

(3)修改ros-bridge/carla_ego_vehicle/src/carla_ego_vehicle/carla_ego_vehicle.py的源代码,主要修改以下内容:

a.修改起点发布的话题,"/carla/{}/initialpose".format(self.role_name)修改为"/initialpose"
b.增加监视器spectator
c.增加终点订阅,还有全局规划导航点的获取和显示

(4)修改launch文件,修改了ros-bridge/carla_ros_bridge/launch/carla_ros_bridge_with_ego_vehicle.launch的里面的launch文件,删除了ros-bridge工程中多余的测试launch文件。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NfbTpuGO-1688824666287)(/home/cg/.config/Typora/typora-user-images/image-20230122095909798.png)]

3.创建带有各种传感器的ego

在ros-bridge/carla_ego_vehicle/config/sensors.json里面添加需要的传感器及其放置位置:

{
    "sensors": [
        {
            "type": "sensor.camera.rgb",
            "id": "front",
            "x": 2.0, "y": 0.0, "z": 2.0, "roll": 0.0, "pitch": 0.0, "yaw": 0.0,
            "width": 800,
            "height": 600,
            "fov": 100
        },
        {
            "type": "sensor.camera.rgb",
            "id": "view",
            "x": -4.5, "y": 0.0, "z": 2.8, "roll": 0.0, "pitch": -20.0, "yaw": 0.0,
            "width": 800,
            "height": 600,
            "fov": 100
        },
        {
            "type": "sensor.camera.depth",
            "id": "view",
            "x": -4.5, "y": 0.0, "z": 2.8, "roll": 0.0, "pitch": -20.0, "yaw": 0.0,
            "width": 800,
            "height": 600,
            "fov": 100
        },
        {
            "type": "sensor.camera.semantic_segmentation",
            "id": "view",
            "x": -4.5, "y": 0.0, "z": 2.8, "roll": 0.0, "pitch": -20.0, "yaw": 0.0,
            "width": 800,
            "height": 600,
            "fov": 100
        },
        {
            "type": "sensor.lidar.ray_cast",
            "id": "lidar1",
            "x": 0.0, "y": 0.0, "z": 2.4, "roll": 0.0, "pitch": 0.0, "yaw": 0.0,
            "range": 5000,
            "channels": 32,
            "points_per_second": 320000,
            "upper_fov": 2.0,
            "lower_fov": -26.8,
            "rotation_frequency": 20
        },
        {
            "type": "sensor.other.gnss",
            "id": "gnss1",
            "x": 1.0, "y": 0.0, "z": 2.0
        },
        {
            "type": "sensor.other.collision",
            "id": "collision1",
            "x": 0.0, "y": 0.0, "z": 0.0
        },
        {
            "type": "sensor.other.lane_invasion",
            "id": "laneinvasion1",
            "x": 0.0, "y": 0.0, "z": 0.0
        }
    ]
}


运行

python PythonAPI/examples/spawn_npc.py -n 30 # 先添加一些车,可选
roslaunch carla_ros_bridge carla_ros_bridge_with_ego_vehicle.launch

carla_ros_bridge_with_ego_vehicle.launch会加载carla_ego_vehicle.py,创建带有配置传感器的自主车。

可以测试ros发布控制车的命令:

rostopic pub /carla/ego_vehicle/vehicle_control_cmd carla_msgs/CarlaEgoVehicleControl "{throttle: 0.3, steer: 0.0}" -r 10 # ego_vehicle改成自己的role_name

本人将不使用carla_manual_control的launch,因为本人电脑太卡。然后修改carla_ego_vehicle.py内容,这样直接运行carla_ros_bridge_with_ego_vehicle.launch就可以加载出rviz和俯视界面,实现很好的联合仿真。

注意:

  1. 本人因为强迫症,把没有用的工程包和文件都删除,只保留别人开源的license,尊重别人的代码
  2. 一开始加载rviz后,需要重新定义车的起点
  3. 车已经到达终点后需要重新定义起点和终点
  4. 车达到终点之前不能再定义起点和终点

4.添加opendrive地图显示

  <!-- 加载carla的opendrive地图 -->
  <include file="$(find t4ac_map_monitor_ros)/launch/mapping.launch">
 	 <arg name="map_name" value="$(arg map_name)"/>
  </include>

具体参考开源:https://github.com/AlejandroDiazD/opendrive-mapping-planning

5.跟局部规划算法进行结合

要实现跟我们在ros仿真里面写好的算法框架进行联合,主要更改以下几点:

(1)更改获取导航点的方式

原来我们的地图路径点是手动设置的,要改为订阅carla发布的导航点,carla主要使用以下函数进行导航点的获取:

def calculate_route(self, goal):
        """
        Calculate a route from the current location to 'goal'
        """
        dao = GlobalRoutePlannerDAO(self.world.get_map())
        grp = GlobalRoutePlanner(dao)
        grp.setup()
        route = grp.trace_route(self.player.get_location(),
                                carla.Location(goal.location.x,
                                               goal.location.y,
                                               goal.location.z))
        return route

导航点的获取代码写在carla_ego_vehicle.py,只要定义起点和终点,就可以返回导航点。

(2)更改获取里程计的方式

这个只需要更改订阅的消息类型就可以

由“odom”改为"/carla/" + role_name + "/odometry "。

(3)关闭ros单独仿真时特定的消息类型

比如原来的地图路线显示,应该选择关闭。

(4)更改障碍物的订阅内容

因为carla的障碍物发布的消息类型跟之前不一样,所以我们必须根据carla发布的障碍物消息类型进行订阅函数的修改,以获取相应的障碍物信息。

(5)增加一些订阅内容(等carla升级后再考虑)

如果carla升级,规划算法可以进一步考虑交通灯,斑马线等道路规则,通过订阅这些信息,来完善规划

(6)更改控制的发布方式

控制的发布话题和消息类型跟之前不同,更改即可。

6.carla-ros-bridge-0.9.5版本的坑

(1)控制指令的坑

我也不清楚,我使用"/carla/" + role_name + “/vehicle_control_cmd “进行控制,车跑着跑着会偏离,而且坐标系是反过来了,也就是说我们原本方向盘向左边打为正,右边为负,变成右边打为正,左边为负,于是,我改成了”/carla/” + role_name + "/ackermann_cmd"进行控制,车就不会偏离。这两个话题的差别在于:

/carla/" + role_name + "/vehicle_control_cmd:发送的是油门(不等同于速度)和转角,左手坐标系

/carla/" + role_name + "/ackermann_cmd:发送速度,和转角弧度,右手坐标系,同时可以发送控制加速度的指令,对目标使用PID进行跟踪。

(2)弯道的坑

目标无法开90度弯道,轨迹规划没有问题,单纯的ros仿真也没有问题,具体原因应该是出在控制方法和参数配置,目前还没有解决。

(3)自主车的role_name只能选择hero和ego_vehicle,但是两者在ros仿真下的自主车跟踪效果不一样。

7.编译运行与使用方法

请参考视频内容。

常见报错

1.trying to create rpc server for traffic manager; but the system failed to cr

netstat -tnlp | grep :8000
kill -9 pid

2.INTEL-MESA: warning: Performance support disabled, consider sysctl dev.i915.perf_stream_paranoid=0

sudo sysctl dev.i915.perf_stream_paranoid=0

3.报错:

X Error of failed request: BadDrawable (invalid Pixmap or Window parameter)
Major opcode of failed request: 149 ()
Minor opcode of failed request: 4
Resource id in failed request: 0x4600041
Serial number of failed request: 388
Current serial number in output stream: 399
terminating with uncaught exception of type std::__1::system_error: mutex lock failed: Invalid argument
Signal 6 caught.
Segmentation fault (core dumped)

./CarlaUE4.sh -prefernvidia

效果

在这里插入图片描述

需要代码的可以私信

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/732876.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

雅思口语考试的顺序与技巧?

雅思口语的考试顺序&#xff0c;也是学生们在开始考试前要了解的信息。雅思的口语考试到底有怎样的考试顺序&#xff1f;下面就听小编讲讲它的考试顺序&#xff0c;以及考试中的技巧。 一、雅思口试考试顺序 众所周知&#xff0c;雅思考试分为笔试和口试。正常情况下&#xff…

YOLOV5-Lite轻量化部署与训练

文章目录 前言项目下载项目运行自定义数据集训练使用LabelImg标注制作数据集划分训练文件生成标签聚合操作辅助脚本需要运行的脚本 开始训练 总结 前言 没啥意思&#xff0c;很简单&#xff0c;需要实现一个目标检测&#xff0c;但是&#xff0c;不能占用太多运算资源&#xf…

【双指针】977. 有序数组的平方

977. 有序数组的平方 解题思路 思路: 设置前后指针最大的元素一定是存在再前后位置,然后因为负数平方之后可能大于整数的平方每次比较前后指针指向的元素的平方 然后存下较大的元素平方 然后移动指针 class Solution {public int[] sortedSquares(int[] nums) {// 设置前后指…

Git--远程操作

文章目录 前言一、理解分布式版本控制系统二、远程仓库1.新建远程仓库2.克隆远程仓库3.向远程仓库推送4.拉取远程仓库5.配置Git忽略特殊文件 给命令配置别名 总结 前言 正文开始!!! 一、理解分布式版本控制系统 我们目前所说的所有内容(工作区,暂存区,版本库等等),都是在本地…

scratch角色跟随

scratch 角色跟随 本程序实现了角色跟随功能&#xff0c;第一个角色面向鼠标指针&#xff0c;其它角色面向前一个角色&#xff0c;在距离较小时暂停。 5个角色的程序依次为&#xff1a;

RegNeRF,FreeNeRF: 神经辐射场的自由频率正则化,几何正则化,外观正则化,遮挡正则化

目录 概要&#xff1a; 一 论文 RegNeRF: Regularizing Neural Radiance Fields for View Synthesis from Sparse Inputs 1.几何正则化 2.外观正则化 二 论文 FreeNeRF: Improving Few-shot Neural Rendering with Free Frequency Regularization 3 频率正则化 和自由频…

155 mini_stack

Title Description 155. 最小栈 - 力扣&#xff08;Leetcode&#xff09; resolvent 觉得比较困难的地方就是在minstack那个部分: 两个创新点: 1.使用了INTMAX防止存放有效避免指针的问题 2.使用了min_stack时间换空间 class MinStack { public:stack<int> stack1;s…

ChatGPT带我做四轴飞行器和自平衡小车

按照ChatGPT的说法&#xff0c;这款主板的的主控MCU、无线通信、电源管理、外设接口可以共用&#xff0c;需要差异化的有电机驱动、传感器的选择、控制算法和软件、电源供电。ChatGPT说的共用部分没啥争议&#xff0c;有差异化的地方需要细想下&#xff1a;电机驱动显然应该不同…

three.jsgsap滚动交互网页实现 2-创建文字并添加离开动画

添加动画 让聚光灯的角度随着下滑增大&#xff0c;展示完整的场景 const container document.querySelector("#container");gsap.to(light, {angle: 0.7,scrollTrigger: {trigger: container,start: 0,end: innerHeight,scrub: 1},});这样下滑一个屏幕高度聚光灯的角…

Redis——初窥门径

前言 在这篇文章中&#xff0c;荔枝整理了初步了解Redis的一些基础知识和常见指令。通过这篇文章我们可以弄懂Redis具体是什么以及主要的功能、基本数据类型和操作指令。这里注意如果标题后面带*则是仅需要了解就行的知识点哈。 文章目录 前言 一、Redis概述和配置 1.1 概述…

Android Compose UI实战练手----Google Bloom 主页实现(完结)

目录 1.概述2.页面展示2.1 亮色主题2.2 深色主题 3.页面拆分及实现3.1 主页的UI整体UI架构实现3.2 底部导航栏BottomBar的实现3.3 搜索栏SearchBar的实现3.4 Banner实现3.5 中间信息列表BloomInfoList的实现 4.源码地址 1.概述 主页的页面比前面的欢迎页和登录页面要复杂得多&…

Microsoft Visual Studio 2022添加.NET Framework 4.6.2框架,然后说下.NET目标包的作用。

众所周知&#xff0c;Microsoft Visual Studio 2022不再支持.NET Framework 4.6以下的框架。从而导致前期使用老框架开发的某些应用无法打开&#xff08;打开时提示安装框架&#xff0c;但又安装不成功&#xff09;的情况出现。 前于如何安装.NET Framework 4.5及更早版本框架的…

Java中的字符串类

提示&#xff1a;字符串类是编程中最常用的一种数据类型&#xff0c;比较重要❗ 文章目录 前言一、字符串类创建对象方式静态创建动态创建 二、String字符串内容不可改变三、字符串常用方法length方法charAt方法substring方法indexOf与lastIndexOfindexOf方法lastIndexOf方法 替…

计算机基础--->数据结构(9)【并查集】

文章目录 并查集的概述并查集的主要用途并查集的实现创建和初始化集合查找当前元素的集合根节点判断两个元素是否处于同一集合合并两个集合对节点的路径进行压缩 并查集的概述 并查集是一种用于解决集合合并和查询问题的数据结构&#xff0c;主要用于实现有关集合的操作&#x…

Skywalking高级使用

Skywalking高级使用 RPC调用监控Mysql调用监控Skywalking常用插件获取追踪ID过滤指定的端点告警功能Skywalking原理Open Tracing介绍 RPC调用监控 Skywalking(6.5.0)支持的RPC框架有以下几种&#xff1a; (1) Dubbo 2.5.4 -> 2.6.0 (2) Dubbox 2.8.4 (3) Apache Dubbo 2.7.…

动态规划 DP (六) 字符串编辑

1.字符串编辑 字符串编辑问题是一类常见的问题&#xff0c;通常涉及对字符串进行插入、删除、替换等操作&#xff0c;以达到某种特定的目标。 常见的字符串编辑问题包括&#xff1a; 编辑距离&#xff08;Edit Distance&#xff09;&#xff1a;给定两个字符串&#xff0c;通…

最新抖音娱乐测评小程序源码 Thinkphp后端 抖音引流小程序

最新抖音娱乐测评小程序源码 thinkphp后端 抖音引流小程序 附搭建教程 测试环境 NginxPHP7.0MySQL5.6 网站运行目录设置为 /web 数据库配置文件 \source\application\database.php 后台登录地址 http://你的域名/index.php?s/admin/passport/login

python环境

卸载旧环境 wini 打开应用卸载 删除python解释器和pycharm 删除配置文件夹JetBrains C:\Users\CJC\AppData\Roaming\JetBrains 安装 安装python解释器 安装pycharm 查看或设置该项目的解释器和安装包 快捷键 全局搜索 双击shift 当前文件中搜索 ctrl f 查看函数…

MySQL数据库对象与数据备份和还原详解

目录 一、视图 1. 什么是视图 2. 视图与数据表的区别 3. 视图的优点 4. 创建视图 二、索引 1. 什么是索引 2. 为什么要使用索引 3. 索引优缺点 4. 何时不使用索引 5. 索引何时失效 6. 索引分类 6.1 普通索引 6.2 唯一索引 6.3 主键索引 6.4 组合索引 三、数据的…

RabbitMQ系列(25)--RabbitMQ搭建镜像队列

前言&#xff1a;如果RabbitMQ集群中只有一个Broker节点&#xff0c;那么该节点的失效将导致整体服务的临时性不可用&#xff0c;并且也可能会导致消息的丢失&#xff0c;虽然可以将所有消息都设置为持久化,并且对应队列的durable属性也设置为true&#xff0c;这样可以保证消息…