一 、前言
目标是使用AutowareAuto + LGSVL进行仿真并实现车辆在地图内的自动巡航。具体包括:1.
安装AutowareAuto + LGSVL;2. 对仿真器的启动进行定制化,使用tmux进行仿真器启动。3.将仿
真器的一些数据通过kafka发出。4. 对/adehome 下的AutowareAuto源码进行编译,并作一定的修
改来满足目标。
二 、AutowareAuto 安装
AutowareAuto的安装按照官方指引进行安装即可,地址附上:
https://autowarefoundation.gitlab.io/autoware.auto/AutowareAuto/installation-ade.html
采用的安装方式为ade安装,建议大家也这样安装,省去很多环境配置的问题,而且
ade+docker 也是环境部署和开发的现在/未来主流方式。
这里对关于AutowareAuto 和ADE 的一些知识进行记录:
ade从一个基础镜像创建一个容器,同时在/opt目录下挂载其他只读的卷。在AutowareAuto的ade中使用了三个镜像:
.../amd64/ade-foxy:master:基础镜像
.../amd64/binary-foxy:master: 作为只读卷挂载在/opt下 为/opt/ros
.../ade-lgsvl/foxy:2021.3: 作为只读卷挂载在/opt下 为/opt/lgsvl
在安装完成之后,请先根据指引完成一次仿真器的启动和使用,链接如下:
https://autowarefoundation.gitlab.io/autoware.auto/AutowareAuto/avpdemo.html
在AutowareAuto 自带的仿真中,只有Autonomous Valet Parking 这个自动泊车的场景.目前只
能基于这个仿真环境进行开发,应该还有其他的场景可用,毕竟大神很多,目前没有计划采用别的
仿真场景。
三、使用tmux进行仿真的启动
需要用到tmux主要因为要启动仿真器,还是要启动多个launch的,如果不使用tmux进行启
动,则需要打开多个终端。
在这里我是用的是bash脚本来启动tmux,里面主要覆盖了依赖安装,仿真器的启动,初始定
位发布,ros2_kafka_bridge 启动等终端。现在在下面贴一个使用示例:
#!/bin/bash
tmux source ~/.tmux.conf
tmux new -d -s simulation -n empty #创建一个tmux终端,并创建一个新窗口empty
#空白窗口:用户自由使用
tmux split-window -h -t simulation:empty #竖向分割窗口
tmux split-window -v -t simulation:empty.1 #横向分割窗口
tmux split-window -v -t simulation:empty.0 #横向分割窗口
#最后生成的是一个四宫格的窗口
#依赖安装窗口
tmux new-window -n dependent_install -t simulation #再创建一个新窗口
tmux split-window -h -t simulation:dependent_install #竖向分割窗口
tmux split-window -v -t simulation:dependent_install.1 #横向分割窗口
tmux split-window -v -t simulation:dependent_install.0 #横向分割窗口
#向某个终端输入命令并执行
tmux send-keys -t simulation:dependent_install.0 'sudo -S pip install pymongo' C-m
四、将仿真的一些数据使用kafka发出来
AutowareAuto是基于ros2开发,在github上找了一个ros2_kafka_bridge进行修改使用:
地址附上:
https://github.com/endre90/ros2_kafka_bridge
关于一些依赖的安装还有使用中出现的问题,请各位查看另一篇博文:
地址附上:
ros2 kafka 联合使用_小鹿的先生的博客-CSDN博客
五,对AutowareAuto 的源码进行编译,并对一些修改
对源码进行编译是发现这个仿真场景主要是自动泊车的场景,要想进行车辆在环境中自动巡
航有些参数不适用。
5.1 编译的问题
在对/adehome下的AutowareAuto 进行编译的时候发现 costmap_generator_nodes 和
velodyne_nodes 这两个节点编译有错误。一直编译不过去,目前的不需要对这两个节点进行修
改,因此在编译的时候直接跳过这个节点:
colcon build --packages-ignore velodyne_nodes costmap_generator_nodes
编译完成之后,就可以使用/adehome下的节点了。不需要进行修改的节点可以使
用/opt/AutowareAuto下的节点,而自己修改的节点就可以启用 ~/AutowareAuto下的节点,把
launch进行拆分成不同的launch,并在tmux中不同的端口中source不同的环境启动即可。
下面这篇博文也记录了一些信息,但是比较乱,也不整理了,权当参考资料:
Autoware.Auto avp仿真详解_小鹿的先生的博客-CSDN博客
5.2 感知障碍物入侵道路的问题
车辆跑的时候,会出现识别到的点云boundingbox突然变的很大,甚至跑到路上挡住车;
原因是仿真中的识别是用的简单的欧几里德聚类方法,有时会有很多云被识别为一类,在生成
boundingbox难免体积会变的不合理。这里对参数进行修改,问题得到解决:
参数文件位置
/AutowareAuto/src/autoware_auto_launch/param/euclidean_cluster_.param.yaml
其中两个参数改为:
min_cluster_threshold_m : 0.2
max_cluster_threshold_m : 0.8
此处不要求感知的结果正确,只为了达到障碍物不会入侵可行使区域;
5.3 车辆直角路口进行转弯时,很容易卡住
目前还在寻找解决方法
六、发布巡航任务
直接写一个节点,循环发布/planning/goal_pose 就可以,但是有一个问题要注意,仿真里车
辆的目标点不能在车现在位置的反方向,因为在道路上车辆被限定不能倒车(或者是规划器的问
题),目标点如果在车后,车会一直向前走直到撞停。
七、总结
目前已经能够让车辆自动在仿真环境中自己围着一个圈不停的跑,但是直角转弯会卡住的问
题尚待解决,车辆的信息也可以通过ros2_kafka_bridge发布到kafka,详细的技术问题,可以私信交
流。
附图如下: