
正文共:7931字 9图
预计阅读时间:20分钟
建议先收藏
大家好,我是李慢慢。
ROS_Bridge是一个非常重要的模块,值得用一生来学习。
CARLA_ROS_BRIDGE是CARLA仿真平台与ROS系统之间的通信桥梁。它允许CARLA仿真环境与ROS系统进行通信和交互。通过ROS_BRIDGE,你可以将CARLA仿真环境的数据传输到ROS节点,也可以将ROS节点的指令传输到CARLA仿真环境中。
ROS_BRIDGE 提供了一些功能,包括:
使用CARLA的ROS_BRIDGE,你可以方便地将CARLA仿真平台与ROS系统集成,进行自动驾驶算法的开发和测试,以加速自动驾驶算法的开发过程。
| 序号 | 包名 | 包功能介绍 |
|---|---|---|
| 1 | CARLA ROS bridge | 运行ROS bridge时的主要功能包 |
| 2 | ROS Compatiblity Node | 兼容ROS 1和ROS 2的API接口包 |
| 3 | CARLA Spawn Objects | 提供通用的生成Actor的方法 |
| 4 | CARLA Manual Control | 基于ROS的主车可视化控制工具,类似carla_manual_control.py |
| 5 | CARLA Ackerman Control | 一个将阿克曼指令转变为steer/throttle/brake指令的控制器 |
| 6 | CARLA Waypoint Publisher | 发布并检索CARLA中的路径点 |
| 7 | CARLA AD Agent | 一个示例的智能驾驶代理,它能跟随路径,避免碰撞,遵守交通信号灯 |
| 8 | CARLA AD Demo | 这是一个运行自动驾驶车辆的示例包,含运行CARLA的ROS环境所需的所有要素 |
| 9 | CARLA ROS Scenario Runner | 这是一个通过ROS运行Scenario Runner来在CARLA中运行OpenSCENARIO场景的适配器 |
| 10 | CARLA Twist to Control | 将Twist控制(线速度、角速度)转换为 steer/throttle/brake 控制 |
| 11 | RVIZ plugin | 一个名为RVIZ的可视化/控制插件 |
| 12 | RQT Plugin | 一个名为RQT的控制CARLA仿真过程的插件。RQT 插件是一个简单的界面,用于暂停、播放和控制仿真的步骤 |
| 13 | PCL Recorder | 根据从仿真中捕获的数据创建点云地图 |
CARLA的ROS_bridge支持ROS 1和ROS 2,为了和前文环境保持一致,这里依然以ROS 2为例进行安装过程介绍。
安装方法主要参考内容:https://carla.readthedocs.io/projects/ros-bridge/en/latest/ros_installation_ros2/
在前文已经讲解了ROS 2 Foxy (for Ubuntu 20.04) 和CARLA_0.9.13的安装,此处不再赘述,直接开启ROS_bridge工具的安装。
1. 设置项目文件夹并克隆ROS bridge仓库和子模块。
mkdir -p ~/carla-ros-bridge && cd ~/carla-ros-bridge
git clone --recurse-submodules https://github.com/carla-simulator/ros-bridge.git src/ros-bridge

2. 设置ROS的环境:
source /opt/ros/foxy/setup.bash
3. 安装ROS的依赖库:
rosdep update
rosdep install --from-paths src --ignore-src -r

常见报错:
goodman@Ubuntu20:~/carla-ros-bridge$ rosdep install --from-paths src --ignore-src -r
ERROR: the following packages/stacks could not have their rosdep keys resolved
to system dependencies:
carla_ackermann_control: Cannot locate rosdep definition for [ackermann_msgs]
Continuing to install resolvable dependencies...
#All required rosdeps installed successfully
解决方法:
sudo apt-get install ros-foxy-ackermann-msgs
看到的内容如下:
goodman@Ubuntu20:~/carla-ros-bridge$ sudo apt-get install ros-foxy-ackermann-msgs
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
gir1.2-goa-1.0 libgoogle-perftools4 libtcmalloc-minimal4 libyaml-cpp0.6
Use 'sudo apt autoremove' to remove them.
The following NEW packages will be installed:
ros-foxy-ackermann-msgs
0 upgraded, 1 newly installed, 0 to remove and 62 not upgraded.
Need to get 104 kB of archives.
After this operation, 1,098 kB of additional disk space will be used.
Get:1 http://packages.ros.org/ros2/ubuntu focal/main amd64 ros-foxy-ackermann-msgs amd64 2.0.2-1focal.20230527.045519 [104 kB]
Fetched 104 kB in 1s (72.8 kB/s)
Selecting previously unselected package ros-foxy-ackermann-msgs.
(Reading database ... 280139 files and directories currently installed.)
Preparing to unpack .../ros-foxy-ackermann-msgs_2.0.2-1focal.20230527.045519_amd64.deb ...
Unpacking ros-foxy-ackermann-msgs (2.0.2-1focal.20230527.045519) ...
Setting up ros-foxy-ackermann-msgs (2.0.2-1focal.20230527.045519) ...
Processing triggers for libc-bin (2.31-0ubuntu9.16) ...
4. 用colcon工具编译ROS_bridge工作空间:
colcon build
编译打印内容如下:
goodman@ubuntu20:~/carla-ros-bridge$ colcon build
Starting >>> carla_msgs
Starting >>> ros_compatibility
Starting >>> carla_common
Starting >>> carla_ros_scenario_runner_types
Starting >>> carla_waypoint_types
Starting >>> carla_twist_to_control
Starting >>> rqt_carla_control
Finished <<< rqt_carla_control [1.08s]
Finished <<< carla_twist_to_control [1.08s]
Finished <<< ros_compatibility [1.10s]
Finished <<< carla_common [1.10s]
Finished <<< carla_waypoint_types [5.66s]
Starting >>> carla_waypoint_publisher
Finished <<< carla_ros_scenario_runner_types [5.82s]
Finished <<< carla_waypoint_publisher [0.58s]
Finished <<< carla_msgs [9.12s]
Starting >>> carla_manual_control
Starting >>> carla_spawn_objects
Starting >>> carla_ackermann_msgs
Starting >>> carla_ad_agent
Starting >>> carla_ros_scenario_runner
Starting >>> rviz_carla_plugin
Starting >>> carla_walker_agent
Finished <<< carla_manual_control [1.19s]
Finished <<< carla_ad_agent [1.19s]
Finished <<< carla_ros_scenario_runner [1.19s]
Finished <<< carla_walker_agent [1.19s]
Finished <<< carla_spawn_objects [1.23s]
Starting >>> carla_ros_bridge
Finished <<< carla_ros_bridge [0.60s]
Starting >>> pcl_recorder
Finished <<< carla_ackermann_msgs [4.69s]
Starting >>> carla_ackermann_control
Finished <<< carla_ackermann_control [0.66s]
--- stderr: pcl_recorder
** WARNING ** io features related to openni will be disabled
** WARNING ** io features related to openni2 will be disabled
** WARNING ** io features related to pcap will be disabled
** WARNING ** io features related to png will be disabled
** WARNING ** io features related to libus b-1.0 will be disabled
---
Finished <<< pcl_recorder [10.8s]
Finished <<< rviz_carla_plugin [13.5s]
Starting >>> carla_ad_demo
Finished <<< carla_ad_demo [0.53s]
Summary: 19 packages finished [23.3s]
1 package had stderr output: pcl_recorder
goodman@ubuntu20:~/carla-ros-bridge$
到这里,ROS_bridge安装完成,接下来就可以使用了。
1. 运行CARLA的Server端:
./CarlaUE4.sh
# 设置CARLA_ROOT路径
export CARLA_ROOT=/home/goodman/CARLA/CARLA_0.9.13
# 设置PYTHONPATH路径
export PYTHONPATH=$PYTHONPATH:$CARLA_ROOT/PythonAPI/carla/dist/carla-0.9.13-py3.7-linux-x86_64.egg
export PYTHONPATH=$PYTHONPATH:$CARLA_ROOT/PythonAPI/carla
export PYTHONPATH=$PYTHONPATH:$CARLA_ROOT/PythonAPI/carla/agents
3. 为ROS bridge工作空间添加源路径:
source ./install/setup.bash
4. 新打开一个终端,启动ROS 2 Bridge:
# Option 1, start the basic ROS bridge package
ros2 launch carla_ros_bridge carla_ros_bridge.launch.py
到这里,我们已经启动了ROS_bridge,可以通过如下指令查看当前正在运行的节点,和可用的topic:
goodman@ubuntu20:~/carla-ros-bridge$ ros2 node list
/carla_ros_bridge
goodman@ubuntu20:~/carla-ros-bridge$ ros2 topic list
/carla/control
/carla/debug_marker
/carla/status
/carla/weather_control
/carla/world_info
/clock
/parameter_events
/rosout
到这里,我们已经看到了ROS_bridge的运行效果。carla_ros_bridge这个核心节点已经启动,接下来我们就可以利用这个节点根据相关topic实现和CARLA的通信。关于如何创建其它节点,官方也给出了示例程序。我们先关闭上述carla_ros_bridge节点,然后重新运行新的节点案例:
# Option 2, start the ROS bridge with an example ego vehicle
ros2 launch carla_ros_bridge carla_ros_bridge_with_example_ego_vehicle.launch.py
上述代码运行后的命令行界面如下:

此时,会有一个pygame窗口打开,可以通过键盘控制主车的行驶,效果如下:

此时,另开一个终端,输入“ros2 node list”可查看当前有哪些节点在运行,以及输入“ros2 topic list”可查看当前有哪些topic被发布:
goodman@ubuntu20:~/carla-ros-bridge$ ros2 node list
/carla_manual_control_ego_vehicle
/carla_ros_bridge
/carla_spawn_objects
/set_initial_pose
goodman@ubuntu20:~/carla-ros-bridge$ ros2 topic list
/carla/actor_list
/carla/control
/carla/debug_marker
/carla/ego_vehicle/collision
/carla/ego_vehicle/control/set_target_velocity
/carla/ego_vehicle/control/set_transform
/carla/ego_vehicle/depth_front/camera_info
/carla/ego_vehicle/depth_front/image
/carla/ego_vehicle/dvs_front/camera_info
/carla/ego_vehicle/dvs_front/events
/carla/ego_vehicle/dvs_front/image
/carla/ego_vehicle/enable_autopilot
/carla/ego_vehicle/gnss
/carla/ego_vehicle/imu
/carla/ego_vehicle/lane_invasion
/carla/ego_vehicle/lidar
/carla/ego_vehicle/objects
/carla/ego_vehicle/odometry
/carla/ego_vehicle/radar_front
/carla/ego_vehicle/rgb_front/camera_info
/carla/ego_vehicle/rgb_front/image
/carla/ego_vehicle/rgb_view/camera_info
/carla/ego_vehicle/rgb_view/control/set_target_velocity
/carla/ego_vehicle/rgb_view/control/set_transform
/carla/ego_vehicle/rgb_view/image
/carla/ego_vehicle/semantic_lidar
/carla/ego_vehicle/semantic_segmentation_front/camera_info
/carla/ego_vehicle/semantic_segmentation_front/image
/carla/ego_vehicle/speedometer
/carla/ego_vehicle/vehicle_control_cmd
/carla/ego_vehicle/vehicle_control_cmd_manual
/carla/ego_vehicle/vehicle_control_manual_override
/carla/ego_vehicle/vehicle_info
/carla/ego_vehicle/vehicle_status
/carla/map
/carla/markers
/carla/markers/static
/carla/objects
/carla/status
/carla/traffic_lights/info
/carla/traffic_lights/status
/carla/weather_control
/carla/world_info
/clock
/initialpose
/parameter_events
/rosout
/tf
goodman@ubuntu20:~/carla-ros-bridge$
当然我们也可以借助ROS2的工具进行更进一步的可视化查看,比如另开一个终端,输入“rqt_graph”可查看这些节点间通过哪些topic在通信:
rqt_graph

如果想更近一步查看相关topic下的具体信号值,可以直接打开rqt工具:
rqt
打开rqt界面后,稍微配置下显示内容,就能显示出如下内容。

如果想对传感器数据进行可视化显示,可以借助rviz2工具进行展示,启动命令如下:
rviz2
打开的rviz2界面如下所示,读者可自行配置显示内容。

总结:上述案例很好的示例了不同节点之间的通信,读者可以自行研读各个节点的示例代码,并进行扩展,以集成自动驾驶算法,实现对自动驾驶算法的仿真测试闭环。
本文完。