ROS1
并给出相应简单的 CPP、Python 程序和 launch 文件(本人使用的)wget http://fishros.com/install -O fishros && . fishros
来根据自己的需求选择安装相应内容,该方法来自鱼香社区。若使用该方法可以考虑安装里面 rosdepc,因为后面需要用到(方法二比较便捷)✍️本人使用的是 ROS1,所以下面主要讲 ROS1 的 ROS bridge 怎么安装。此外,如果后面用到的 .egg
文件是直接从官网上下载的,则需要用到 python3.7
环境,否则会出现很多问题!python 环境可使用 conda 来创建,但 conda 创建 python 环境会出现 ROS:ModuleNotFoundError: No module named ‘rospkg‘
等错误,可通过 pip
安装相应包(注意查看报错信息,包缺失信息在我这是在报错信息的中间,需要仔细排查),我这大概安装了 4 个包,具体是哪些也没仔细记录
方法一:通过 apt-get
安装,但只适用于 Ubuntu18.04,具体命令如下
# Set up the Debian repository in your system
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1AF1527DE64CB8D9
sudo add-apt-repository "deb [arch=amd64] http://dist.carla.org/carla $(lsb_release -sc) main"
# Install the ROS bridge
sudo apt-get update # Update the Debian package index
sudo apt-get install carla-ros-bridge # Install the latest ROS bridge version, or update the current installation
# Check the ROS bridge has been installed successfully in the /opt/ folder
方法二:从源码中编译(本人使用的)
catkin
工作空间,下面命令会在用户目录下创建一个文件夹(工作空间)mkdir -p ~/carla-ros-bridge/catkin_ws/src
cd ~/carla-ros-bridge
git clone --recurse-submodules https://github.com/carla-simulator/ros-bridge.git catkin_ws/src/ros-bridge
melodic
(Ubuntu18.04) 和 noetic
(Ubuntu20.04)source /opt/ros/<melodic/noetic>/setup.bash
rosdep
需改成 rosdepc
cd catkin_ws
rosdep update # 若 update 中有部分没有 Hit 到则重复运行
rosdep install --from-paths src --ignore-src -r
# 若出现错误 ERROR: the following rosdeps failed to install,则安装 pip 或 pip3
catkin build # alternatively catkin_make
# 若出现错误:catkin: command not found,则根据 python 版本运行以下命令手动安装根据
sudo apt install python3-catkin-tools
sudo apt install python-catkin-tools
CarlaUE4.uproject
。若未安装 carla,可参考我之前的博客《win11 下编译 CARLA0.9.13》CARLA_ROOT
为 carla 安装的根路径,由于是在 WSL 中 export 路径,所以需要添加/mnt
,而 PYTHONPATH
中的 .egg
文件路径则根据自己安装的路径来查找。后面可通过在 WSL 终端 echo $PYTHONPATH
命令查看 PYTHONPATH,若类似于 /opt/ros/noetic/lib/python3/dist-packages:/mnt/e/carla/PythonAPI/carla/dist/carla-0.9.13-py3.7-win-amd64.egg:/mnt/e/carla/PythonAPI/carla
则应该是成功了(export 只在当前终端生效!)export CARLA_ROOT=/mnt/e/carla # /mnt/e/carla 为安装 carla 的路径(在 win 中是 e 盘下 carla 目录)
export PYTHONPATH=$PYTHONPATH:$CARLA_ROOT/PythonAPI/carla/dist/carla-0.9.13-py3.7-linux-x86_64.egg:$CARLA_ROOT/PythonAPI/carla # carla-0.9.13-py3.7-linux-x86_64.egg 是 carla 名称
由于 ROS bridge 是安装在 WSL 中,所以使用的 .egg
文件需要是 linux 版本的,若使用 win 版本则会出现 invalid ELF header
错误!该 linux 版本可通过官方的 GitHub 库下载,也可下载我上传的资源(包括0.9.12 和 0.9.13)
source path
# 从 Github 上源码编译的(我使用的方式)
source ~/carla-ros-bridge/catkin_ws/devel/setup.bash
# 直接安装 ROS bridge 的
source /opt/carla-ros-bridge/<melodic/noetic>/setup.bash
【可选】为了避免重复上述环境配置指令,可在项目根路径下创建一个 envs.bash
文件,将指令整合在一起,然后在终端中运行 source envs.bash
(一个终端运行一次即可,不然会出现错误),若没有创建该文件则每个新终端都需要运行以下 3
条命令,文件内容参考如下:
export CARLA_ROOT=/mnt/e/carla
export PYTHONPATH=$PYTHONPATH:$CARLA_ROOT/PythonAPI/carla/dist/carla-0.9.13-py3.7-linux-x86_64.egg:$CARLA_ROOT/PythonAPI/carla
source ~/carla13-ros-bridge/catkin_ws/devel/setup.bash
ping
通 WSL 的,而若 WSL ping
不通 win 主机,则以管理员身份运行 powershell
并输入如下命令:New-NetFirewallRule -DisplayName "WSL" -Direction Inbound -InterfaceAlias "vEthernet (WSL)" -Action Allow
carla_ros_bridge.launch
文件,则修改该文件的 host
参数,该参数是 win 在 WSL 中的地址,具体如下:Town1
,可先切换至该地图# 每个终端都应该激活相应 python 环境
# 终端 1,启动 ROS bridge
source envs.bash
roslaunch carla_ros_bridge carla_ros_bridge.launch
# 终端 2,生成相关物体,包括 ego vehicle
source envs.bash
roslaunch carla_spawn_objects carla_spawn_objects.launch
# 终端 3,控制 ego vehicle,若需要手动控制则需先按 B 键,不然控制不了,P 键是自动驾驶
source envs.bash
roslaunch carla_manual_control carla_manual_control.launch
# 终端 4,启动 RVIZ 可视化
rosrun rviz rviz
运行上述 4 条命令并配置 RVIZ 后的结果
我这里使用多个终端运行而不直接使用 roslaunch carla_ros_bridge carla_ros_bridge_with_example_ego_vehicle.launch
是因为把 rosbridge 关闭后 CARLA 会出现无法响应状态,不知道问题出在哪里。无响应可通过任务管理器结束该进程即可
无响应问题是因为运行 ROS Bridge 时采用同步模式,导致服务端一直在等客户端的请求,所以 CARLA 才会无响应(不会影响客户端连接),可在程序运行结束后切换回异步模式解决问题。
我们可通过 rosbridge 来连接 scenario runner 来执行相应的动态场景(只支持 *.xosc 文件?),也可以直接使用 scenario runner 来与 CARLA 交互(支持 *.xosc文件以及 python 文件)。rosbridge 方式的具体连接方法如下:
# scenario runner 具体依赖如下
py-trees==0.8.3
networkx==2.2
Shapely==1.7.1
psutil
xmlschema==1.0.18
ephem
tabulate
opencv-python==4.2.0.32
numpy
matplotlib
six
simple-watchdog-timer
注:本人的 scenario runner 一开始是直接与 CARLA 交互,所以也安装在 win11 上,而我的 rosbridge 则安装在 WSL 中,因此需要在 WSL 中新的 conda 环境中添加依赖包
export
scenario runner 的路径(也可直接在前面创建的 env.bash 文件中添加命令行),具体命令如下:# export SCENARIO_RUNNER_PATH=安装 SR 的路径
export SCENARIO_RUNNER_PATH=/mnt/e/scenario_runner
conda
环境,可在终端输入 whereis python
来查看当前所有的 python 路径,并根据相应的 conda python 路径来修改 rosbridge 中scenario_runner_runner.py
的 python_path
(如 /home/username/miniconda3/envs/CARLA/bin/python
),否则会出现如下错误导致场景无法执行roslaunch carla_ad_demo carla_ad_demo_with_scenario.launch
来连接 scenario runner(默认使用的场景为 FollowLeadingVehicle),若出现如下错误则会导致 Scenario Execution
出现没有场景可选的情况,可通过安装相应的模块解决问题(Execute
为灰色表示没有场景可选,为红色表示场景执行不了,绿色表示场景正在执行)# 本人安装时只出现以下 2 个模块缺失,具体看个人报错情况
# ModuleNotFoundError: No module named 'Cryptodome'
pip install pycryptodomex
# ModuleNotFoundError: No module named 'gnupg'
pip install gnupg
Scenario Execution
中选择相应的场景,点击 Execute
按钮执行场景