这是carla ros bridge最有前景的版本,但也是最坑的组合,各种环境依赖,折腾了很久才安装成功,这里记录下踩的坑以及解决方法。本方法均基于官方指南,主要是为安装时遇到的奇怪问题提供解决指导。
系统版本
Ubuntu 22.04
python 3.10
ROS 2安装
这里推荐使用deb包直接安装,从源码编译很麻烦,而且依赖冲突的问题不管哪种方法都有。
官方安装指南:Ubuntu (deb packages) — ROS 2 Documentation: Humble documentation
按照官方的指南,会遇到如下问题:
libpulse-dev : 依赖: libpulse0 (= 1:15.99.1+dfsg1-1ubuntu1) 但是 1:15.99.1+dfsg1-1ubuntu2.1 正要被安装
这个问题可以用aptitude安装指定版本
sudo aptitude install libpulse0=1:15.99.1+dfsg1-1ubuntu1
但是,可能运行完会黑屏,这里是因为修改了依赖,桌面崩了。不要慌,修复一下桌面就可以了,(此处参考给ubuntu重新安装图形界面(GNOME) - namezhyp - 博客园 )
sudo vim /etc/apt/sources.list
# 打开以后,在里面增加以下两个源
# 注意jammy前面也有空格
deb http://ir.archive.ubuntu.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://ir.archive.ubuntu.com/ubuntu/ jammy-backports main restricted universe multiverse
# 增加保存以后
sudo apt update
sudo apt install ubuntu-desktop
然后,恭喜你回到桌面。继续安装ROS2即可,后面的安装畅通无阻了。
Carla安装
这里最大的坑是python版本,大多数默认的版本都是基于python3.7或者3.8编译的,不能直接在Ubuntu 22.04上直接用(默认python3.10),这里需要替换一下编译的egg和whl。
首先去官网下载需要的Carla版本:https://github.com/carla-simulator/carla/releases
然后在bashrc里面配置环境变量:
export CARLA_ROOT=/home/name/Carla # 替换你自己的位置
export PYTHONPATH=$PYTHONPATH:${CARLA_ROOT}/PythonAPI/carla/dist/carla-0.9.13-py3.10-linux-x86_64.egg
export PYTHONPATH=$PYTHONPATH:${CARLA_ROOT}/PythonAPI/carla/agents
export PYTHONPATH=$PYTHONPATH:${CARLA_ROOT}/PythonAPI/carla
export PYTHONPATH=$PYTHONPATH:${CARLA_ROOT}/PythonAPI
下载并替换egg和whl:https://github.com/gezp/carla_ros/releases/, 位置在PythonAPI/carla/dist里面。
检查下是否成功
python
import carla
如果没有报错就说明环境配置成功了,如果egg版本和你下载的不一样,可以把原来的egg,whl移走,这样就能找到替换的版本了。
安装Carla Ros Bridge
编译的时候出现找不到tf2_eigen,这时候需要修改下CMakelist (参考
colcon error casued by the lack of dependence `tf2_eigen` · Issue #737 · carla-simulator/ros-bridge · GitHub)
打开 carla-ros-bridge/src/ros-bridge/pcl_recorder/CMakeLists.txt
添加如下依赖
find_package(tf2_eigen REQUIRED)
include_directories(${tf2_eigen_INCLUDE_DIRS})
重新编译,成功。
测试结果
还有些pygame之类的包,如果有缺失就安装下,没有其他大的问题了。
完成!