rosbridge-WSL2 && carla-win11

文章目录

  • 安装 ROS
  • 安装 ROS bridge
  • 运行 ROS bridge
  • 连接 scenario runner

安装 ROS

  • 方法一:可参考我之前一篇博客《WSL+ROS》,里面讲述了如何在 WSL 中安装 ROS1 并给出相应简单的 CPP、Python 程序和 launch 文件(本人使用的)
  • 方法二:通过在 WSL 终端运行 wget http://fishros.com/install -O fishros && . fishros 来根据自己的需求选择安装相应内容,该方法来自鱼香社区。若使用该方法可以考虑安装里面 rosdepc,因为后面需要用到(方法二比较便捷)

rosbridge-WSL2 && carla-win11_第1张图片

安装 ROS bridge

✍️本人使用的是 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
  • 从 github 上下载 ROS bridge 源码及其相关模块
cd ~/carla-ros-bridge
git clone --recurse-submodules https://github.com/carla-simulator/ros-bridge.git catkin_ws/src/ros-bridge

rosbridge-WSL2 && carla-win11_第2张图片

  • 根据已安装的 ROS1 设置 ROS 环境,这里可选有 melodic(Ubuntu18.04) 和 noetic(Ubuntu20.04)
source /opt/ros/<melodic/noetic>/setup.bash
  • 安装必须的 ROS 依赖,若安装 ROS 时采用方法二,则 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

rosbridge-WSL2 && carla-win11_第3张图片
rosbridge-WSL2 && carla-win11_第4张图片

  • 构建 ROS bridge
catkin build   # alternatively catkin_make

# 若出现错误:catkin: command not found,则根据 python 版本运行以下命令手动安装根据
sudo apt install python3-catkin-tools
sudo apt install python-catkin-tools

rosbridge-WSL2 && carla-win11_第5张图片

运行 ROS bridge

  • 运行 carla,源码编译的可直接点击 CarlaUE4.uproject。若未安装 carla,可参考我之前的博客《win11 下编译 CARLA0.9.13》
  • 将 carla 模块添加到 Python 路径,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)
rosbridge-WSL2 && carla-win11_第6张图片

  • 根据安装 ROS bridge 的方式为 ROS bridge 工作空间添加 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
  • 由于文章的 ROS bridge 是安装在 WSL 中,所以需要先确定 WSL 和 win 主机能否通信,可参考这篇博客。通常 win 主机是能 ping 通 WSL 的,而若 WSL ping 不通 win 主机,则以管理员身份运行 powershell 并输入如下命令:
New-NetFirewallRule -DisplayName "WSL" -Direction Inbound  -InterfaceAlias "vEthernet (WSL)"  -Action Allow
  • 在启动前,需要修改连接的 CARLA 服务端地址 ,如我们要运行 carla_ros_bridge.launch 文件,则修改该文件的 host 参数,该参数是 win 在 WSL 中的地址,具体如下:

rosbridge-WSL2 && carla-win11_第7张图片

  • 启动 ROS bridge,默认使用的地图是 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

rosbridge-WSL2 && carla-win11_第8张图片

运行上述 4 条命令并配置 RVIZ 后的结果

我这里使用多个终端运行而不直接使用 roslaunch carla_ros_bridge carla_ros_bridge_with_example_ego_vehicle.launch 是因为把 rosbridge 关闭后 CARLA 会出现无法响应状态,不知道问题出在哪里。无响应可通过任务管理器结束该进程即可
rosbridge-WSL2 && carla-win11_第9张图片
无响应问题是因为运行 ROS Bridge 时采用同步模式,导致服务端一直在等客户端的请求,所以 CARLA 才会无响应(不会影响客户端连接),可在程序运行结束后切换回异步模式解决问题。

连接 scenario runner

我们可通过 rosbridge 来连接 scenario runner 来执行相应的动态场景(只支持 *.xosc 文件?),也可以直接使用 scenario runner 来与 CARLA 交互(支持 *.xosc文件以及 python 文件)。rosbridge 方式的具体连接方法如下:

  1. 首先需要获取 scenario runner 的源码,并正确安装相应依赖模块(在对应的 python 环境中安装),否则会出现缺少模块错误,导致场景无法执行

rosbridge-WSL2 && carla-win11_第10张图片

# 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 环境中添加依赖包

  1. 在终端中 export scenario runner 的路径(也可直接在前面创建的 env.bash 文件中添加命令行),具体命令如下:
# export SCENARIO_RUNNER_PATH=安装 SR 的路径
export SCENARIO_RUNNER_PATH=/mnt/e/scenario_runner
  1. 若使用的是 conda 环境,可在终端输入 whereis python查看当前所有的 python 路径,并根据相应的 conda python 路径来修改 rosbridge 中scenario_runner_runner.pypython_path(如 /home/username/miniconda3/envs/CARLA/bin/python),否则会出现如下错误导致场景无法执行

rosbridge-WSL2 && carla-win11_第11张图片
rosbridge-WSL2 && carla-win11_第12张图片

  1. 通过 roslaunch carla_ad_demo carla_ad_demo_with_scenario.launch 来连接 scenario runner(默认使用的场景为 FollowLeadingVehicle),若出现如下错误则会导致 Scenario Execution 出现没有场景可选的情况,可通过安装相应的模块解决问题(Execute灰色表示没有场景可选,为红色表示场景执行不了,绿色表示场景正在执行)

在这里插入图片描述

rosbridge-WSL2 && carla-win11_第13张图片

# 本人安装时只出现以下 2 个模块缺失,具体看个人报错情况
# ModuleNotFoundError: No module named 'Cryptodome'
pip install pycryptodomex
# ModuleNotFoundError: No module named 'gnupg'
pip install gnupg
  1. Scenario Execution 中选择相应的场景,点击 Execute 按钮执行场景

rosbridge-WSL2 && carla-win11_第14张图片

你可能感兴趣的:(WSL,CARLA,自动驾驶,CARLA,WSL,ROS)