ApolloCarla联合仿真基本操作

Apollo 系统架构

在这里插入图片描述CANBus:对接车辆的底盘,做一些数据的收发,如油门,方向盘转角
HDMap:

  • 给localization提供定位图层的信息
  • 给perception一些车道线、道路拓扑、红绿灯的信息(超时空感知),附注感知的预测。如关注某位置的红绿灯,划分前景和背景中的障碍物然后滤除背景中的障碍物(如车道线外)
    Prediction:预测行人或车辆的轨迹预测,预测会到哪个车道去
    Planning:借助高精地图给以提供一些车道信息如boundary和车道中心线。
    Control:把决策传到这个模块,control再将底盘命令发出进行交互

Apollo安装

git clone XXX
git checkout vXXXX
bash docker/scripts/dev_start.sh   #编译时间较长
bash docker/scripts/dev_into.sh    #进入apollo环境

文件夹结构

主要的任务模块可以在apollo/modules看到, common_msg模块是表示数据类型,dreamview用于数据可视化,drivers包括各种传感器的驱动
模块文件夹下:
/conf:参数配置文件,输入输出话题的订阅
/launch:启动模块的启动文件,会启动某个dag文件
/dag: 包括调用流程,加载的模块是什么,订阅的通道,使用的config文件
/XXX: 该模块下具体的方法(算法),可能有多个文件夹

基本指令

cyber_monitor  #监控个个topic的信息
cyber_launch start/stop modules/localization/..../xxx.launch #启动/关闭模块
cyber_recorder -h #可以显示出和数据集.bag相关的指令,比如bag包信息,播放等
bash scripts/bootstrap.sh  #打开可视化,可以进入一个网页端,默认为“mkz standard debug”,车型可选为“mkz lgsvl321”,地图可选“sunnyvale big loop”

播放数据之后,窗口内就会开始变化了。播放时可在终端按空格暂停,然后可以输入指令启动其他想要的模块,加载完成后就可以接着播放数据了。
在这里插入图片描述

Carla联合仿真环境搭建

Carla基本介绍

基于UE4开发的开源无人驾驶仿真器

  • PythonAPI
  • 自动驾驶传感器(还有理想化的collision detection传感器)
  • 用于规划和控制的快速仿真
  • 地图生成
  • 交通场景(open scenario)仿真
  • ROS集成
  • 自动驾驶baseline

0.9.15新特性

  • 新的车型以及地图
  • 基于Omniverse的素材导入
  • 基于OSM的三维场景生成

Carla安装方式

  • 源码安装:只有在要修改carla底层逻辑,或要导入自定义的车or地图时才如此安装,会安上一个ue4包,很占空间
  • docker安装:实现多平台使用
  • 预编译包安装:比较轻量,推荐使用

安装流程

版本:
apollo v8.0.0: https://github.com/ApolloAuto/apollo/tree/v8.0.0
CARLA 0.9.14: https://carla.org/2022/12/23/release-0.9.14

基础使用:

import carla
import random
import time
#客户端连接
actor_list = []
carla_client = carla.Client('172.17.0.1', 2000) 
#carla默认端口为2000
#172.17.0.1为dorcker默认地址
carla_client.set_timeout(4.0)
#切换地图
carla_client.load_world("Town03") #默认为town10
world = carla_client.get_world()
#添加动态天气
weather = carla.WeatherParameters(cloudiness=10.0, precipitation=10.0,
sun_altitude_angle=20.0)
#cloudiness=99时,天黑了
#sun_altitude_angle 太阳角度
world.set_weather(weather)
# 添加车辆
bp_lib = world.get_blueprint_library()
vehicle_bp = bp_lib.find('vehicle.tesla.model3')
spawn_points = world.get_map().get_spawn_points()
transform_v = random.choice(spawn_points)
vehicle = world.spawn_actor(vehicle_bp, transform_v)
actor_list.append(vehicle)
print('created %s' % vehicle.type_id)
# 设定视角
spectator = world.get_spectator()
#把视角调整成和车一致,一般carla的车原点在底盘中间,实现可以从车后方进行观察
transform = carla.Transform(vehicle.get_transform().transform(carla.Location(x=-4,
z=2.5)), vehicle.get_transform().rotation)
spectator.set_transform(transform)
#添加传感器
camera_bp = bp_lib.find('sensor.camera.rgb')
camera_transform = carla.Transform(carla.Location(x=1.5, z=2.4))
camera = world.spawn_actor(camera_bp, camera_transform, attach_to=vehicle)
actor_list.append(camera)
camera.listen(lambda image: image.save_to_disk('out/%06d.png' % image.frame))
camera.stop() #不stop的话会存很多很多照片
print('created %s' % camera.type_id)
# 随机添加车辆位置 仿真测试
for _ in range(0, 10):
transform = random.choice(spawn_points)
bp = random.choice(bp_lib.filter('vehicle'))
npc = world.try_spawn_actor(bp, transform)
if npc is not None:
actor_list.append(npc)
npc.set_autopilot(True, 6000)
print('created %s' % npc.type_id)
time.sleep(1)
vehicle.apply_control(carla.VehicleControl(throttle=1.0, steer=-1.0))
vehicle.set_autopilot(True, 6000)
print('destroying actors')
camera.destroy() #一定要把车和传感器销毁掉,否则下一次打开可能会报错
client.apply_batch([carla.command.DestroyActor(x) for x in actor_list])
print('done.')

还可以在终端跑脚本实现手动控制车辆
python manual_control.py

联合仿真

基础逻辑:carla中构建环境,信息传入apollo的算法,得到控制的结果后再传回carla实现车辆的控制

CARLA Apollo Bridge: https://github.com/guardstrikelab/carla_apollo_bridge?tab=readme-ov-file

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

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

相关文章

geemap学习笔记045:单波段图像梯度计算

前言 求图像的梯度,一般是指在灰度图像或者彩⾊图像上的操作。数字图像是离散的点值谱,也可以叫⼆维离散函数。图像的梯度就是这个⼆维离散函数的求导。下面将详细介绍earth engine中单波段图像的梯度计算。 1 导入库并显示地图 import ee import gee…

医药公司重金请我用Ruby采集国产药品官方数据

爬虫程序是由一系列的代码组成的,通过这些代码,爬虫程序可以从网页中获取信息。今天有个医药公司想要一些药品数据,让我里一共Ruby编写一个爬虫程序,采集一些他们需要的药品数据信息,术业有专攻所以就找我这位大神过去…

MCU FT61F14x入门

目录 前言一、CMIDE的使用二、系统时钟与睡眠2.1 上电复位 (POR)与系统复位2.2 振荡器和系统时钟2.3 SLEEP睡眠模式 (POWER-DOWN)2.4 低电压检测/比较器 (LVD) 三、I/O端口与中断四、串口USART五、定时器六、ADC七、EEPROM 前言 FT61F14x是辉芒微电子的微控制器,是一…

BFC 2024寻龙之旅奇幻启程,龙运市集化身沪上摩登祈福地

2024年1月20日起,BFC外滩金融中心(下称BFC)“有龙则灵LONGTIME”奇幻秘境重磅登陆外滩,以东方传统文化为载体,打造当代都市传奇新篇。巨型金红神龙空降BFC,以波澜壮阔之势开启新春之旅。外滩枫径龙运市集迎…

学习Vue全局事件总线总结

今天学习了Vue的全局事件总线和消息订阅与发布,它们两个都是为了实现任意组件之间的通信,全局事件总线是利用了Vue的一个重要的内置关系,就是组件构造函数原型的对象原型指向的是Vue原型,知道这个重要的指向之后,我们通…

经典目标检测YOLO系列(一)复现YOLOV1(5)模型的训练及验证

经典目标检测YOLO系列(一)复现YOLOV1(5)模型的训练及验证 之前,我们依据《YOLO目标检测》(ISBN:9787115627094)一书,提出了新的YOLOV1架构,继续按照此书进行YOLOV1的复现。 经典目标检测YOLO系列(一)YOLOV1的复现(1)总体架构 经典目标检测Y…

uni微信小程序强制用户更新版本

强制更新的代码参考官方文档 uni.getUpdateManager() | uni-app官网 我这边的如下: //检查版本更新const updateManager uni.getUpdateManager();updateManager.onCheckForUpdate(function (res) {// 请求完新版本信息的回调console.log(res.hasUpdate, "是…

【深度学习目标检测】十三、基于深度学习的血细胞识别(python,目标检测,yolov8)

血细胞计数是医学上一种重要的检测手段,用于评估患者的健康状况,诊断疾病,以及监测治疗效果。而目标检测是一种计算机视觉技术,用于在图像中识别和定位特定的目标。在血细胞计数中,目标检测技术可以发挥重要作用。 首先…

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷⑨

2023年全国职业院校技能大赛(高职组) “云计算应用”赛项赛卷9 目录 需要竞赛软件包环境以及备赛资源可私信博主!!! 2023年全国职业院校技能大赛(高职组) “云计算应用”赛项赛卷9 模块一 …

Kubernetes/k8s的存储卷/数据卷

k8s的存储卷/数据卷 容器内的目录和宿主机的目录挂载 容器在系统上的生命周期是短暂的,delete,k8s用控制创建的pod,delete相当于重启,容器的状态也会回复到初始状态 一旦回到初始状态,所有的后天编辑的文件都会消失…

做了运维总监才懂专业运维团队的重要性

信息系统的生命周期涵盖:设计、开发、测试、部署上线、运行维护。其中,运行维护阶段是信息系统生命周期中的关键环节,其执行效果直接影响系统是否能达到预期的运行目标。 为了实现这个目标,我们必须建立一个以业务服务为导向的专…

Openharmony 对应Android内存查看

众所周知&#xff0c;内存查看是一个很重要的部分&#xff0c;大多数情况&#xff0c;我们都是使用dumpsys的方法对android的内存进行查看&#xff0c;但是对于openharmony而言好像又不太一样了。 Android内存查看 命令行&#xff1a; adb shell dumpsys meminfo <packag…

Java零基础教学文档第四篇:HTML_CSS_JavaScript(1)

今日新篇章 【CSS】 【主要内容】 CSS简介 CSS基础语法 CSS选择器 CSS常用属性 CSS元素分类 CSS定位 【学习目标】 1.CSS的简介 1.1 CSS定义与解释** CSS是Cascading Style Sheets&#xff08;层叠样式表单&#xff09;的简称&#xff0c;CSS就是一种叫做样式表&…

K8S--- kubectl auth

该命令可以校验用户或者serviceaccount是否有对应的权限 [root@yyzc-zjjcs01 ~]# /opt/kubernetes/bin/kubectl --kubeconfig /opt/kubernetes/conf/default-admin.kubeconfig auth --help Inspect authorization Available Commands: can-i Check whether an action is allowe…

jQuery —— ajaxForm和ajaxSubmit的用法与区别

ajaxSubmit 这个可以理解为ajaxForm了升级版。 那么&#xff0c;为什么ajaxSubmit会自动提交表单呢&#xff1f; ajaxForm 不能主动提交form 就是为提交表单前做准备&#xff1b;ajaxSubmit 会自动提交 form表单 只要调用ajaxSubmit这个方法就是提交表单。两者配置相同 不…

2024年了,Layui再战三年有问题不?

v2.9.3 2023-12-31 2023 收官。 form 优化 input 组件圆角时后缀存在方框的问题 #1467 bxjt123优化 select 搜索面板打开逻辑&#xff0c;以适配文字直接粘贴触发搜索的情况 #1498 Sight-wcgtable 修复非常规列设置 field 表头选项时&#xff0c;导出 excel 出现合计行错位的…

Ubuntu系统中指定端口防火墙状态查询与操作

浏览器访问&#xff1a; 如果遇到如山图所示的情况&#xff0c;既有可能是防火墙的问题。具体解决方案参照如下&#xff1a; 1.指定端口的防火墙状态查询 &#xff08;1&#xff09;查询命令 sudo ufw status | grep 8081/tcp #其中8081为要查询的端口号 如果端口是打开的…

TDengine 时序数据库 研究学习以及实战

下载地址&#xff1a;TDengine 发布历史及下载链接 | TDengine 文档 | 涛思数据 下载客户端和服务端 服务端和客户端的安装后 TDengine 客户端连接工具地址&#xff1a;Archive Files | DBeaver Community 添加驱动 新增 》 设置 选择驱动类后 设置里的类名就自动填写了&…

Jetson nano 实时性测试,使用stress-ng 和 cyclictest

系统&#xff1a;ubuntu18.04&#xff0c;Jetpack4.3 打上了实时补丁 安装stress-ng和cyclictest sudo apt-get install stress-ng sudo apt-get install rt-tests 无负载情况的实时性 让两个CPU满载运行60秒 两个CPU满载实时性&#xff1a; 测了一下&#xff0c;4个CPU满载的…

go study oneday

这段代码的详细解释&#xff0c;涵盖了Go 语言变量声明、函数调用、用户输入、类型转换以及结果输出。 package main import "fmt" func main() {var num1 intvar num2 float32var num3 intfmt.Println("请输入数字一&#xff1a;")fmt.Scanln(&num1)f…