点击下方卡片,关注“自动驾驶之心”公众号
ADAS巨卷干货,即可获取
论文作者 | Dr. 夏
编辑 | 自动驾驶之心
写在前面
自动驾驶仿真这两年的需求越来越大,各家自动驾驶公司忙着量产落地,如何尽可能多的测试算法系统的稳定性?如何用最小的成本完成?这就涉及到仿真的内容,而目前领域使用最多的是Carla,今天就为大家分享下Autoware&Carla的联合仿真实现;
版本说明
该教程所使用的版本如下:
![48deaf692816587f186888181db8a8d7.png](https://i-blog.csdnimg.cn/blog_migrate/05d5ec9f749852f45a26d3dd8a35dc9c.png)
之所以使用docker版本进行学习,是因为安装很方便,具体可以参考上一篇的安装方法。
前期工作
首先进入docker环境,在/home/autoware文件夹下,补充ros-bridge的功能包,内容为:
![ef98f0a96dce640eab68ff725aceeb95.png](https://i-blog.csdnimg.cn/blog_migrate/12a8f746cabfcc92a51938c8fa1ecd02.png)
编译:
catkin_make
效果如下:
![50633f43c07503ac906ab9e98af20bab.png](https://i-blog.csdnimg.cn/blog_migrate/7ce489ab3534a4f427bae95a5525cb2c.png)
然后我们在carla_ws/src/ros-bridge/carla_ego_vehicle/launch文件夹里面创建如下launch文件:
![ccdc0efaa16abc09d341aba980924e32.png](https://i-blog.csdnimg.cn/blog_migrate/e02b964f54cf55e1c64bad4b70e9f889.png)
如红框所示。
在.bashrc文件添加以下信息:
![596ad1e7e67117f3d300e71bf9cf16d7.png](https://i-blog.csdnimg.cn/blog_migrate/c8675bc2583eb58a4eec1ffb0ea142ca.png)
其中,autoware-contents的信息可以通过以下网站进行下载:
https://bitbucket.org/carla-simulator/autoware-contents/src/master/
要开vpn梯子才能打开。
联合仿真实现
1.carla_autoware_launch.launch
我们最外层要运行的文件为carla_autoware_launch.launch,其内容如下:
![6588dd55f8a7d799a8a5f3479ad1abb9.png](https://i-blog.csdnimg.cn/blog_migrate/3d17fd389d5025cacf57a9ef9a340b4b.png)
![d545ef5a28fb7abd8bb5a875fbe8dcfb.png](https://i-blog.csdnimg.cn/blog_migrate/73d8b6de06b992c690dd870a692247c3.png)
![8fe59a4f0b96a34139b0b8928a58a743.png](https://i-blog.csdnimg.cn/blog_migrate/8b854d207ebfb475344f70e524780d34.png)
每一层的内容都带有注释,唯一要注意的是车辆初始化的问题,在中依次填入x,y,z,roll,pìtch,yaw的数值,这个可以通过carla自带的python例子里面的手动控制脚本manual_control.py去打印车辆的坐标和朝向值,注意这里其实只有xyz三个位置的值有用,roll,pìtch一般可以都为0,yaw要根据实际情况去调,可能rviz的地图有旋转?原因未知。
carla_autoware_bridge.launch是ros_brigde的内容,接下来主要介绍bridge.launch和my_agent.launch。
2.bridge.launch
bridge.launch的内容如下:
![231d94d8191092ca33ab25ddd91d9c48.png](https://i-blog.csdnimg.cn/blog_migrate/754513ca7e5ab2386c995c7cdfb48fb2.png)
![736942ec19da58af2824dd24f67ed517.png](https://i-blog.csdnimg.cn/blog_migrate/c80e9c5987251c458e5fe436fa142187.png)
![4537a07a628b61663fc16ff8c919c29b.png](https://i-blog.csdnimg.cn/blog_migrate/0f50245d61353ddb8b1749b58cb427f2.png)
bridge.launch的内容主要是作一些坐标系的转换和数据转换,注释都很详细。
3.my_agent.launch
![d1fb096681cfd6f141f29d4b977add8d.png](https://i-blog.csdnimg.cn/blog_migrate/aea74c88e167eacd425f4edb9c09cca3.png)
![8291ba5710297b854a217d1911343acd.png](https://i-blog.csdnimg.cn/blog_migrate/eaf4f153184673a98d57c9e52a7b1885.png)
![6f3c8016d37fe5e83edd67d607c75294.png](https://i-blog.csdnimg.cn/blog_migrate/556bafbc86604222159cb4fa63aa4d34.png)
这部分主要是加载传感器,定位,感知,规划模块,要注意的是这三个参数:
![da92a3b51ac9325f71679de9c1abadfd.png](https://i-blog.csdnimg.cn/blog_migrate/772198f3af5ca37fc645614218c06f56.png)
use_ground_truth_localization是使用真实环境的定位,也就是不需要定位算法即可获取到环境的定位信息,一般与carla联合仿真的时候可以打开。同样,use_ground_truth_detections是使用真实环境的感知,也就是可以不需要感知算法即可获取到环境的障碍物信息,一般与carla联合仿真的时候可以打开。
我们这里先设置为false,以打开定位和感知算法为例去实现停障功能,而open planner的障碍物避障可以设置为true。
4.my_map.launch
![f575af2a804e3007f52bf48c0605f468.png](https://i-blog.csdnimg.cn/blog_migrate/9cf2205b1b5a60ff240e7a19d6288891.png)
![66b9b7e8a9b2166be6a691fabecad1ac.png](https://i-blog.csdnimg.cn/blog_migrate/048f05cdcd5ac31ab743450b6db06a32.png)
就是取系统变量CARLA_AUTOWARE_CONTENTS,我们已经在.bashrc里面定义,该文件加载了point cloud map和vector map。
5.my_sensing.launch
![54cfa9c04dc9105eab5ca36d7df7290d.png](https://i-blog.csdnimg.cn/blog_migrate/bc525c6effb0e0c1d0da7dcc6a360d08.png)
该文件主要是加载了ray_ground_filter节点,其作用是过滤地面。过滤地面是激光雷达感知中一步基础的预处理操作,因为我们环境感知通常只对路面上的障碍物感兴趣,且地面的点对于障碍物聚类容易产生影响,所以在做Lidar Obstacle Detection(障碍物探测)之前通常将地面点和非地面点进行分离。
6.my_localization.launch
![fa3b398a502ca730cb52c9f9cfec6664.png](https://i-blog.csdnimg.cn/blog_migrate/e51c125c5df7083521e0e674962c55d3.png)
![78f2f734223ce091c666ddbf0759b7b8.png](https://i-blog.csdnimg.cn/blog_migrate/2a891905ba5e2c0f6242e668f0ed763a.png)
![eab069fd9863471d50823476b2e851f2.png](https://i-blog.csdnimg.cn/blog_migrate/e9118a62d855519513699b3490a4cdc0.png)
points_downsample节点用于点云过滤。
ndt_matching节点的作用是开启ndt激光雷达定位算法。
ndt算法具体可参考:https://blog.csdn.net/qq_39537898/article/details/115439552
7.my_detection.launch
![b6c0fe092861a4a1fc702edb1d856b57.png](https://i-blog.csdnimg.cn/blog_migrate/5e0c2dfe843489c648708323664a8a1b.png)
![76fbac9653ada749f805018fd5508a7f.png](https://i-blog.csdnimg.cn/blog_migrate/f195d0dd9d287f40bd3233e80a624c9f.png)
![92ef5eb077355414b2515156bf057e3a.png](https://i-blog.csdnimg.cn/blog_migrate/b3f41ad7457749653616e11788f6a3ba.png)
![634c9a6328df0f1214987f3181f0c0dc.png](https://i-blog.csdnimg.cn/blog_migrate/9b7d3e948a0ac27ccd6ade41c851d26b.png)
停障主要是运用lidar进行障碍物的地图检测追踪。这里也开启了vision部分的检测,属于图像目标检测。
8.my_mission_planning.launch
![9f590d46f1d1c98c794cfac0db331894.png](https://i-blog.csdnimg.cn/blog_migrate/b46d79bb8ee23aeb44af548953e1b493.png)
![359c3161b685cae0a49f63cc195b76d0.png](https://i-blog.csdnimg.cn/blog_migrate/dac0b3cc0339fcff7d557981528f3c01.png)
![d7d56e88790a524c57cf4dcc64c92217.png](https://i-blog.csdnimg.cn/blog_migrate/e48d5e189cb87abfa67d7b64972277aa.png)
![bb316b0fbfee7f51bb91219c9b72a5f6.png](https://i-blog.csdnimg.cn/blog_migrate/59ee3fcd6592d7cd34ba023c6f5b1387.png)
来到了关键的规划部分,该launch文件主要是打开了vel_pose_connect,vel_pose_connect节点用作输出车辆的位姿和速度信息。
也开启了lane的相关规划算法。最重要的是,开启了op_global_planner的节点,全局规划算法,里面涉及了一些参数,可以调整,比如enableReplan,代表到达终点后是否自动再次规划,一般如果到达终点想停了,就设置为false。
9.my_motion_planning.launch
![957cb0a1b4bfb2ea7af21563257eccd2.png](https://i-blog.csdnimg.cn/blog_migrate/0bcf575602f7416f7614c50b43d2d61e.png)
![2506739036455f110e69e0351b94cbc1.png](https://i-blog.csdnimg.cn/blog_migrate/fbb650c3330ded7686b2738f639f5b05.png)
![f96dd3e82fa6b24abf99fe56370d3107.png](https://i-blog.csdnimg.cn/blog_migrate/3e73b528e858aaef30c30f9e809e4f74.png)
![b306530c0c2b307ae46748a1145f23ed.png](https://i-blog.csdnimg.cn/blog_migrate/c2a325152aa6211a5b331785eb03a92c.png)
![7d60e6952f28f3b833f00b99fc066032.png](https://i-blog.csdnimg.cn/blog_migrate/b9e327caa58723b4a28bf63cb64e3556.png)
![072a47db49c28313b5ca1e90ade4da89.png](https://i-blog.csdnimg.cn/blog_migrate/2ca90438320d8db86cac48c9d81b6c1c.png)
该launch文件的关键是打开astar_avoid和pure_pursuit,一个停障的节点,一个是控制车运动的节点,twist_filter也是必须要开启的,作用是用于限定x轴线速度和z轴角速度这两个参数的值。
停障演示
写好了以上脚本之后,并且编译完,就可以开始运行啦。
1.打开carla-0.9.10.1:
./CarlaUE4.sh
这里以Town03为例。
2.放个测试的障碍物:
测试脚本如下:
![bc140255e08670191a94c6d6030c9482.png](https://i-blog.csdnimg.cn/blog_migrate/90ced2de6be3c051ace452ee8edc2d9c.png)
![0302f4c2cde5fd7433bf97df9a7f4a09.png](https://i-blog.csdnimg.cn/blog_migrate/deab21bb6d364fcb78e57c4190d57a83.png)
![8c1ef683e4eb7787c13b177a3cf58fbc.png](https://i-blog.csdnimg.cn/blog_migrate/ce06817309d74ed2d78dc88448272924.png)
parked_locations为要放置障碍物的位置,自己设定。
运行:
python spawn_car.py
3.运行autoware-carla:
roslaunch carla_ego_vehicle carla_autoware_launch.launch
![419a8df95e05133ab844cc4691eb73f8.jpeg](https://i-blog.csdnimg.cn/blog_migrate/b7c600667616f6472787e0084543ffaf.jpeg)
看到前面有车。
4.定义终点,开始规划
![ee09abd37fb85d4cfb51ff117c14237b.png](https://i-blog.csdnimg.cn/blog_migrate/153baabb554afda98428420d34d35e65.png)
接近障碍物的时候,检测出障碍物,并停车:
![77883a408b10ab08781caa4aed2ab7f3.png](https://i-blog.csdnimg.cn/blog_migrate/16b0dd23af38bffbdc13c58f4e3f030b.png)
当障碍物消失的时候,或者远离的时候,开始加速运动:
![5c1058d57d0f10e1bb23990e062135ff.png](https://i-blog.csdnimg.cn/blog_migrate/f0fceb9455f36977c32910aa15321a85.png)
ok,讲解到此为止,希望可以帮助大家完成入门的操作!
① 全网独家视频课程
BEV感知、毫米波雷达视觉融合、多传感器标定、多传感器融合、多模态3D目标检测、点云3D目标检测、目标跟踪、Occupancy、cuda与TensorRT模型部署、协同感知、语义分割、自动驾驶仿真、传感器部署、决策规划、轨迹预测等多个方向学习视频(扫码即可学习)
![747532cdfed43fd31d96b05eddfb046f.png](https://i-blog.csdnimg.cn/blog_migrate/0d36d7c853a1a3be242a3bc05a1526a9.png)
② 国内首个自动驾驶学习社区
近2000人的交流社区,涉及30+自动驾驶技术栈学习路线,想要了解更多自动驾驶感知(2D检测、分割、2D/3D车道线、BEV感知、3D目标检测、Occupancy、多传感器融合、多传感器标定、目标跟踪、光流估计)、自动驾驶定位建图(SLAM、高精地图、局部在线地图)、自动驾驶规划控制/轨迹预测等领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频,期待交流!
![28e6320cf4c18e83d5c441066451fe3a.png](https://i-blog.csdnimg.cn/blog_migrate/edbbf852cf9a1413ebb12244bed4257c.png)
③【自动驾驶之心】技术交流群
自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多模态感知、Occupancy、多传感器融合、transformer、大模型、点云处理、端到端自动驾驶、SLAM、光流估计、深度估计、轨迹预测、高精地图、NeRF、规划控制、模型部署落地、自动驾驶仿真测试、产品经理、硬件配置、AI求职交流等方向。扫码添加汽车人助理微信邀请入群,备注:学校/公司+方向+昵称(快速入群方式)
④【自动驾驶之心】平台矩阵,欢迎联系我们!