“但如果用C++的话,我应该怎么搭建去搭建仿真的环境呢?”

作者 | 哎嗨人生  编辑 | 哎嗨人生

点击下方卡片,关注“自动驾驶之心”公众号

戳我-> 领取自动驾驶近15个方向学习路线

>>点击进入→自动驾驶之心仿真测试技术交流群

本文只做学术分享,如有侵权,联系删文

网友提问:

“我也了解自驾厂很多都用C++来写代码,我也学习了C++。但如果用C++的话,我应该怎么搭建去搭建仿真的环境呢?比如说要用到哪些软件?(我在一些评论区有看到Linux和ros,但不是很了解)”      --普拉斯兔同学

仿真环境的搭建

1.自己搭建仿真环境

可视化主要就是绘制障碍物,绘制机器人本体,绘制轨迹等。上边的三个方法都可以方便的绘制各种图形和各种颜色。

当然,搭建仿真环境的目的,只是为了验证自己的代码,比如我是想开发一个规划算法,那对我来说,核心开发内容是规划模块,剩余其他各个模块,都是辅助模块,即能够提供给规划模块相应的仿真输入即可,比如下图所示的架构图:

896d7108e3f8ea88015756a2bc02f62f.png

仿真环境主要是两个功能,一是提供相应的输入,二是将结果可视化。可视化我常用的有三种方式:

  • opencv

https://github.com/onlytailei/CppRobotics

51ca8c9a35f3086939b7d7497bf917af.gif

  • python

https://github.com/AtsushiSakai/PythonRobotics

36831a85ab23c15ccfe82aad00808f2d.png

  • matplotlibcpp

https://github.com/alexliniger/MPCC

1876baeeccb33388d26bddc793b5cb61.png

2.ros仿真工具

ROS中存在webots、gazebo、stage三种仿真环境。我自己用过的是gazebo和stage。

  • gazebo:提供一个仿真的物理世界(3D)

  • stage:提供一个简化的仿真物理世界(2D)

  • ros navigation导航包:提供感知和导航算法

  • turtlebot: 提供一个仿真的机器人模型(包含传感器,执行器)

这四个加起来,就可以跑仿真了。

10ea21c8191adc2530a0f7bf254641c6.png

具体如何仿真可以参考:

  • https://www.ncnynl.com/category/ros1-easy3/

  • https://www.bilibili.com/video/BV1Ci4y1L7ZZ/?spm_id_from=333.337.search-card.all.click&vd_source=c22e088abc8e5f41edd4d4ebc99ecc48

3.自动驾驶仿真平台

仿真平台的作用是提供模拟的世界和传感器,自动驾驶算法软件则需要如apollo和autoware提供。

CARLA: 开源的自动驾驶仿真平台,提供了丰富的环境和场景来测试自动驾驶系统。CARLA设计了多种传感器模拟和详细的环境设置,支持自定义场景和传感器配置。

d0fb7ba443b49063ee24d0c1ae22981c.png

LGSVL Simulator: 由LG电子的先进研究院开发的一个高性能仿真平台,支持多种传感器模型和动态环境条件。LGSVL Simulator与多个自动驾驶开发框架(如Apollo和Autoware)集成,支持自动驾驶系统的端到端测试。

a91c0acf4abf46df51cad75d12716e6d.png

投稿作者为『自动驾驶之心知识星球』特邀嘉宾,欢迎加入交流!

① 全网独家视频课程

BEV感知、BEV模型部署、BEV目标跟踪、毫米波雷达视觉融合多传感器标定多传感器融合多模态3D目标检测车道线检测轨迹预测在线高精地图世界模型点云3D目标检测目标跟踪Occupancy、cuda与TensorRT模型部署大模型与自动驾驶Nerf语义分割自动驾驶仿真、传感器部署、决策规划、轨迹预测等多个方向学习视频(扫码即可学习

4d63fa100eb7810d81c821f306de61c4.png

网页端官网:www.zdjszx.com

② 国内首个自动驾驶学习社区

国内最大最专业,近3000人的交流社区,已得到大多数自动驾驶公司的认可!涉及30+自动驾驶技术栈学习路线,从0到一带你入门自动驾驶感知2D/3D检测、语义分割、车道线、BEV感知、Occupancy、多传感器融合、多传感器标定、目标跟踪)、自动驾驶定位建图SLAM、高精地图、局部在线地图)、自动驾驶规划控制/轨迹预测等领域技术方案大模型、端到端等,更有行业动态和岗位发布!欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频

d33b6cce4ea3cce07af5e692ff02fec6.png

③【自动驾驶之心】技术交流群

自动驾驶之心是首个自动驾驶开发者社区,聚焦感知、定位、融合、规控、标定、端到端、仿真、产品经理、自动驾驶开发、自动标注与数据闭环多个方向,目前近60+技术交流群,欢迎加入!扫码添加汽车人助理微信邀请入群,备注:学校/公司+方向+昵称(快速入群方式)

bc33a0658917ff53eded268ad34ad65a.jpeg

④【自动驾驶之心】全平台矩阵

e60c824b3f344741e67617724da42f7c.png

### 创建和配置Gazebo自定义插件 #### 插件开发基础 为了在Gazebo仿真环境中创建并使用自定义插件,开发者通常会基于C++编写这些插件。这类插件可以扩展模拟器的功能,比如控制机器人行为、处理传感器数据或是修改物理属性等[^1]。 #### 设置环境变量 确保环境能够识别新编写的插件至关重要。这涉及到一系列特定路径的设定: - `GAZEBO_MODEL_PATH`用于指定模型的位置; - `GAZEBO_RESOURCE_PATH`指向世界文件所在的目录; - `GAZEBO_PLUGIN_PATH`则告知Gazebo哪里寻找已编译好的插件库。 具体操作如下所示: ```bash export GAZEBO_MODEL_PATH=~/ardupilot_gazebo/models:${GAZEBO_MODEL_PATH} export GAZEBO_MODEL_PATH=~/ardupilot_gazebo/models_gazebo:${GAZEBO_MODEL_PATH} export GAZEBO_RESOURCE_PATH=~/ardupilot_gazego/worlds:${GAZEBO_RESOURCE_PATH} export GAZEBO_PLUGIN_PATH=~/ardupilot_gazebo/build:${GAZEBO_PLUGIN_PATH} ``` 以上命令应加入用户的shell初始化脚本(如`.bashrc`或`.zshrc`)以便每次启动终端时自动生效[^2]。 #### 编写简单的Gazebo插件实例 下面给出一个简易的例子来展示如何构建一个能打印消息的日志插件。此例子假设读者已经熟悉基本的Linux编程工具链以及具备一定的CMake经验。 首先,在项目根目录下新建名为`plugin_tutorial`的工作空间,并按照以下结构组织源码文件夹: ``` /plugin_tutorial/ CMakeLists.txt plugin.cpp ``` 接着编辑`CMakeLists.txt`以适应Gazebo的要求: ```cmake cmake_minimum_required(VERSION 3.5) project(plugin_example) find_package(gazebo REQUIRED) add_library(${PROJECT_NAME} SHARED ${PROJECT_NAME}.cpp) target_link_libraries(${PROJECT_NAME} gazebo::gazebo) install(TARGETS ${PROJECT_NAME} DESTINATION lib/gazebo/plugins/) ``` 随后实现具体的逻辑于`plugin.cpp`内: ```cpp #include <iostream> #include "gazebo/common/Plugin.hh" #include "gazebo/physics/PhysicsTypes.hh" using namespace gazebo; class HelloWorld : public ModelPlugin { public: void Load(physics::ModelPtr _model, sdf::ElementPtr /*_sdf*/) override { std::cout << "HelloWorld Plugin loaded!" << std::endl; } }; // Register this plugin with the simulator. GZ_REGISTER_MODEL_PLUGIN(HelloWorld); ``` 完成上述步骤之后,通过执行标准的CMake流程来进行编译工作(`mkdir build && cd build && cmake .. && make`)。成功后记得更新相应的环境变量使得Gazebo能找到这个新的共享对象(.so)文件[^4]。 #### 测试与验证 一旦完成了所有准备工作,就可以尝试运行带有该插件的世界文件了。如果一切正常的话,“HelloWorld Plugin Loaded!”的信息将会出现在控制台输出中,表明插件被正确加载并激活。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值