Apollo:源码分析之cyber/service_discovery/warehouse

在这里插入图片描述

分析

本文中我们分析WarehouseBase,SingleValueWarehouse,MultiValueWarehouse这三个类。

首先,我们看下它们之间的关系:
在这里插入图片描述

WarehouseBase

WarehouseBase是一个纯虚类,里面定义了一系列的接口
在这里插入图片描述
这些接口可以分为如下几类:

标签说明
添加
  • virtual bool Add(uint64_t key, const RolePtr& role, bool ignore_if_exist) = 0;
删除
  • virtual void Clear() = 0;
  • virtual void Remove(uint64_t key) = 0;
  • virtual void Remove(uint64_t key, const RolePtr& role) = 0;
  • virtual void Remove(const proto::RoleAttributes& target_attr) = 0;
查询
  • virtual std::size_t Size() = 0;
  • virtual bool Search(…
  • virtual void GetAllRoles(

SingleValueWarehouse

我们来先看下SingleValueWarehouse。

  • 第一点,它继承了WarehouseBase
    在这里插入图片描述
  • 它本质上来说,只有一个成员:
    • 可以看到它是一个map,它相当于一个记事簿,里面记录了一些角色(Warehouse可以翻译为仓库)
    • 推测上面接口中所有的增删改都是针对这个记事簿来做的
成员说明
RoleMap roles_;
  • using RolePtr = std::shared_ptr< RoleBase>;
  • using RoleMap = std::unordered_map< uint64_t, RolePtr>;

我们来看下增:

在这里插入图片描述
在这里插入图片描述
可以看到功能就是:使用身份证key把role注册到仓库中

  • 一个key只对应一个role
  • 一个role可能有多个key
  • (默认如果key已经存在,那么就不允许注册,如果将ignore_if_exist设置为false,那么如果key已经存在,那么替换为新role)

通过Size()可以查询到当前仓库中已经放置了多少个角色(或者说身份证更合适???)
在这里插入图片描述

还可以通过GetAllRoles()获取仓库中的所有角色或者角色属性
在这里插入图片描述

其他的接口类似

接口说明
bool Search(uint64_t key) overridekey对应的角色是否存在
bool Search(uint64_t key, RolePtr* first_matched_role) override;key对应的角色是否存在,如果存在,那么将匹配的角色通过first_matched_role返回
bool Search(uint64_t key, proto::RoleAttributes* first_matched_role_attr) override;key对应的角色是否存在,如果存在,那么将匹配的角色属性通过first_matched_role返回
bool Search(uint64_t key, std::vector< RolePtr>* matched_roles) override;key对应的角色是否存在,如果存在,那么将匹配的角色通过matched_roles返回(实际上,只有一个)
bool Search(uint64_t key,std::vector< proto::RoleAttributes>* matched_roles_attr) override;key对应的角色是否存在,如果存在,那么将匹配的角色属性通过matched_roles_attr返回(实际上,只有一个)

MultiValueWarehouse

然后我们看下MultiValueWarehouse,它跟几乎一模一样,只是它的记事本是unordered_multimap的

在这里插入图片描述
map不允许容器中有重复key值元素 , multimap允许容器中有重复key值元素

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
根据提供的信息,执行脚本 `scripts/msf_create_lossless_map.sh` 时出现了错误。具体的错误信息如: ``` 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 ``` 这段错误信息表明在执行脚本时发生了一个检查失败的情况。错误的具体位置在 `base_map_node_index.cc:101`。可能的原因包括: 1. 数据不匹配:脚本中使用的数据可能存在不匹配的情况,例如字段名或者数据格式不正确。 2. 数据文件缺失:脚本所需的某些数据文件可能不存在或者路径不正确。 3. 依赖问题:脚本所依赖的某些组件或库可能缺失或者版本不兼容。 请检查脚本 `scripts/msf_create_lossless_map.sh` 中的相关代码,确保数据文件和依赖项的正确性。如果问题仍然存在,您可以提供更多的上下文信息,以便我们能够更好地帮助您解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值