【first_try】ardupilot自定义飞行模式
固件版本:ardupilot Plane4.1
仿照 mode_circle 更改代码,增加 mode_Avoid_test 模式。在下面的文件中做相应的修改
mode.h
- mode.h中定义新模式 AVOID_TEST 数值为26
AVOID_TEST = 26,//56行
- 仿照ModeCircle创建ModeAvoidTest类,修改mode_number(),name(),name4()
class ModeAvoidTest: public Mode//722行
{
public:
Number mode_number() const override { return Number::AVOID_TEST; }
const char *name() const override { return "AVOIDT"; }
const char *name4() const override { return "AVOT"; }
// methods that affect movement of the vehicle in this mode
void update() override;
bool does_auto_navigation() const override { return true; }
bool does_auto_throttle() const override { return true; }
protected:
bool _enter() override;
};
Plane.h
- 添加 friend class ModeAvoidTest
friend class ModeAvoidTest;//143行
- 创建 ModeAvoidTest mode_avoid_test;。
ModeAvoidTest mode_avoid_test;//263行
mode_avoid_test.cpp
创建 mode_avoid_test.cpp 文件,将 mode_circle.cpp 中内容复制,更改类名为 ModeAvoidTest 。
#include "mode.h"
#include "Plane.h"
bool ModeAvoidTest::_enter()
{
// the altitude to circle at is taken from the current altitude
plane.next_WP_loc.alt = plane.current_loc.alt;
return true;
}
void ModeAvoidTest::update()
{
// we have no GPS installed and have lost radio contact
// or we just want to fly around in a gentle circle w/o GPS,
// holding altitude at the altitude we set when we
// switched into the mode
plane.nav_roll_cd = plane.roll_limit_cd / 3;
plane.update_load_factor();
plane.calc_nav_pitch();
plane.calc_throttle();
}
events.cpp control_modes.cpp GCS_Mavlink.cpp GCS_Plane.cpp
增加 case Mode::Number::AVOID_TEST: 在switch中,
否则会报错 enumeration value ‘AVOID_TEST’ not handled in switch
case Mode::Number::AVOID_TEST://events.cpp 167行 GCS_Mavlink.cpp 57行 GCS_Plane.cpp 70行
control_modes.cpp中添加 case Mode::Number::AVOID_TEST: ret = &mode_avoid_test;
case Mode::Number::AVOID_TEST://50行
ret = &mode_avoid_test;
break;
**最终成功!!!**