apollo定位对比仿真工具msf_visualizer的使用
1.使用流程
1. 事先准备
代码及demo数据包,该定位显示的原理就是接收最终定位的topic,并把它显示出来,因为需要在地图上显示,所以还需要加载地图。
2. 配置定位模块
为了使定位模块正确运行,需要对地图路径和传感器外参进行配置。假设下载的定位数据的所在路径为DATA_PATH。
在进行以下步骤前,首先确定你在docker容器中。
2.1 配置传感器外参
将定位数据中的传感器外参拷贝至指定文件夹下, 目前NDT定位模块与MSF定位模块使用相同外参路径。
cp DATA_PATH/params/ant_imu_leverarm.yaml /apollo/modules/localization/msf/params/gnss_params/
cp DATA_PATH/params/velodyne64_novatel_extrinsics_example.yaml /apollo/modules/localization/msf/params/velodyne_params/
cp DATA_PATH/params/velodyne64_height.yaml /apollo/modules/localization/msf/params/velodyne_params/
在/apollo/modules/localization/conf/localization.conf
中添加传感器外参文件配置,以覆盖默认值。
#The lidar extrinsics file
–lidar_extrinsics_file=/apollo/modules/localization/msf/params/velodyne_params/velodyne64_novatel_extrinsics_example.yaml
各个外参的意义
- ant_imu_leverarm.yaml: 杆臂值参数,GNSS天线相对Imu的距离
- velodyne64_novatel_extrinsics_example.yaml: Lidar相对Imu的外参
- velodyne64_height.yaml: Lidar相对地面的高度
2.2 配置地图路径
在/apollo/modules/localization/conf/localization.conf
中添加关于地图路径的配置
#Redefine the map_dir in global_flagfile.txt
–map_dir=DATA_PATH
这将会覆盖global_flagfile.txt中的默认值。
如果不知道地图默认路径,运行第5步可视化时,查看/data/log/localization_visualizer.INFO 文件,会看到如下所示:imag_resolution_path即为地图路径
当前地图默认路径为:/apollo/modules/map/data/sunnyvale_big_loop/local_map
2.3 修改Topic名称
系统默认为支持velodyne 64线,128线lidar, 因此为区分不同设备数据,采用不同的topic名称。因此,在启动之前需要设置正确的lidar topic名称。在/apollo/modules/localization/conf/localization.conf
中添加lidar topic名称,以覆盖默认值。
#The pointcloud topic name.
–lidar_topic=/apollo/sensor/velodyne64/compensator/PointCloud2
(可选)另外,对于定位可视化工具的使用,同样需要配置相应的topic名称。修改文件/apollo/modules/localization/dag/dag_streaming_msf_visualizer.dag
中的channel值为:
channel: /apollo/sensor/velodyne64/compensator/PointCloud2
3. 运行定位模块
如果第4步使用的record包里有
/apollo/localization/pose数据,/apollo/localization/msf_gnss数据,或者其它需要对比的最终定位数据,则无需启动定位包。
如果只有原始传感器输入数据,需要定位包输出最终结果,则需要根据需要启动定位程序:
cyber_launch start /apollo/modules/localization/launch/msf_localization.launch
4. 播放演示record
cyber_recorder play -f docs/demo_guide/demo_3.5.record -loop
5. 可视化定位结果
NDT定位模块使用与MSF定位模块相同的可视化工具。
运行可视化工具
./scripts/localization_online_visualizer.sh
问题解决:
如果运行时有无法加载canberra-gtk-module插件的错误,则需要安装对应插件。
指令如下:
sudo apt-get install libcanberra-gtk3-module
该可视化工具首先根据MSF定位地图生成用于可视化的缓存文件,存放在/apollo/data/map_visual目录下,如果没有文件,修改localization.config文件
#The tem folder for localziation visualziation
–map_visual_dir=/apollo/data/map_visual
然后接收以下topic并进行可视化绘制。
- /apollo/sensor/velodyne64/compensator/PointCloud2
- /apollo/localization/pose
- /apollo/localization/msf_gnss
- /apollo/localization/msf_lidar
可视化效果如下
2,如果没有点云数据的情况
由于该可视化工具默认是参考激光时间戳进行位置对比,所以当没有激光点云数据时,可视化工具无法使用,如果需要使用,需要修改代码,具体修改方法如下:
1,修改参考时间戳:
修改
/apollo/modules/localization/msf/local_tool/local_visualization/engine/visualization_manager.cc,具体修改方式如下
void VisualizationManager::DoVisualize() {
while (!(stop_visualization_.load())) {
std::this_thread::sleep_for(std::chrono::milliseconds(10));
// if (!lidar_frame_buffer_.IsEmpty()) {
// if (lidar_frame_buffer_.BufferSize() > 5)
{
LidarVisFrame lidar_frame;
lidar_frame.timestamp = start_time;
// bool pop_success = lidar_frame_buffer_.PopOldestMessage(&lidar_frame);
// if (!pop_success) {
// continue;
//}
LocalizationMsg lidar_loc;
LocalizationMsg fusion_loc;
bool lidar_query_success = lidar_loc_info_buffer_.QueryMessage(
lidar_frame.timestamp, &lidar_loc, 0);
添加参考时间函数,并在visualization_manager.cc中添加函数及变量声明:
void VisualizationManager::AddStartTime(
const LocalizationMsg &gnss_loc_msg) {
start_time=gnss_loc_msg.timestamp;
}
添加函数定义:
void AddLidarFrame(const LidarVisFrame &lidar_frame);
void AddStartTime(const LocalizationMsg &gnss_loc_msg);//添加部分
添加变量定义:
private:
double start_time; //添加部分
在online_visualizer_component.h文件中添加引用
void OnlineVisualizerComponent::OnGNSSLocalization(
const std::shared_ptr<LocalizationEstimate> &msg) {
******
****
VisualizationManager::GetInstance().AddStartTime(gnss_loc_msg);//添加部分
VisualizationManager::GetInstance().AddGNSSLocMessage(gnss_loc_msg);
}
后期如果有其他定位结果对比,修改相应topic即可pollo定位仿真工具的一些坑