提示文章写完后目录可以自动生成如何生成可参考右边的帮助文档文章目录前言一、APM机架代码解析1.实际文件位置第一个是AP_Motors_Class.h文件这个文件主要是用来添加自定义机架名称。第二个文件是AP_MotorsMatrix.cpp文件这个文件包含对应的机型电机代码实现。二、对已有机架类型进行修改1.add_motor_raw函数解析Roll_fac (float) — Roll 横滚系数pitch_fac (float) — Pitch 俯仰系数yaw_fac (float) — Yaw 偏航系数2.根据实际电机的分布与轴距添加参数三、添加自定义的机架类型1.motor_frame_type下添加机架框架自己取名即可2.在AP_MotorMatrix.cpp的switch (frame_type)增加增加取名的框架case即可3.按照其他机架类型格式仿写即可4.改好后在MP里修改参数frame_type参数对应你新设置的模式。总结前言对于希望修改机架内容实现不同轴距或者希望添加自定义机架的人来说本文可能可以提供一定的帮助一、APM机架代码解析1.实际文件位置apm关于机架电机配置的文件都AP_Motors_Class放在libraries/AP_Motors内主要使用的文件有两个。第一个是AP_Motors_Class.h文件这个文件主要是用来添加自定义机架名称。在枚举类型motor_frame_type里我们可以添加自己的自定义机架框架名称不和已有的重复即可。第二个文件是AP_MotorsMatrix.cpp文件这个文件包含对应的机型电机代码实现。代码内的机架种类比较多我就选之前做过的八旋翼机架解读。switch(frame_type){caseMOTOR_FRAME_TYPE_PLUS:{_frame_type_stringPLUS;staticconstAP_MotorsMatrix::MotorDef motors[]{{90,AP_MOTORS_MATRIX_YAW_FACTOR_CCW,2},{-90,AP_MOTORS_MATRIX_YAW_FACTOR_CCW,4},{0,AP_MOTORS_MATRIX_YAW_FACTOR_CW,1},{180,AP_MOTORS_MATRIX_YAW_FACTOR_CW,3},};add_motors(motors,ARRAY_SIZE(motors));break;}第一部分是电机结构体数组的建立首先是根据官方的电机编号图确定各个电机的方位同时确定电机转向以及给定测试电机编号。最后会把这个结构体数组用add_motors函数处理主要就是循环赋值从1号电机开始赋值下去具体可以用vscode打开apm源码跳转到对应的函数定义查看。二、对已有机架类型进行修改1.add_motor_raw函数解析代码如下voidAP_MotorsMatrix::add_motor_raw(int8_tmotor_num,floatroll_fac,floatpitch_fac,floatyaw_fac,uint8_ttesting_order,floatthrottle_factor)Roll_fac (float) — Roll 横滚系数决定这个电机对横滚控制的贡献大小和方向。正值增加该电机推力 → 飞行器向右侧翻滚负值增加该电机推力 → 飞行器向左侧翻滚绝对值大小由电机距离机身 Roll 轴前后方向的垂直距离决定计算方法roll_fac 电机到 Roll 轴前后方向 的垂直距离 臂长 × sin(方位角)pitch_fac (float) — Pitch 俯仰系数决定这个电机对俯仰控制的贡献大小和方向。正值增加该电机推力 → 飞行器向前俯负值增加该电机推力 → 飞行器向后仰绝对值大小由电机距离机身 Pitch 轴左右方向的垂直距离决定计算方法pitch_fac 电机到 Pitch 轴左右方向 的垂直距离 臂长 × cos(方位角)yaw_fac (float) — Yaw 偏航系数决定这个电机对偏航控制的贡献本质是电机对机身的反扭矩方向。1 (AP_MOTORS_MATRIX_YAW_FACTOR_CCW)电机逆时针旋转CCW产生顺时针反扭矩 → 机身顺时针偏航-1 (AP_MOTORS_MATRIX_YAW_FACTOR_CW)电机顺时针旋转CW产生逆时针反扭矩 → 机身逆时针偏航最后要记得归一化。2.根据实际电机的分布与轴距添加参数按照我上面的修改即可在对应机架的位置break前对每一个电机进行修改即可。三、添加自定义的机架类型1.motor_frame_type下添加机架框架自己取名即可2.在AP_MotorMatrix.cpp的switch (frame_type)增加增加取名的框架case即可3.按照其他机架类型格式仿写即可staticconstAP_MotorsMatrix::MotorDefRaw motors[]{{0.83f,0.34f,AP_MOTORS_MATRIX_YAW_FACTOR_CW,7},{-0.67f,-0.32f,AP_MOTORS_MATRIX_YAW_FACTOR_CW,3},{0.67f,-0.32f,AP_MOTORS_MATRIX_YAW_FACTOR_CCW,6},{-0.50f,-1.00f,AP_MOTORS_MATRIX_YAW_FACTOR_CCW,4},{1.00f,1.00f,AP_MOTORS_MATRIX_YAW_FACTOR_CCW,8},{-0.83f,0.34f,AP_MOTORS_MATRIX_YAW_FACTOR_CCW,2},{-1.00f,1.00f,AP_MOTORS_MATRIX_YAW_FACTOR_CW,1},{0.50f,-1.00f,AP_MOTORS_MATRIX_YAW_FACTOR_CW,5},};add_motors_raw(motors,ARRAY_SIZE(motors));break;记得一定要用带raw的。4.改好后在MP里修改参数frame_type参数对应你新设置的模式。总结按如上的步骤就可以修改官方机架或者自定义机架类型了