我是靠谱客的博主 感动盼望,最近开发中收集的这篇文章主要介绍Pixhawk上烧写ardupilot教程中的例程后飞控不工作的解决方法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在官方给的

http://ardupilot.org/dev/docs/learning-ardupilot-the-example-sketches.html

这个教程中,理应看到的是终端打印出一系列的GPS值,可是我在编译烧写成功后终端无法输出任何信息。详细阅读了ArduPilot的底层代码后终于找到了原因。

原代码(注为了表达主要问题对代码进行了省略):

/// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*-

/*
  simple hello world sketch
  Andrew Tridgell September 2011
*/

#include <AP_HAL/AP_HAL.h>

const AP_HAL::HAL& hal = AP_HAL::get_HAL();

void setup() {
  hal.console->println("GPS AUTO library test");
} void loop() {
   hal.console->println("hello world!"); hal.scheduler
->delay(1000); } AP_HAL_MAIN();

修改后代码

 
  
#include <AP_HAL/AP_HAL.h>
 
  
const AP_HAL::HAL& hal = AP_HAL::get_HAL();

class
GPS_AUTO_test: public AP_HAL::HAL::Callbacks{ public: void setup() { hal.console->println("GPS AUTO library test"); } void loop() {      hal.console->println("hello world!"); hal.scheduler->delay(1000); } }; GPS_AUTO_test gat; // Register above functions in HAL board level AP_HAL_MAIN_CALLBACKS(&gat);

在执行AP_HAL_MAIN_CALLBACKS(&gat)后,程序会自动调用gat.setup()和gat.loop()。

执行结果:

其实AP_HAL_MAIN_CALLBACKS(&gat)和AP_HAL_MAIN()两个宏的实现方式差不多,后者会将setup和loop组装成一个类后再使用前者的方式。我读了源码也没有发现什么问题,可是的确无法执行,所以最好的方法是把setup和loop封装到一个类里后采用AP_HAL_MAIN_CALLBACKS(&gat)的形式。

注意,封装成的类要继承public AP_HAL::HAL::Callbacks类。

转载于:https://www.cnblogs.com/silverbulletmdc/p/5406563.html

最后

以上就是感动盼望为你收集整理的Pixhawk上烧写ardupilot教程中的例程后飞控不工作的解决方法的全部内容,希望文章能够帮你解决Pixhawk上烧写ardupilot教程中的例程后飞控不工作的解决方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部