您的位置:首页 > 其它

文章标题

2016-12-27 14:50 176 查看
最近探索了baseflight/cleanflight源码相关,看了源码想分享一下,baseflight无头模式的原理。

baseflight源码可以在github中搜到,网址直达:https://github.com/multiwii/baseflight baseflight源码主控是stm32,用来玩穿越机的比较多,这里我是应用于直流有刷电机的四轴中,一样玩的不错,这份开源代码源于MWC,然后开发者们做了stm32版本的baseflight,再后来更改了编程风格,cleanflight/bateflight源码也出来了。这里为什么选用baseflight呢,因为源码从github下载下来就已经有keil工程了,打开编译修改四轴就能飞了,cleanflight/bateflight需要make一下,然后用jlink软件下载进去,略麻烦一点。好了,开始介绍重点:无头模式的原理。

baseflight无头模式的相关代码在mw.c 184行中:

if (f.HEADFREE_MODE) {

float radDiff = (heading - headFreeModeHold) * M_PI / 180.0f;

float cosDiff = cosf(radDiff);

float sinDiff = sinf(radDiff);

int16_t rcCommand_PITCH = rcCommand[PITCH] * cosDiff + rcCommand[ROLL] * sinDiff;

rcCommand[ROLL] = rcCommand[ROLL] * cosDiff - rcCommand[PITCH] * sinDiff;

rcCommand[PITCH] = rcCommand_PITCH;

}

遥控通道激活无头模式后,标志位置位f.HEADFREE_MODE=1,heading就是当前yaw角,headFreeModeHold在 解锁时 或 激活HEADADJ时 能将当前yaw角记录更新(其实就是headFreeModeHold = heading; // acquire new heading)。

radDiff 计算的是当前yaw与headFreeModeHold 的夹角,这里该如何理解下面的rcCommand[ROLL] 和rcCommand[PITCH] 的计算呢,画个图就清晰了,其实就是向量分解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: