官网:https://carla.readthedocs.io/projects/ros-bridge/en/latest/run_ros/

carla_ros_bridge 功能包是运行基本 ROS 桥接功能所需的主要功能包。在本节中,你将学习如何准备 ROS 环境,运行 ROS 桥,如何配置设置,同步模式的使用,控制车辆,以及对可用的订阅、发布和服务的总结。

这个包封装了操作 Carla 服务端的 API,使用户不用关心 Server 层的东西,直接通过其提供的几个ROS service 创建车辆、传感器、路灯等等各种 objects ,并对其进行了管理,同时将各类传感器数据从 Carla 格式转化为 ROS 消息 publish 出去。

1. 准备 ROS 环境

运行的命令取决于你是通过 Debian 软件包还是通过源代码构建来安装 ROS Bridge。你还需要改变Debian 选项的路径中的 ROS 版本。

# For debian installation of ROS bridge. Change the command according to your installed version of ROS.
source /opt/carla-ros-bridge/<melodic/noetic>/setup.bash# For GitHub repository installation of ROS bridge
source ~/carla-ros-bridge/catkin_ws/devel/setup.bash

2. 运行 ROS Bridge

一旦您设置了您的 ROS 环境并运行了 CARLA 服务器,您需要在使用其他软件包之前启动carla_ros_bridge 软件包。要做到这一点,请运行以下命令。

roslaunch carla_ros_bridge carla_ros_bridge.launch

还有一些启动文件结合了上述功能,在启动其他软件包或插件的同时启动 ROS Bridge

roslaunch carla_ros_bridge carla_ros_bridge_with_example_ego_vehicle.launch

3. 配置 CARLA 参数

配置应该在 launch 启动文件中设置,或者在从命令行运行文件时作为一个参数传递,例如。

roslaunch carla_ros_bridge carla_ros_bridge.launch passive:=True

carla_ros_bridge.launch 文件内容如下:

<!-- -->
<launch><!-- global parameter to set CARLA as time source --><param name="use_sim_time" value="True"/><!-- the network connection for the python connection to CARLA --><arg name='host' default='localhost'/><arg name='port' default='2000'/><arg name='timeout' default='2'/><!-- enable/disable synchronous mode. If enabled ros-bridge waits untilexpected data is received for all sensors--><arg name="passive" default='False'/><arg name='synchronous_mode' default='True'/><arg name='synchronous_mode_wait_for_vehicle_control_command' default='False'/><!-- set the fixed timestep length --><arg name='fixed_delta_seconds' default='0.05'/><arg name='town' default='Town01'/><!-- enable/disable the registration of all sensors. If disabled, only sensorsspawned by the bridge are registered --><arg name='register_all_sensors' default='True'/><!-- the role name of the vehicles that acts as ego vehicle for this ros bridge instanceOnly the vehicles within this list are controllable from within ROS.(the vehicle from CARLA is selected which has the attribute 'role_name' set to this value)--><arg name='ego_vehicle_role_name' default='["hero", "ego_vehicle", "hero0", "hero1", "hero2", "hero3", "hero4", "hero5", "hero6", "hero7", "hero8", "hero9"]'/><node pkg="carla_ros_bridge" name="carla_ros_bridge" type="bridge.py" output="screen" required="true"><param name="host" value="$(arg host)" unless="$(eval host == '')"/><param name="port" value="$(arg port)" unless="$(eval port == '')"/><param name="timeout" value="$(arg timeout)" unless="$(eval timeout == '')"/><param name="passive" value="$(arg passive)"/><param name="synchronous_mode" value="$(arg synchronous_mode)"/><param name="synchronous_mode_wait_for_vehicle_control_command" value="$(arg synchronous_mode_wait_for_vehicle_control_command)"/><param name="fixed_delta_seconds" value="$(arg fixed_delta_seconds)"/><param name="register_all_sensors" value="$(arg register_all_sensors)"/><param name="town" value="$(arg town)"/><param name="ego_vehicle_role_name" value="$(arg ego_vehicle_role_name)"/></node>
</launch>

其中各个参数含义如下:

  • use_sim_time:这应该被设置为 True ,以确保 ROS 使用的是 CARLA 仿真时间而不是系统时间。这个参数将使 ROS/clock topic 与 CARLA 的仿真时间同步;

  • host and port: 使用 Python 客户端连接到 CARLA 的网络设置;

  • timeout:等待与服务器成功连接的时间;

  • passivepassive 模式用于同步模式。当启用时, ROS Bridge 接将处于次要地位,必须有另一个客户端与世界联系。 ROS Bridge 将等待所有传感器接收所有预期数据;

  • town:既可以使用 CARLA 地图 (eg. ‘town01’) 或者 OpenDRIVE 格式地图文件 (ending in .xodr);

  • ego_vehicle_role_name:用于识别主车辆的角色名称,相关的主题将被创建,以便这些车辆能够被 ROS 控制;

  • register_all_sensors

    1. false: 只注册 Bridge 产生的传感器
    2. true (default):仿真中所有的传感器都会被注册
  • synchronous_mode

    1. 如果为 false :数据发布在每个 world.on_tick() 和每个 sensor.listen() 回调上;
    2. 如果为 true (默认):ROS Bridge 等待下一个 tick 之前所有的传感器消息。这可能会降低整个模拟的速度,但可以确保结果的可重复性;
  • synchronous_mode_wait_for_vehicle_control_command :在同步模式下,暂停 tick,直到完成车辆控制;

  • fixed_delta_seconds :仿真步骤之间的仿真时间(增量秒)。它必须小于0.1。请查看文档 时间细节 以了解更多相关信息;

    这个参数决定了仿真时间的前进步长,即每两帧之间的仿真时间差,这里需要首先理解仿真时间与真实时间,它们是并行的两条时间线,仿真有自己的独立时间线,它一定程度上与真实时间无关,仿真器永远是一个帧接一个帧去计算,那么两帧之间的仿真时间差决定了仿真器在仿真时间内的运行频率,而仿真器在真实时间中的运行频率则由两帧计算所需要的真实时间决定,这个跟你机器配置、仿真器效果设置都有关系。
    举例说明,假如设置了 fixed_delta_seconds=0.05,会可能发生如下情况:

    由于每一帧的处理与计算机配置、当前帧需要的计算量都有关系,因此处理该帧所需要的真实时间是有波动的,这也导致仿真时间与真实时间无法对齐。

    这个参数之所以很重要,是因为它会跟你设置的传感器频率关联,如果不能理解这个参数,后续传感器频率的配置以及传感器同步都会出问题。

4. 同步模式下使用 ROS Bridge

默认情况下,ROS Bridge 工作在同步模式。它将等待当前帧内的所有传感器数据,以确保结果的可重复性。

当以同步模式运行多个客户端时,只允许一个客户端连接全世界。除非启用被动模式,否则 ROS Bridge 将是默认情况下唯一允许连接的客户端。在 ros-bridge/carla_ros_bridge/config/settings.yaml (0.9.11版本以上的应该在 ros-bridge/carla_ros_bridge/launch/carla_ros_bridge.launch )中启用被动模式, 将使ROS Bridge 退居二线,并允许另一个客户端连接世界。另一个客户必须连接世界,否则 CARLA 将会被僵住。

如果 ROS Bridge 不是被动模式(ROS Bridge 是正在连接世界的一个客户端),那么有两种方式发送步骤控制给服务器:

  • /carla/control 主题发送 carla_msgs.CarlaControl 信息;
  • 使用 Control rqt 插件。这个插件启动一个带有简单界面的新窗口。然后,它用于管理步骤并在 /carla/control 主题中发布。在同步模式下,使用 CARLA 执行如下命令:
rqt --standalone rqt_carla_control

5. 主车辆控制

有两种模式来控制主车辆:

  • 普通模式:从 /carla/<ROLE NAME>/vehicle_control_cmd 读取命令

  • 手动模式:从 /carla/<ROLE NAME>/vehicle_control_cmd_manual 读取命令。这允许手动重写由软件栈发布的车辆控制命令。

你可以通过发布到 /carla/<ROLE NAME>/vehicle_control_manual_override 来切换这两种模式。有关使用此功能的示例,请参阅 Carla Manual Control 。

从命令行测试转向

  1. 使用主车辆启动 ROS Bridge
roslaunch carla_ros_bridge carla_ros_bridge_with_example_ego_vehicle.launch
  1. 另外一个终端发布主题到 /carla/<ROLE NAME>/vehicle_control_cmd
# Max forward throttle with max steering to the right# for ros1
rostopic pub /carla/ego_vehicle/vehicle_control_cmd carla_msgs/CarlaEgoVehicleControl "{throttle: 1.0, steer: 1.0}" -r 10

车辆的当前状态可以通过 topic /carla/<ROLE NAME>/vehicle_status 获取到。车辆的静态信息可以通过/carla/<ROLE NAME>/vehicle_info 查看到。

可以使用 AckermannDrive 信息来控制主车辆。这可以通过使用 CARLA Ackermann Control 来实现。

6. ROS API

6.1 Subscriptions

Topic Type Description
/carla/debug_marker visualization_msgs/MarkerArray Draws markers in the CARLA world.
/carla/weather_control carla_msgs/CarlaWeatherParameters Set the CARLA weather parameters
/clock rosgraph_msgs/Clock Publishes simulated time in ROS.

注意:
当使用 debug_marker 时,要注意标记可能会影响传感器发布的数据。支持的标记包括:箭头(由两个点指定)、点、立方体和线条。

6.2 Publications

Topic Type Description
/carla/status carla_msgs/CarlaStatus Read the current status of CARLA
/carla/world_info carla_msgs/CarlaWorldInfo Information about the current CARLA map.
/clock rosgraph_msgs/Clock Publishes simulated time in ROS.
/rosout rosgraph_msgs/Log ROS logging.

6.3 Services

Topic Type Description
/carla/destroy_object carla_msgs/DestroyObject.srv Destroys an object
/carla/get_blueprints carla_msgs/GetBlueprints.srv Gets blueprints
/carla/spawn_object carla_msgs/SpawnObject.srv Spawn an object

ROS Bridge 笔记(02)— carla_ros_bridge 功能包(准备 ROS环境、运行 ROS Bridge、配置 CARLA 参数、同步模式下使用 ROS Bridge、主车辆控制)相关推荐

  1. ROS Noetic入门笔记(二)ROS Noetic创建工作空间和功能包

    ROS Noetic入门笔记(一)在ubuntu20.04中安装ROS Noetic并简单测试 ROS Noetic入门笔记(二)ROS Noetic创建工作空间和功能包 ROS Noetic入门笔记 ...

  2. ROS学习笔记02:ROS架构与基础

    文章目录 一.ROS架构 二.第一个ROS例程 (一)turtlesim功能包 1.话题与服务 2.背景色参数 (二)控制乌龟运动 1.启动节点管理器 2.启动乌龟仿真器节点 3.启动键盘控制节点 三 ...

  3. 使用moveit_setup_assistant生成配置包之后,在功能包内打开终端运行roslaunch demo.launch,报错 RLException: error loading <rosp

    使用moveit_setup_assistant生成配置包之后,在功能包内打开终端运行roslaunch demo.launch,报错 RLException: error loading tag: ...

  4. 手把手教会:ROS——机器人操作系统工作空间和功能包的创建02(笔记02)

    在上一篇文章中,我已经把ROS的工作空间的创建步骤进行了介绍.接下来,我们就来看一下ROS的功能包是如何创建的. 一.功能包的组成 对于功能包我们可以理解为是一个存放在ROS工作空间中的"s ...

  5. ROS学习笔记02、ROS使用C++、Python来实现HelloWorld

    文章目录 前言 一.创建工程文件目录 二.实现helloworld 2.1.创建ROS包 2.2.C++版的HelloWorld 2.3.Python版的HelloWorld 三. 借助launch文 ...

  6. ROS系统 创建工作空间与功能包

    ROS 学习目标: 学习内容: 使用环境 操作步骤: 基本命令 二.使用步骤 创建工作空间 编译工作空间 创建功能包 使用C++执行程序 编写源文件 编辑功能包下的 Cmakelist.txt文件 修 ...

  7. 蓝桥ROS机器人系统更新和功能包安装记录

    直接系统更新会有错误: ☞ ROS域名解析问题记录(蓝桥云课ros.asc) sudo apt update 使用ros.asc如下: -----BEGIN PGP PUBLIC KEY BLOCK- ...

  8. ROS(四)——创建工作空间与功能包 Catkin编译系统

    catkin编译系统 ROS 的 Catkin 编译系统的一个特点是将程序做成 package (称为 catkin package 或者 ROS package) 的形式,可以理解成模块化. 典型的 ...

  9. ROS学习笔记——基于Prometheus无人机开源项目仿真环境配置

    本笔记基于ubuntu18.04版本,配置基于Prometheus无人机开源项目仿真环境. 需要事先在电脑上安装了ROS,Mavros功能包,其余可参考Amov教程,                  ...

  10. 越疆魔术师DEBOT(magician)机械臂ROS、MoveIt!和Gazebo功能包与ROS-I教程(melodic)

    原文地址:https://blog.csdn.net/qq_42145185/article/details/93501741 喜欢DEBOT的小伙伴,现在可以仿真玩耍机械臂啦,如果已经购买可以配合一 ...

最新文章

  1. 试试 IntelliJ IDEA 自带的高能神器!
  2. IT Monitor
  3. 全网最新Spring Boot2.5.1整合Activiti5.22.0企业实战教程<入门篇>
  4. iPhone入门教程 (视频)
  5. 内联元素,取消间隙和默认效果
  6. BeijingPeople
  7. WORD出错:UNDO之后布局错乱
  8. 编程:Python实现图片识别
  9. 超好用的笔记工具-notion入门指南
  10. JavaSE学习笔记-0225-ArrayList+案例
  11. 麦吉尔大学计算机专业介绍,麦吉尔大学计算机专业申请要求及需要提交的材料...
  12. 科技业10大错误决定
  13. 计算机类期刊投稿心得
  14. 惠普打印机驱动下载(电脑系统和打印机型号自动匹配)
  15. unity安卓接入极光推送Demo详解
  16. 数据库基础(常见面试题)
  17. python爬虫入门——13行代码制作英语翻译器教程,小白入门一点通
  18. 基于卷积神经网络进行图像分类
  19. 自动化测试 selenium 模块 webdriver使用02
  20. 兀键和6键怎么判断_σ键、π键和大π键

热门文章

  1. js基础知识总结大全
  2. 计算机无法添加本地策略组,win7本地组策略编辑器不能编辑怎么解决
  3. 论文笔记-LIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping
  4. CH(NH2)2PbI3(FAPbI3) 甲脒碘基钙钛矿 1451592-07-6
  5. python毕业设计项目源码选题(19)篮球、足球、羽毛球等运动场地预约系统毕业设计毕设作品开题报告开题答辩PPT
  6. 【URLOS应用开发基础】10分钟制作一个nginx静态网站环境应用
  7. 考研倒计时软件 终结版
  8. 服务器怎么装虚拟打印机,pdfFactory pdf虚拟打印机安装使用教程[图文]
  9. excel如何快速将英文表格翻译为中文表格
  10. 服务器维修责合同,2021年服务器维护委托合同样本.doc