技术文档丨Apollo Cyber RT 开发者工具
Apollo Cyber RT是一个专门为自动驾驶场景开发的开源运行时框架。基于集中计算模型,在性能、延迟和数据吞吐量方面都作了深度优化。
以下,ENJOY
Apollo Cyber RT框架提供了一系列有用的日常开发工具,包括一个可视化工具cyber_visualizer和两个命令行工具cyber_monitor和cyber_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是用于显示Apollo Cyber RT中的信道数据的可视化工具。
username@computername:~$: source /your-path-to-apollo-install-dir/cyber/setup.bash
username@computername:~$: cyber_visualizer
<左右滑动以查看完整代码>
在启动cyber_visualizer之后,您将看到以下界面:
当数据在Apollo Cyber RT中通过通道时,所有通道的列表显示在通道名称下,如下图所示。例如,您可以使用Apollo Cyber RT的record tool(cyber_recorder)从另一个终端重放数据,那么cyber_visualizer将接收所有活动通道的信息(来自重放数据)并显示出来。
通过单击工具栏中的选项,可以启用参考网格、显示点云、添加图像或同时显示多个相机的数据。如果启用了显示网格选项,可以通过双击通道名称下面的网格列表的颜色项来设置网格的颜色。默认的颜色是灰色。您还可以编辑网格数的值来调整网格中的单元格数量。对于点云或图像,您可以通过其通道名称子项和动作子项选择源通道来播放或停止来自对应通道的数据。如下图所示,同时显示按钮部分三个摄像头的通道数据和顶部部分一个点云通道数据。
要调整3D点云场景中的虚拟相机,可以右键单击点云显示部分。将弹出一个对话框,如下图所示。
点云场景支持两种类型的相机:自由和目标。(从上面的弹出对话框中选择类型)
自由类型相机:对于点云场景中的这类相机,你可以通过按住鼠标左键或右键移动来改变相机的姿态。要改变相机的音高,可以滚动鼠标滚轮。
目标类型相机:对于点云场景中的这类相机,要改变相机的视角,可以按住鼠标左键,然后移动它。改变相机到观察点的距离默认的观察点是坐标系统原点(0,0,0),可以滚动鼠标滚轮。
还可以在对话框中直接修改相机信息,改变点云场景中相机的观测状态。“设置”项是对话框中的Step值。
将鼠标放在相机通道的图像上,双击左键,可以在左侧菜单栏上高亮相应的数据通道。右键点击图片,弹出删除相机通道的菜单。
播放和暂停按钮:当点击播放按钮时,将显示所有频道。而当点击暂停按钮时,所有频道也会停止播放。
命令行工具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_visualizer。它通过拓扑自动收集所有通道的信息,并将它们显示在两列中(通道名称通道数据类型)。通道信息的默认显示为红色。但是,如果有数据流经a通道,则通道的相应行显示为绿色。如下图所示。
一般命令
ESC | q key ---- Exit
Backspace ---- Back
h | H ---- Show help page
拓扑和信道的通用命令
PageDown | Ctrl+d --- Next
PageUp | Ctrl+u --- Previous
Up, down or w, s keys ---- Move the current highlight line up and down
Right arrow or d key ---- Enter highlight line, display highlighted line data in detail
Left arrow or a key ------ Return to the previous layer from the current
Enter key ----- Same as d key
<左右滑动以查看完整代码>
仅用于拓扑的命令
f | F ----- Display frame rate
t | T ----- Display channel message type
Space ----- Close|Open channel (only valid for channels with data arrival; yellow color after channel is closed)
<左右滑动以查看完整代码>
仅用于通道的命令
i | I ----- Display channel Reader and Writer information
b | B ------ Display channel message content
<左右滑动以查看完整代码>
查看通道中的重复数据字段
n | N ---- Repeat the next data in the domain
m | M ---- Repeat one data on the domain
<左右滑动以查看完整代码>
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 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)
-m, --segment-size <MB> record segmented every n megabyte(s)
-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
-d, --delay <seconds> play delayed n seconds
-p, --preload <seconds> play after trying to preload n second(s)
-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
(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
(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
Record a record file
<左右滑动以查看完整代码>
记录一个记录文件
$ 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转换成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转换成record file。
$ 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.
© 2020 GitHub, Inc.
<左右滑动以查看完整代码>
以上是"Apollo Cyber RT 开发者工具"的全部内容,更多话题讨论、技术交流可以扫描下方二维码添加『Apollo小哥哥』为好友,进开发者交流群。