查看信息
容器内:
cyber_monitor
找到tf_static
,右键(或者回车):
在transforms: +[4 items]
处右键:
在transforms: [0]
处按逗号键,
有:
record信息
在Apollo容器中输入以下指令记录数据,按ctrl
+C
停止记录
cyber_recorder record -a -i 600 -o calib_camera2lidar.record
- -a :表示对所有数据的channel进行记录;
- -i :表示记录600s为一个数据包,这是为了保证尽量所有数据都在一个包内;
- -o :指定输出文件的名称。
查看记录的数据:
cyber_recorder info calib_camera2lidar.record.0000*
其中,calib_camera2lidar.record.0000*
为存储记录数据的名称,一般后缀为时间,如calib_camera2lidar.record.0000.20231223214231
若只有一个文件,可直接输入用tab
键补全,否则,找对应时间的文件,上例中为2023.12.23.21:42:31时间点记录的数据。
lidar数据解析
- 修改数据解析脚本
如果是第一次运行数据解析功能,在/apollo/scripts/
文件夹下新建lidar_parse.sh
脚本文件,复制粘贴以下程序:
#! /bin/bash
if [ $# -lt 3 ]; then
echo "Usage: msf_simple_map_creator.sh [records folder][output folder]
[extrinsic_file] [lidar_type]"
exit 1
fi
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "${DIR}/.."
source "${DIR}/apollo_base.sh"
GNSS_LOC_TOPIC="/apollo/localization/msf_gnss"
LIDAR_LOC_TOPIC="/apollo/localization/msf_lidar"
FUSION_LOC_TOPIC="/apollo/localization/pose"
ODOMETRY_LOC_TOPIC="/apollo/sensor/gnss/odometry"
GNSS_LOC_FILE="gnss_loc.txt"
LIDAR_LOC_FILE="lidar_loc.txt"
FUSION_LOC_FILE="fusion_loc.txt"
ODOMETRY_LOC_FILE="odometry_loc.txt"
IN_FOLDER=$1
OUT_MAP_FOLDER=$2
EXTRINSIC_FILE=$3
LIDAR_TYPE=${4:-lidar}
PARSED_DATA_FOLDER="$OUT_MAP_FOLDER/parsed_data"
CLOUD_TOPIC="/apollo/sensor/$LIDAR_TYPE/PointCloud2"
#CLOUD_TOPIC="/apollo/sensor/$LIDAR_TYPE/compensator/PointCloud2"
function data_exporter() {
local BAG_FILE=$1
local OUT_FOLDER=$2
/apollo/bazel-bin/modules/localization/msf/local_tool/data_extraction/cyber_record_parser \
--bag_file $BAG_FILE \
--out_folder $OUT_FOLDER \
--cloud_topic $CLOUD_TOPIC \
--gnss_loc_topic $GNSS_LOC_TOPIC \
--lidar_loc_topic $LIDAR_LOC_TOPIC \
--fusion_loc_topic $FUSION_LOC_TOPIC \
--odometry_loc_topic $ODOMETRY_LOC_TOPIC
}
function poses_interpolation() {
local INPUT_POSES_PATH=$1
local REF_TIMESTAMPS_PATH=$2
local EXTRINSIC_PATH=$3
local OUTPUT_POSES_PATH=$4
/apollo/bazel-bin/modules/localization/msf/local_tool/map_creation/poses_interpolator \
--input_poses_path $INPUT_POSES_PATH \
--ref_timestamps_path $REF_TIMESTAMPS_PATH \
--extrinsic_path $EXTRINSIC_PATH \
--output_poses_path $OUTPUT_POSES_PATH
}
cd $IN_FOLDER
mkdir -p $OUT_MAP_FOLDER
mkdir -p $PARSED_DATA_FOLDER
for item in $(ls -l *.record* | awk '{print $9}'); do
SEGMENTS=$(echo $item | awk -F'.' '{print NF}')
DIR_NAME=$(echo $item | cut -d . -f ${SEGMENTS})
DIR_NAME="${PARSED_DATA_FOLDER}/${DIR_NAME}"
mkdir -p ${DIR_NAME}
data_exporter "${item}" "${DIR_NAME}"
poses_interpolation "${DIR_NAME}/pcd/${ODOMETRY_LOC_FILE}"
"${DIR_NAME}/pcd/pcd_timestamp.txt" "${EXTRINSIC_FILE}"
"${DIR_NAME}/pcd/corrected_poses.txt"
done
echo "Done."
注意:如果在室内标定,由于没有gps信号、无运动,所以需要将点云的topic改为原始的激光
topic( /apollo/sensor/lidar/PointCloud2 )。数据解析的脚本提供的是一个数据解析运行
的模板,后续的针对不同类型的数据解析,需要根据消息类型等信息及时修改此脚本。
- 执行数据解析
- 运行数据解析脚本文件
bash scripts/lidar_parse.sh \
> /apollo/data/bag/calib_camera2lidar \
> /apollo/data/bag/calib_camera2lidar \
> /apollo/modules/calibration/data/mkz_example/camera_params \
> /apollo/modules/calibration/data/mkz_example/velodyne_params/velodyne64_novatel_extrinsics_example.yaml \
> lidar
#注意:此处的雷达外参文件不起作用,只是指令结构需要
# 此处的mkz_example为车辆名称,可以换为自己所用的车辆名称
会生成/apollo/data/bag/calib_camera2lidar/parsed_data/
文件夹,里面存放了Lidar点云的
pcd文件,用于之后标定流程。
手动控车
在Apollo容器中使用命令:
bash scripts/canbus_teleop.sh
控制方法:
I0122 17:22:30.044783 509383 scheduler.cc:55] [teleop]create croutine: teleop_/apollo/canbus/chassis
Teleop:
Reading from keyboard now.
---------------------------
Use arrow keys to drive the car.
===================== KEYBOARD MAP ===================
HELP: [h] |
Set Action: [m]+Num
0 RESET ACTION
1 START ACTION
2 VIN_REQ ACTION
-----------------------------------------------------------
Set Gear: [G]+Num
0 GEAR_NEUTRAL
1 GEAR_DRIVE
2 GEAR_REVERSE
3 GEAR_PARKING
4 GEAR_LOW
5 GEAR_INVALID
6 GEAR_NONE
-----------------------------------------------------------
Throttle/Speed up: [W] |
Brake/Speed down: [S] |
Steer LEFT: [A] | Steer RIGHT: [D]
Parking Brake: [P] | Emergency Stop [E]
Left/Right Lamp: [Q] | Low beam [L]
-----------------------------------------------------------
Exit: Ctrl + C, then press enter to normal terminal
===========================================================