浅析自定位

来源:互联网 发布:阿里云 欧洲节点 编辑:程序博客网 时间:2024/06/01 08:31

本文浅析一下BHuman2016中的两个selfLocator代码文件。
在.h文件中声明了一个自定位的类。
包含头文件中包含了UKFSample.h文件,这是自动位的关键,这套系统运用了无迹卡尔曼滤波估计机器人的姿态,具体情况下回分解。
然后是一个传统的MODULE生成描述,其中提供了较为关键的RobotPose,SelfLocalizationHypotheses模块,还定义了非常多的参数。
之后开始定义selflocator类,该类继承至SelfLocatorBase,还有一些私有成员变量,比较重要的有samples用于定位的样本点集合,lastRobotPose上次计算所得机器人位姿,lastTimeFarFieldBorderSeen上次看到边界的时间,averageWeighting每个样本的权重,等等
之后是几个函数,几个update函数用来更新位姿,自定位假设,里程计的偏移,UKF测量等,还有重新收集样本;如果计算所得与假设差距很大则重置样本;在不同状态下的位姿变化;计算位姿生成robotpose;还有一些从进入场地位置,罚球点,线,假设等返回的robotpose。其中有一个domainSpecificSituationHandling可以处理机器人叛变问题,须认真学习。
.cpp文件则是.h文件中的实现,样本采集大多与UKF相关,注意在构造函数中对参数的默认设置以及在块中生成了sample用于之后的进程,还定义了5个机器人的相关参数;在析构函数中将所有sample删除掉,紧随其后的update函数最为重要,根据各个样本点返回了机器人位姿,并调用了其他成员函数,请读者自行查阅。
从理论上来讲,bhuman的自定位重点在用无迹卡尔曼滤波来采样,并用多假设定位法利用采回的样本点进行定位,提供了robotpose这一模块给相关函数进行调用,实现场上的自行定位,重点问题是机器人的叛变问题仍需解决。

1 0
原创粉丝点击