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定位仿真工具的一些坑

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
root@in_dev_docker:/apollo# bash scripts/msf_create_lossless_map.sh /apollo/hdmap/pcd_apollo/ 50 /apollo/hdmap/ /apollo/bazel-bin WARNING: Logging before InitGoogleLogging() is written to STDERR E0715 22:08:35.399576 6436 lossless_map_creator.cc:162] num_trials = 1 Pcd folders are as follows: /apollo/hdmap/pcd_apollo/ Resolution: 0.125 Dataset: /apollo/hdmap/pcd_apollo Dataset: /apollo/hdmap/pcd_apollo/ Loaded the map configuration from: /apollo/hdmap//lossless_map/config.xml. Saved the map configuration to: /apollo/hdmap//lossless_map/config.xml. Saved the map configuration to: /apollo/hdmap//lossless_map/config.xml. E0715 22:08:35.767315 6436 lossless_map_creator.cc:264] ieout_poses = 1706 Failed to find match for field 'intensity'. Failed to find match for field 'timestamp'. E0715 22:08:35.769896 6436 velodyne_utility.cc:46] Un-organized-point-cloud E0715 22:08:35.781770 6436 lossless_map_creator.cc:275] Loaded 245443D Points at Trial: 0 Frame: 0. F0715 22:08:35.781791 6436 base_map_node_index.cc:101] Check failed: false *** Check failure stack trace: *** scripts/msf_create_lossless_map.sh: line 11: 6436 Aborted (core dumped) $APOLLO_BIN_PREFIX/modules/localization/msf/local_tool/map_creation/lossless_map_creator --use_plane_inliers_only true --pcd_folders $1 --pose_files $2 --map_folder $IN_FOLDER --zone_id $ZONE_ID --coordinate_type UTM --map_resolution_type single root@in_dev_docker:/apollo# bash scripts/msf_create_lossless_map.sh /apollo/hdmap/pcd_apollo/ 50 /apollo/hdmap/
07-16
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值