ROS Bridge 笔记(03)— carla_spawn_objects 功能包(配置传感器设置、生成车辆、重新生成车辆、生成传感器)

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

carla_spawn_objects 包用于生成角色(车辆、传感器、步行者)并将传感器附加到它们。调用 carla_ros_bridge 生成物体的service 完成,实际使用时,需要在 config 中参考给定的 json 文件新建自己的车辆和传感器配置,并创建对应的 launch 文件即可。

1. 配置和传感器设置

目标及其附加的传感器通过一个 .json 文件定义。该文件的默认位置在 carla_spawn_objects/config/objects.json 中。要使用其它文件可以通过在启动包时,通过私有 ROS 参数 objects_definition_file 传递文件的路径:

roslaunch carla_spawn_objects carla_spawn_objects.launch objects_definition_file:=path/to/objects.json

可以在 ros-bridge 仓库中找到一个例子,也可以按照下面的大纲创建你自己的配置和传感器设置:

{
"objects":
    [
        {
            "type": "<SENSOR-TYPE>",
            "id": "<NAME>",
            "spawn_point": {"x": 0.0, "y": 0.0, "z": 0.0, "roll": 0.0, "pitch": 0.0, "yaw": 0.0},
            <ADDITIONAL-SENSOR-ATTRIBUTES>
        },
        {
            "type": "<VEHICLE-TYPE>",
            "id": "<VEHICLE-NAME>",
            "spawn_point": {"x": -11.1, "y": 138.5, "z": 0.2, "roll": 0.0, "pitch": 0.0, "yaw": -178.7},
            "sensors":
                [
                <SENSORS-TO-ATTACH-TO-VEHICLE>
                ]
        }
        ...
    ]
}

注意: 当定义坐标时,ROS 使用的时右手坐标系。

所有传感器属性都按照蓝图库 蓝图库 中的描述定义。

  • sensor_tick 参数

官方解释:Simulation seconds between sensor captures (ticks) 其倒数也就是传感器输出频率,实际使用时要注意结合 fixed_delta_seconds 使用,也就是仿真步长时间。仿真与真实的区别在于真实时间是连续的,而仿真时间是离散的,仿真器只会计算时隔 fixed_delta_seconds 的帧,也就是说,将 sersor_tick 设置为小于 fixed_delta_seconds (传感器频率高于仿真器频率)是没有太大意义的,因为会导致仿真一步计算需要计算多帧该传感器数据,并且在同一时刻发出,用户也无法获取每个传感器数据的精确时间,如下图所示:

ee

可以认为,fixed_delta_seconds 要小于你配置的所有传感器的 sersor_tick ,也就是仿真器频率要大于等于所有传感器频率才有意义,在上图的案例中,建议将 fixed_delta_seconds 设置为 0.01s,但是这样会导致计算量增加,而且由于目前 PythonROS 有些 bug,会导致计算更慢,此外,使用大量高频率传感器会让仿真器计算量大幅增加,尤其是图像传感器,因此实际使用时,sersor_tick 需要酌情而定,如果发现仿真器跑得太慢,可以考虑减少图像传感器或者降低其输出频率。

2. 生成车辆

如果没有指定生成车辆的位置,那么车辆位置将随机生成。要定义车辆的生成位置,有两个方法:

  • 将所需的位置传递给 ROS 参数 spawn_point_<VEHICLE-NAME><VEHICLE-NAME> 将是你在 .json 文件中给出的车辆 id
roslaunch carla_spawn_objects carla_spawn_objects.launch \
spawn_point_<VEHICLE-NAME>:=x,y,z,roll,pitch,yaw

  • .json 文件中定义初始位置
{
"type": "vehicle.*",
"id": "ego_vehicle",
"spawn_point": {"x": -11.1, "y": 138.5, "z": 0.2, "roll": 0.0, "pitch": 0.0, "yaw": -178.7},
}

3. 再次生成车辆

通过发布到主题 /carla/<ROLE NAME>/<CONTROLLER_ID>/initialpose,车辆可以在仿真过程中再次生成到不同的位置。要使用这个功能有以下两种方法:

  • 将一个 actor.pseudo.control pseudo-actor 附加到 .json 文件中的车辆上。它的 id 值应该与传递给用于发布到主题的<CONTROLLER_ID> 值相同:
{
"type": "vehicle.*",
"id": "ego_vehicle",
"sensors":
[
    {
    "type": "actor.pseudo.control",
    "id": "control"
    }
]
}
  • 启动 set_inital_pose 节点,<CONTROLLER_ID> 将作为参数传递给 ROS 参数 controller_id (默认= ‘control’):
roslaunch carla_spawn_objects set_initial_pose.launch controller_id:=<CONTROLLER_ID>

4. 生成传感器

  • 传感器的初始位置应该直接在 .json 文件中定义,如上所示用于车辆。

  • 附着在车辆上的传感器的位置被认为是相对于车辆的。

传感器可以生成在现有的车辆上,可以使用下面的方法:

  1. .json 中定义一个假的传感器 sensor.pseudo.actor_list ,这将使我们能够访问已经存在的角色对象。
...
{
    "type": "sensor.pseudo.actor_list",
    "id": "actor_list"
},
  1. 定义其它需要的传感器
  2. spawn_sensors_only 参数设置为 True 并启动节点 。这将检查是否有一个与 .json 文件中指定的 id 和类型相同的 actor 已经激活,如果有,则将传感器附加到这个 actor 上。
roslaunch carla_spawn_objects carla_spawn_objects.launch spawn_sensors_only:=True
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wohu007

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值