ArduPilot姿态环控制-----传感器初始化

   日期:2020-05-11     浏览:101    评论:0    
核心提示:首先我们假定从void AP_Vehicle::setup() 开始,这里是飞控所有初始化所在,程序位于 AP_vehicle.cpp中。找到其中的 init_ardupilot();函数,执行跳转执行跳转过程中,需要选择是机型(无人机,无人车,UUV等)。我们这里选择多旋翼,则走到了 system.cpp中。继续寻找到其中的 startup_INS_ground(); 如上图所示。然后再次跳转,如下图所得。这里跟踪定位到 ins.init(scheduler.get_loop_rat后端

参考链接:https://blog.csdn.net/lixiaoweimashixiao/article/details/80540295

首先我们假定从void AP_Vehicle::setup() 开始,这里是飞控所有初始化所在,程序位于 AP_vehicle.cpp中。

找到其中的 init_ardupilot();函数,执行跳转

执行跳转过程中,需要选择是机型(无人机,无人车,UUV等)。我们这里选择多旋翼,则走到了 system.cpp中。

继续寻找到其中的 startup_INS_ground(); 如上图所示。然后再次跳转,如下图所得。

这里跟踪定位到 ins.init(scheduler.get_loop_rate_hz());,该函数已经表示初始化了。当然,我们继续

此时定位在 AP_InertialSensor.cpp 中,我们找到其中的 _start_backends();,由于采用的是前后端的形式,所以这个地方开始进入到后端了(注意到下面还有一个start()函数,在文末会展开说一下

由于ArduPilot有多个板子,对应不同的传感器,所以这里先要检测后端,找到使用哪个板子,必要的一步。

这里以Pixhawk为例,如上图所示,ADD_BACKEND是要条件后端了。在继续寻找 probe 函数,进入跳转得:

继续刨根问底!!我们看到了sensor->init()

还没完,这都挖的这么深了…

终于,我们看到了硬件信号对传感器的初始化,包括传感器的一些初始配置,再往下就是总线协议了…

总结:完善的框架,造成藏得真深啊,不过其他传感器的初始化也都类似,如出一辙,通过前后端的形式完成。

补充:后端线程开启

start函数会在后端函数中进行重载,具体实现如下。

在start函数中,最后开启了线程回调函数


void AP_InertialSensor_Invensense::_poll_data()
{
    _read_fifo();
}

然后就讲传感器数据送入信号量了。

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服