Apollo Cyber RT开发者工具

Apollo Cyber RT开发者工具

Apollo Cyber RT框架自带一系列用于日常开发的实用工具,包括一个可视化工具(cyber_visualizer)和两个命令行工具(cyber_monitorcyber_recorder)。

注意:使用这些工具需要Apollo的docker环境,请按照Apollo的wiki进入docker环境

Apollo Cyber RT的所有工具都依赖于Apollo Cyber RT库,因此,在使用任何Apollo Cyber RT工具之前,必须先获取setup.bash文件用于环境设置,如下所示:

username@computername:~$: source /your-path-to-apollo-install-dir/cyber/setup.bash

Cyber_visualizer


安装和运行

cyber_visualizer是一个可视化工具,用于显示Apollo Cyber RT的通道数据。

username@computername:~$: source /your-path-to-apollo-install-dir/cyber/setup.bash
username@computername:~$: cyber_visualizer

cyber_visualizer的用法

  • 在启动cyber_visualizer之后,将会看到如下界面:
    interface
  • 当数据流经Apollo Cyber RT中的通道时,所有通道的列表都显示在“ChannelNames”下,如下如图所示。例如,你可以使用Apollo Cyber RT的录像工具(cyber_recorder)从另一个终端重放数据,然后cyber_visualizer将接收所有活动通道的信息(来自于重放数据)并显示出来。

    channel information

  • 通过点击工具栏中的选项,可以启用参考网格、显示点云、添加图像或同时显示多个摄像机的数据。如果你启用了Show Grid选项,你可以通过双击ChannelNames下面的Grid列表的Color项来设置网格的颜色。默认的颜色是灰色。你还可以编辑CellCount的值来调整网格中的单元格数量。对于点云或图像,你可以通过它的ChannelName子项和Action子项选择来源通道,以便于播放或停止相应通道的数据。如下图所示,同时显示按钮区域的三个摄像机的通道数据和顶部区域的一个点云通道数据。

    visualization

  • 要调整3D点云场景中的虚拟摄像机,你可以右键单击点云的显示区域。将弹出一个对话框,如下图所示。

    visualization

    点云场景支持两种摄像机:自由和目标。(从上面弹出的对话框选择类型)

    • 自由型摄像机:对于点云场景中的此类摄像机,你可以通过按住鼠标左键或右键来改变摄像机的姿态并移动它。若要改变摄像机的高度,你可以滚动鼠标滚轮。
    • 目标型摄像机:对于点云场景中的此类摄像机,若要改变摄像机的视角,你可以按住鼠标左键,然后移动鼠标。若要改变摄像机到观测点的距离(默认的观测点是坐标系的原点(0,0,0)),你可以滚动鼠标滚轮。

    你还可以在对话框中直接修改摄像机的信息,以便于改变点云场景中的摄像机的观测状态。“Step”项是对话框中的步进值。

    将鼠标放在摄像机通道的图像上,你可以双击左键,以便于在左侧菜单栏上高亮相应的数据通道。右键单击图像,弹出删除摄像机通道的菜单。

    播放和暂停按钮:当点击Play按钮时,将显示所有通道。当点击Pause按钮时,所有通道将停止显示在工具上。

Cyber_monitor


安装和运行

命令行工具cyber_monitor可以在终端中清楚地显示Apollo Cyber RT的实时通道列表信息。

username@computername:~$: source /your-path-to-apollo-install-dir/cyber/setup.bash
username@computername:~$: cyber_monitor

实用命令

显示帮助信息

使用-h选项可以查看cyber_monitor的帮助信息:

username@computername:~$: cyber_monitor -h

指定通道

通过-c选项,你可以使cyber_monitor只监控指定的通道,例如:

username@computername:~$: cyber_monitor -c ChannelName

熟悉cyber_monitor的用户界面

启动命令行工具之后,你会注意到它类似于cyber_visualizer。它会通过拓扑自动收集所有通道的信息,并且以两列显示这些信息(通道名称和通道数据类型)。

通道信息的默认显示为红色。但是,如果有数据流经一个通道,则这个通道的相应行会显示为绿色。如下图所示:

monitor

cyber_monitor的用法

常用命令

ESC | q key ---- 退出
Backspace ---- 后退
h | H ---- 显示帮助页面

拓扑和通道的常用命令

PageDown | Ctrl+d --- 下一个
PageUp | Ctrl+u --- 上一个
Up, down or w, s keys ---- 上下移动当前的高亮行
Right arrow or d key ---- 进入高亮行,显示高亮行的详细数据
Left arrow or a key ------ 从当前界面返回上一层
Enter key ----- 等同于d键

仅用于拓扑的命令

f | F ----- 显示帧率
t | T ----- 显示通道消息类型Display channel message type
Space ----- 关闭|打开通道(仅对数据到达的通道有效;通道关闭后为黄色)

仅用于通道的命令

i | I ----- 显示通道的读取器和写入器的信息
b | B ------ 显示通道的消息内容

查看通道中的重复数据字段

n | N ---- 在域中重复下一条数据
m | M ---- 在域中重复一条数据

Cyber_recorder


cyber_recorder是Apollo Cyber RT提供的一个录像/重放工具。它提供了许多有用的功能,包括记录录像文件、重放录像文件、分割录像文件、查看录像文件的信息等。

安装和运行

启动cyber_recorder

$ source /your-path-to-apollo-install-dir/cyber/setup.bash
$ cyber_recorder
usage: cyber_recorder <command>> [<args>]
The cyber_recorder commands are:
    info                               Show information of an exist record. # 显示已有录像的信息
    play                               Play an exist record.                # 播放已有的录像
    record                             Record same topic.                   # 记录相同的主题
    split                              Split an exist record.               # 分割已有的录像
    recover                            Recover an exist record.             # 恢复已有的录像

cyber_recorder的命令

  • 若要查看录像文件的信息:
$ cyber_recorder info -h
usage: cyber_recorder info [options]
    -h, --help                show help message # 显示帮助信息
  • 若要记录一个录像文件:
$ cyber_recorder record -h
usage: cyber_recorder record [options]
    -o, --output <file>                output record file                    # 输出录像文件
    -a, --all                          all channels                          # 所有通道
    -c, --channel <name>               channel name                          # 通道名称
    -i, --segment-interval <seconds>   record segmented every n second(s)    # 每隔n秒分段一次录像
    -m, --segment-size <MB>            record segmented every n megabyte(s)  # 每隔n兆字节分段一次录像
    -h, --help                         show help message                     # 显示帮助消息
  • 若要播放一个录像文件:
$ cyber_recorder play -h
usage: cyber_recorder play [options]
    -f, --file <file>            input record file                          # 输入录像文件
    -a, --all                play all                                       # 播放所有
    -c, --white-channel <name>        only play the specified channel       # 只播放指定的通道
    -k, --black-channel <name>        not play the specified channel        # 不播放指定的通道
    -l, --loop                loop play                                     # 循环播放
    -r, --rate <1.0>            multiply the play rate by FACTOR            # 将播放速率乘以因数
    -b, --begin <2018-07-01 00:00:00>    play the record begin at           # 从指定时刻播放录像
    -e, --end <2018-07-01 00:01:00>    play the record end at               # 播放录像至指定时刻
    -s, --start <seconds>        play started at n seconds                  # n秒后开始播放
    -d, --delay <seconds>        play delayed n seconds                     # 播放延迟n秒
    -p, --preload <seconds>        play after trying to preload n second(s) # 尝试预加载n秒后播放
    -h, --help                show help message                             # 显示帮助消息
  • 若要分割一个录像文件:
$ cyber_recorder split -h
usage: cyber_recorder split [options]
    -f, --file <file>                  input record file                 # 输入录像文件
    -o, --output <file>                output record file                # 输出录像文件
    -a, --all                          all channels                      # 所有通道
    -c, --white-channel <name>         only split the specified channel  # 只分割指定通道
    -k, --black-channel <name>         not split the specified channel   # 不分割指定通道
    -b, --begin <2018-07-01 00:00:00>  begin at assigned time            # 在指定时刻开始(以字符串的形式,例如:“2018-07-01 00:00:00”)
                                       (in the form of String, e.g. "2018-07-01 00:00:00")
    -e, --end <2018-07-01 01:00:00>    end at assigned time              # 在指定时刻结束(以字符串的形式,例如:“2018-07-01 00:00:00”)
                                       (in the form of String, e.g. "2018-07-01 00:00:00")
  • 若要修复一个录像文件:
$ cyber_recorder recover -h
usage: cyber_recorder recover [options]
    -f, --file <file>                  input record file   # 输入录像文件
    -o, --output <file>                output record file  # 输出录像文件

使用cyber_recorder的示例

查看录像文件详情

$ cyber_recorder info demo.record
record_file:    demo.record
version:        1.0
duration:       19.995227 Seconds
begin_time:     2018-04-17 06:25:36
end_time:       2018-04-17 06:25:55
size:           28275479 Bytes (26.965598 MB)
is_complete:    true
message_number: 15379
channel_number: 16
channel_info:   /apollo/localization/pose                             2000 messages : apollo.localization.LocalizationEstimate
                /tf                                                   4000 messages : apollo.transform.TransformStampeds
                /apollo/control                                       2000 messages : apollo.control.ControlCommand
                /apollo/sensor/gnss/odometry                          2000 messages : apollo.localization.Gps
                /apollo/canbus/chassis                                2000 messages : apollo.canbus.Chassis
                /apollo/sensor/gnss/imu                               1999 messages : apollo.drivers.gnss.Imu
                /apollo/sensor/gnss/rtk_obs                             41 messages : apollo.drivers.gnss.EpochObservation
                /apollo/sensor/gnss/ins_stat                            20 messages : apollo.drivers.gnss.InsStat
                /apollo/sensor/gnss/best_pose                           20 messages : apollo.drivers.gnss.GnssBestPose
                /apollo/perception/obstacles                           400 messages : apollo.perception.PerceptionObstacles
                /apollo/prediction                                     400 messages : apollo.prediction.PredictionObstacles
                /apollo/sensor/conti_radar                             270 messages : apollo.drivers.ContiRadar
                /apollo/planning                                       200 messages : apollo.planning.ADCTrajectory
                /apollo/monitor/static_info                              1 messages : apollo.data.StaticInfo
                /apollo/sensor/gnss/rtk_eph                             25 messages : apollo.drivers.gnss.GnssEphemeris
                /apollo/monitor                                          3 messages : apollo.common.monitor.MonitorMessage

记录录像文件

$ cyber_recorder record -a
[RUNNING]  Record :     total channel num : 1  total msg num : 5
...

重放录像文件

$ cyber_recorder play -f 20180720202307.record
file: 20180720202307.record, chunk_number: 1, begin_time: 1532089398663399667, end_time: 1532089404688079759, message_number: 75
please wait for loading and playing back record...
Hit Ctrl+C to stop replay, or Space to pause.
[RUNNING]  Record Time: 1532089404.688080    Progress: 6.024680 / 6.024680
play finished. file: 20180720202307.record

rosbag_to_record


rosbag_to_record是一个工具,可以将rosbag转换成Apollo Cyber RT支持的录像文件。这个工具目前支持下列通道:

/apollo/perception/obstacles
/apollo/planning
/apollo/prediction
/apollo/canbus/chassis
/apollo/control
/apollo/guardian
/apollo/localization/pose
/apollo/perception/traffic_light
/apollo/drive_event
/apollo/sensor/gnss/odometry
/apollo/monitor/static_info
/apollo/monitor
/apollo/canbus/chassis_detail
/apollo/control/pad
/apollo/navigation
/apollo/routing_request
/apollo/routing_response
/tf
/tf_static
/apollo/sensor/conti_radar
/apollo/sensor/delphi_esr
/apollo/sensor/gnss/best_pose
/apollo/sensor/gnss/imu
/apollo/sensor/gnss/ins_stat
/apollo/sensor/gnss/rtk_eph
/apollo/sensor/gnss/rtk_obs
/apollo/sensor/velodyne64/compensator/PointCloud2

安装和运行

启动rosbag_to_record

$ source /your-path-to-apollo-install-dir/cyber/setup.bash
$ rosbag_to_record
Usage:
  rosbag_to_record input.bag output.record

示例

我们可以将Apollo2.5 demo bag转换成录像文件。

$ rosbag_to_record demo_2.5.bag demo.record
record_file:    demo.record
version:        1.0
duration:       19.995227 Seconds
begin_time:     2018-04-17 06:25:36
end_time:       2018-04-17 06:25:55
size:           28275479 Bytes (26.965598 MB)
is_complete:    true
message_number: 15379
channel_number: 16
channel_info:   /apollo/localization/pose                             2000 messages : apollo.localization.LocalizationEstimate
                /tf                                                   4000 messages : apollo.transform.TransformStampeds
                /apollo/control                                       2000 messages : apollo.control.ControlCommand
                /apollo/sensor/gnss/odometry                          2000 messages : apollo.localization.Gps
                /apollo/canbus/chassis                                2000 messages : apollo.canbus.Chassis
                /apollo/sensor/gnss/imu                               1999 messages : apollo.drivers.gnss.Imu
                /apollo/sensor/gnss/rtk_obs                             41 messages : apollo.drivers.gnss.EpochObservation
                /apollo/sensor/gnss/ins_stat                            20 messages : apollo.drivers.gnss.InsStat
                /apollo/sensor/gnss/best_pose                           20 messages : apollo.drivers.gnss.GnssBestPose
                /apollo/perception/obstacles                           400 messages : apollo.perception.PerceptionObstacles
                /apollo/prediction                                     400 messages : apollo.prediction.PredictionObstacles
                /apollo/sensor/conti_radar                             270 messages : apollo.drivers.ContiRadar
                /apollo/planning                                       200 messages : apollo.planning.ADCTrajectory
                /apollo/monitor/static_info                              1 messages : apollo.data.StaticInfo
                /apollo/sensor/gnss/rtk_eph                             25 messages : apollo.drivers.gnss.GnssEphemeris
                /apollo/monitor                                          3 messages : apollo.common.monitor.MonitorMessage
Conversion finished! Took 0.505623051 seconds in total.