本文将按照官方文档,通过播放rosbag录制包进行可视化模拟,中间也报了很多错误,特此记录下来,以免后续踩坑。
电脑配置如下:
ubuntu20.04
cuda: cuda-11.6
nvidia-driver 535
ros2: foxy
关于autoware.universe安装可参考我之前的博客链接,我是在ubuntu20.04上使用docker安装拉取环境进行手动安装,可供大家参考。
1. 下载bag包和对应的地图文件
将下载好的文件放到./autoware_map/文件夹下。
- 下载地图
gdown -O ~/autoware_map/ 'https://docs.google.com/uc?export=download&id=1A-8BvYRX3DhSzkAnOcGWFw5T30xTlwZI'
unzip -d ~/autoware_map/ ~/autoware_map/sample-map-rosbag.zip
- 下载rosbag包
gdown -O ~/autoware_map/ 'https://docs.google.com/uc?export=download&id=1VnwJx9tI3kI_cTLzP61ktuAJ1ChgygpG'
unzip -d ~/autoware_map/ ~/autoware_map/sample-rosbag.zip
执行上述命令时报错:
参考文章安装gdown:
git clone https://github.com/wkentaro/gdown.git
cd gdown
pip install gdown
安装后发现在终端直接输入gdown仍然会报上述错误。故直接进入gdown项目,新建.py文件,写python代码下载:
import gdown
# 例如
url = "https://docs.google.com/uc?export=download&id=1A-8BvYRX3DhSzkAnOcGWFw5T30xTlwZI"
output = "sample-map-rosbag.zip"
gdown.download(url, output)
执行代码可能会因为时间问题报错,我这里是使用了代理才成功下载。
下载完成后,将压缩包解压放到autoware_map目录下。
unzip -d ~/autoware_map ~/autoware_map/sample-map-rosbag.zip
其他zip文件同理下载。之后我会把相关zip包和data放到百度云中,有需要的可自取。
2. 创建autoware_data文件夹
将以下文件放到autoware_data文件夹下:
image_projection_based_fusion
lidar_apollo_instance_segmentation
lidar_centerpoint
tensorrt_yolo
tensorrt_yolox
traffic_light_classifier
traffic_light_fine_detector
traffic_light_ssd_fine_detector
yabloc_pose_initializer
......
文件下载可以参官网地址进行下载,也可直接下载我分享的百度云链接。
3. 进入容器,放包测试
- 进入容器
rocker --nvidia --x11 --user --volume $HOME/autoware --volume $HOME/autoware_map --volume $HOME/autoware_data/ -- ghcr.io/autowarefoundation/autoware-universe:latest-cuda
- source
source ./autoware/install/setup.bash
- ros2 launch 打开模拟器
ros2 launch autoware_launch logging_simulator.launch.xml map_path:=$HOME/autoware_map/sample-map-rosbag vehicle_model:=sample_vehicle sensor_model:=sample_sensor_kit
- 新开终端,和上述方法一致,进入容器,source环境
- 放包,包里因为涉及隐私问题,没有图像
ros2 bag play ./autoware_map/sample-rosbag/sample.db3 -r 0.2 -s sqlite3
上述命令执行完,正常情况下模拟器中会显示地图和雷达信息,小车会根据线路移动,并且周围车辆等会有包围框等信息输出,如下图所示:
但是,我的模拟器中出现两个问题:
(1) 整个画面有延迟,点云地图加载有延迟,且时有时无;
(2) 周围目标没有输出任何包围框信息,说明检测就没起作用。我查看终端信息,发现中间有error信息输出。
有上述错误出现而且包里没有图像,故检测基本应该使用激光雷达相关的算法检测得到,但是上述并没有输出检测信息,说明激光雷达相关算法那里可能出了问题。从相关的launch.xml文件中也能看到激光雷达检测使用的是centerpoint,正好我主要目的是测试lidar_centerpoint检测结果。故现在单独启动lidar_centerpoint算法查看。
4. 测试lidar_centerpoint
# 里面涉及到的路径可以根据实际路径修改
ros2 launch lidar_centerpoint lidar_centerpoint.launch.xml model_name:=centerpoint_tiny model_path:=$HOME/autoware_data/lidar_centerpoint model_param_path:=$(ros2 pkg prefix lidar_centerpoint --share)/config/centerpoint_tiny.param.yaml build_only:=true
其中,build_only默认为False,当设置为True时,会将onnx转为engine。
在执行上述命令时报错:
解决方法:
根据github上的问题,我查看了本机上的nvidia-driver是535的,故尝试将nvidia-driver 由535改为545。参考文章。
# 1. 添加 NVIDIA 图形驱动 PPA:
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
# 2. 查看可用的 NVIDIA 驱动版本:
apt search nvidia-driver
# 3. 安装最新的 NVIDIA 驱动:这个过程非常慢!
sudo apt install nvidia-driver-545
# 重启
reboot
# 再次查看,发现nvidia-driver 545成功安装
nvidia-smi
nvidia-driver 由535换为545后,上述错误消失。再次执行上述命令,又迎来新的报错:
我仔细看了终端输出发现engine已经生成了,是生成之后报的错误。查找了资料,其中有的是说是runtime和engine初始定义的顺序不对,导致最终销毁时runtime先被销毁就会出现这种错误。这个就涉及到代码层面的问题了,我查了autoware github上的报错问题,并没有找到类似的报错。我猜想可能不是上面说的这个问题。后来看到一篇博客说这个error不影响,可以忽略。然后我又重新执行了上述命令,将build_only设置为False。终端显示:
没有报错。之后我通过Ctrl+C结束进程,发现有显示上述错误:
上面报错应该没有什么影响,后续如果有影响,我会再回来更新。
5. 重新放包测试
回到前面第3节,重新打开模拟器、同时放包,发现已经可以显示包围框、轨迹规划路径等等
6. 其他报错
- error1
原因是忘记source环境了
source ./autoware/install/setup.bash
- error2
报错原因是直接使用了别人生成的engine,将对应文件中的engine删除,设置build_only:=true重新生成engine即可。
7. 参考
https://github.com/autowarefoundation/autoware.universe/issues/6461
https://zhuanlan.zhihu.com/p/674766674
百度云链接(有空会放)