Range Finder
此处选用的是 Benewake
下的 Lidar
参数设置
除了官方的参数设置外,我在 EKF2
中还找到了 EKF2_RNG_AID
参数,用来配置是否将 range finder
融入 EFK2 中。其通用参数(与 range finder
相关)都以 EKF2_RNG_*
命名。
这个连接比较简单。用盒子里的线直接接到 lidar 和 TELEM2 端口,然后按照参数配置就可以了。
选完串口后在 QGC Mavlink Inspector 中检查下看是否有
distance_sensor
消息。
源代码解读
驱动层面
Range Finder
接口
源代码位于 src/lib/driver/rangefinder
,主要负责将底层硬件数据发送到 uORB
上。
TFMINI
硬件
src/driver/distance_sensor
。继承了 ScheduledWorkItem
类,作为 UART
端口上的工作队列。其重定义的函数::Run()
是每一次读取处理数据的函数。调用ScheduleOnInterval
设置了执行的频率。RangeFiner
最为它的一个成员,每次读到数据后发布到 uORB
上。
EKF2 层面
Range Finder
可以作为 EKF2 高度信息的主要信息(primary source)或者辅助信息(Secondary Source)。官方推荐气压计作为 primary,Range Finder 作为 Secondary / Aid。涉及参数 EKF2_HGT_MODE
和 EKF2_RNG_AID
。
EKF2 具体高度控制参考 EKF2 文章。
参数
EKF2_MIN_RNG
: 飞机在地面上时 RangeFinder 的读数,作为参考基准。
2021.4.17: 今天发现,如果以 Vision 作为 Primary Source 时,Range Finder 作为 Secondary 是没用的。
源代码中没有用到do_range_aid
。 EKF2 库中有一个分支是添加了 EV Range aid,还没有尝试。