国外Bicraze开源微型四轴全部资料
本帖最后由 zhaochuanyuAVR 于 2013-5-26 16:52 编辑刚刚搜到的,希望能给大家提供个参考!以下是官网网址:
http://www.bitcraze.se/2013/02/pre-order-has-started/
http://v.youku.com/v_show/id_XNTEwODM4MzEy.html 最核心的,姿态融合,代码如下
:
#include "stm32f10x_conf.h"
#include <math.h>
#include "sensfusion6.h"
#include "imu.h"
//#define MADWICK_QUATERNION_IMU
#ifdef MADWICK_QUATERNION_IMU
#define BETA_DEF 0.01f // 2 * proportional gain
#else // MAHONY_QUATERNION_IMU
#define TWO_KP_DEF(2.0f * 0.8f) // 2 * proportional gain
#define TWO_KI_DEF(2.0f * 0.001f) // 2 * integral gain
#endif
#ifdef MADWICK_QUATERNION_IMU
float beta = BETA_DEF; // 2 * proportional gain (Kp)
#else // MAHONY_QUATERNION_IMU
float twoKp = TWO_KP_DEF; // 2 * proportional gain (Kp)
float twoKi = TWO_KI_DEF; // 2 * integral gain (Ki)
float integralFBx = 0.0f;
float integralFBy = 0.0f;
float integralFBz = 0.0f;// integral error terms scaled by Ki
#endif
float q0 = 1.0f;
float q1 = 0.0f;
float q2 = 0.0f;
float q3 = 0.0f;// quaternion of sensor frame relative to auxiliary frame
static bool isInit;
// TODO: Make math util file
static float invSqrt(float x);
void sensfusion6Init()
{
if(isInit)
return;
isInit = TRUE;
}
bool sensfusion6Test(void)
{
return isInit;
}
#ifdef MADWICK_QUATERNION_IMU
// Implementation of Madgwick's IMU and AHRS algorithms.
// See: http://www.x-io.co.uk/node/8#open_source_ahrs_and_imu_algorithms
//
// Date Author Notes
// 29/09/2011 SOH Madgwick Initial release
// 02/10/2011 SOH MadgwickOptimised for reduced CPU load
void sensfusion6UpdateQ(float gx, float gy, float gz, float ax, float ay, float az, float dt)
{
float recipNorm;
float s0, s1, s2, s3;
float qDot1, qDot2, qDot3, qDot4;
float _2q0, _2q1, _2q2, _2q3, _4q0, _4q1, _4q2 ,_8q1, _8q2, q0q0, q1q1, q2q2, q3q3;
// Rate of change of quaternion from gyroscope
qDot1 = 0.5f * (-q1 * gx - q2 * gy - q3 * gz);
qDot2 = 0.5f * (q0 * gx + q2 * gz - q3 * gy);
qDot3 = 0.5f * (q0 * gy - q1 * gz + q3 * gx);
qDot4 = 0.5f * (q0 * gz + q1 * gy - q2 * gx);
// Compute feedback only if accelerometer measurement valid (avoids NaN in accelerometer normalisation)
if(!((ax == 0.0f) && (ay == 0.0f) && (az == 0.0f)))
{
// Normalise accelerometer measurement
recipNorm = invSqrt(ax * ax + ay * ay + az * az);
ax *= recipNorm;
ay *= recipNorm;
az *= recipNorm;
// Auxiliary variables to avoid repeated arithmetic
_2q0 = 2.0f * q0;
_2q1 = 2.0f * q1;
_2q2 = 2.0f * q2;
_2q3 = 2.0f * q3;
_4q0 = 4.0f * q0;
_4q1 = 4.0f * q1;
_4q2 = 4.0f * q2;
_8q1 = 8.0f * q1;
_8q2 = 8.0f * q2;
q0q0 = q0 * q0;
q1q1 = q1 * q1;
q2q2 = q2 * q2;
q3q3 = q3 * q3;
// Gradient decent algorithm corrective step
s0 = _4q0 * q2q2 + _2q2 * ax + _4q0 * q1q1 - _2q1 * ay;
s1 = _4q1 * q3q3 - _2q3 * ax + 4.0f * q0q0 * q1 - _2q0 * ay - _4q1 + _8q1 * q1q1 + _8q1 * q2q2 + _4q1 * az;
s2 = 4.0f * q0q0 * q2 + _2q0 * ax + _4q2 * q3q3 - _2q3 * ay - _4q2 + _8q2 * q1q1 + _8q2 * q2q2 + _4q2 * az;
s3 = 4.0f * q1q1 * q3 - _2q1 * ax + 4.0f * q2q2 * q3 - _2q2 * ay;
recipNorm = invSqrt(s0 * s0 + s1 * s1 + s2 * s2 + s3 * s3); // normalise step magnitude
s0 *= recipNorm;
s1 *= recipNorm;
s2 *= recipNorm;
s3 *= recipNorm;
// Apply feedback step
qDot1 -= beta * s0;
qDot2 -= beta * s1;
qDot3 -= beta * s2;
qDot4 -= beta * s3;
}
// Integrate rate of change of quaternion to yield quaternion
q0 += qDot1 * dt;
q1 += qDot2 * dt;
q2 += qDot3 * dt;
q3 += qDot4 * dt;
// Normalise quaternion
recipNorm = invSqrt(q0*q0 + q1*q1 + q2*q2 + q3*q3);
q0 *= recipNorm;
q1 *= recipNorm;
q2 *= recipNorm;
q3 *= recipNorm;
}
#else // MAHONY_QUATERNION_IMU
// Madgwick's implementation of Mayhony's AHRS algorithm.
// See: http://www.x-io.co.uk/node/8#open_source_ahrs_and_imu_algorithms
//
// Date Author Notes
// 29/09/2011 SOH Madgwick Initial release
// 02/10/2011 SOH MadgwickOptimised for reduced CPU load
void sensfusion6UpdateQ(float gx, float gy, float gz, float ax, float ay, float az, float dt)
{
float recipNorm;
float halfvx, halfvy, halfvz;
float halfex, halfey, halfez;
float qa, qb, qc;
gx = gx * M_PI / 180;
gy = gy * M_PI / 180;
gz = gz * M_PI / 180;
// Compute feedback only if accelerometer measurement valid (avoids NaN in accelerometer normalisation)
if(!((ax == 0.0f) && (ay == 0.0f) && (az == 0.0f)))
{
// Normalise accelerometer measurement
recipNorm = invSqrt(ax * ax + ay * ay + az * az);
ax *= recipNorm;
ay *= recipNorm;
az *= recipNorm;
// Estimated direction of gravity and vector perpendicular to magnetic flux
halfvx = q1 * q3 - q0 * q2;
halfvy = q0 * q1 + q2 * q3;
halfvz = q0 * q0 - 0.5f + q3 * q3;
// Error is sum of cross product between estimated and measured direction of gravity
halfex = (ay * halfvz - az * halfvy);
halfey = (az * halfvx - ax * halfvz);
halfez = (ax * halfvy - ay * halfvx);
// Compute and apply integral feedback if enabled
if(twoKi > 0.0f)
{
integralFBx += twoKi * halfex * dt;// integral error scaled by Ki
integralFBy += twoKi * halfey * dt;
integralFBz += twoKi * halfez * dt;
gx += integralFBx;// apply integral feedback
gy += integralFBy;
gz += integralFBz;
}
else
{
integralFBx = 0.0f; // prevent integral windup
integralFBy = 0.0f;
integralFBz = 0.0f;
}
// Apply proportional feedback
gx += twoKp * halfex;
gy += twoKp * halfey;
gz += twoKp * halfez;
}
// Integrate rate of change of quaternion
gx *= (0.5f * dt); // pre-multiply common factors
gy *= (0.5f * dt);
gz *= (0.5f * dt);
qa = q0;
qb = q1;
qc = q2;
q0 += (-qb * gx - qc * gy - q3 * gz);
q1 += (qa * gx + qc * gz - q3 * gy);
q2 += (qa * gy - qb * gz + q3 * gx);
q3 += (qa * gz + qb * gy - qc * gx);
// Normalise quaternion
recipNorm = invSqrt(q0 * q0 + q1 * q1 + q2 * q2 + q3 * q3);
q0 *= recipNorm;
q1 *= recipNorm;
q2 *= recipNorm;
q3 *= recipNorm;
}
#endif
void sensfusion6GetEulerRPY(float* roll, float* pitch, float* yaw)
{
float gx, gy, gz; // estimated gravity direction
gx = 2 * (q1*q3 - q0*q2);
gy = 2 * (q0*q1 + q2*q3);
gz = q0*q0 - q1*q1 - q2*q2 + q3*q3;
*yaw = atan2(2*q1*q2 - 2*q0*q3, 2*q0*q0 + 2*q1*q1 - 1) * 180 / M_PI;
*pitch = atan(gx / sqrt(gy*gy + gz*gz)) * 180 / M_PI;
*roll = atan(gy / sqrt(gx*gx + gz*gz)) * 180 / M_PI;
}
//---------------------------------------------------------------------------------------------------
// Fast inverse square-root
// See: http://en.wikipedia.org/wiki/Fast_inverse_square_root
float invSqrt(float x)
{
float halfx = 0.5f * x;
float y = x;
long i = *(long*)&y;
i = 0x5f3759df - (i>>1);
y = *(float*)&i;
y = y * (1.5f - (halfx * y * y));
return y;
}
pcb图片,四层最后检查后做板子 这个不错~ 飞得好灵活,帅啊 本帖最后由 godlike438 于 2013-5-26 16:23 编辑
再帮你传个东西吧
godlike438 发表于 2013-5-26 16:19 static/image/common/back.gif
再帮你传个东西吧 ...
都是无私的兄弟啊! godlike438 发表于 2013-5-26 16:19 static/image/common/back.gif
再帮你传个东西吧 ...
都是无私的兄弟啊! 看了,就是开发环境太复杂了。要是出来个ARM-MDK开发环境的程序就好了。 {:lol:}-00这个‘是’好{:victory:}{:victory:} 感谢分享 这个必须顶,,不过貌似以前也有人共享了这个 niuren bangding a 很不错呀!顶个 留名,明天电脑看 睇下能用上不~~ 他们这个没有用IDE,直接用Linux的gcc编译的么? 我试着装了stm32 的编译链,但是编译不通过 ,操 实在厉害,顶起啊 漂亮 这是他们的wiki: http://wiki.bitcraze.se/projects:crazyflie:index
代码编译环境:http://wiki.bitcraze.se/projects:crazyflie:devenv:index 学习了。。。 国外Bicraze开源微型四轴 关注,标记 不错,顶一下 好东西谢了 Mark…
来自:amoBBS 阿莫电子论坛 Windows Phone 7 客户端 学习了,标记一下,改天下载学习 好东西好东西,lz无私 非常猛 话说,这个才是迷你四轴的鼻祖!{:3_48:} {:lol:}不错,谁赶紧山寨一个 {:titter:}
这么好的资料,得赞一个。 真心牛啊,这帮北欧老外活的真是精彩! 我靠,看了视频才知道,这也太牛逼了吧 GOOD{:lol:}{:lol:} {:lol:}看看学习了 很漂亮,不错, 本帖最后由 sxjclike 于 2013-6-7 02:55 编辑
我也帮楼主补些资料
玩家对四层板的二层化改造
http://217.7.135.92/die-proleten/gpEasy/data/_uploaded/image/Crazyflie/Kopter-1.png
http://217.7.135.92/die-proleten/gpEasy/data/_uploaded/image/Crazyflie/Platinen-2.png 不错!!!很好,真漂亮! Mark…… 牛啊,看到又兴奋了,坚定了DIY四轴的激情 我见过的最牛B微型四轴! 扇叶的安装方式值得学习。 原理图PCB的下载连接在哪里找的,多谢给个链接
也分享一个牛逼的,红遍全球的的炫酷飞行器 v.youku.com/v_show/id_XNTc0MTk0MzI4.htm 飞的真帅 这个NB,mark留用 我噻 很酷啊 学习学习暑假开搞。 就是一个RTOS+四元数姿态融合 非常好,改天下载好好学学~ 有意思~~~~ rantingting 发表于 2013-5-30 21:11 static/image/common/back.gif
我靠,看了视频才知道,这也太牛逼了吧
居然遇到熟人了。O(∩_∩)O~ 皮爱了西 发表于 2013-7-2 12:48 static/image/common/back.gif
居然遇到熟人了。O(∩_∩)O~
who?…………………… rantingting 发表于 2013-7-2 13:01 static/image/common/back.gif
who?……………………
极客工坊里混的,O(∩_∩)O~ 皮爱了西 发表于 2013-7-2 13:43 static/image/common/back.gif
极客工坊里混的,O(∩_∩)O~
还以为你认识我呢……极客我逛得少点 好东西,谢谢分享 赞赞赞 暑假搞飞行器去 很牛的四轴,学习下算法。 好东西,要好好学习了 记号,收藏 这鸡鸡做得顶漂亮!顶一个! 微四轴,好诱人{:loveliness:} 很牛的四轴飞行器啊 国外人就是牛,好在开源。 晒一个我做的最新版本的微型四轴,欢迎砸砖!
http://v.youku.com/v_show/id_XNTg5ODM0ODE2.html bygreencn 发表于 2013-6-29 15:35 static/image/common/back.gif
原理图PCB的下载连接在哪里找的,多谢给个链接
同求啊 MARK一下。。。。 http://www.bitcraze.se/wp-content/uploads/2013/07/Crazyflie-kicad-snapshot.png sxjclike 发表于 2013-8-5 12:03 static/image/common/back.gif
你厉害!都搞到PCB了?
zhaochuanyuAVR 发表于 2013-8-6 15:44 static/image/common/back.gif
你厉害!都搞到PCB了?
官网上截的图而已 搞到版图了准备做板 xjf_hz 发表于 2013-8-7 09:58 static/image/common/back.gif
pcb图片,四层最后检查后做板子
没有PCB文件么 我拿到的图(AD格式的)是网上买的,据说是原版。我在核对一下图是否正确。过几天做样板。可惜amo这不能做四层板。{:cry:}{:cry:} {:victory:}{:victory:}{:victory:} mark. 收藏 谢谢楼主分享,非常棒! 楼主,资料不会用{:mad:} xjf_hz 发表于 2013-8-7 13:20 static/image/common/back.gif
我拿到的图(AD格式的)是网上买的,据说是原版。我在核对一下图是否正确。过几天做样板。可惜amo这不能做 ...
在哪里买的多少大洋,可否分享下啊 我想说.....那个电池是不是鼓起来了.... mark……
顶一个… 倒是很灵活 稳吗? PCB做好了四层,准备焊接调试,上图。 桌面太脏了对不起观众了。下次拍照片前先擦干净。 另一块遥控板还在做,等好了在上图。 很不错,有空也要搞一个 多谢楼主 持续关注中
求板图与原理图! 这个很爽啊,一定要抽时间做个玩玩 感觉这些东西全都逆天了哈哈 要是mdk或者IAR的多好啊 帅 谢谢奉献 前两天看见这个视频,现在楼主提供的资料更让我疯狂啊 xjf_hz 发表于 2013-8-23 12:54 static/image/common/back.gif
PCB做好了四层,准备焊接调试,上图。
哥们,这个打板多少钱?四层板 plc_avr 发表于 2013-8-1 22:32 static/image/common/back.gif
晒一个我做的最新版本的微型四轴,欢迎砸砖!
哥们,这个群满了啊, 收藏了 谢谢楼主 四轴的声音是真好听。不过这个好mini 这个不知道 稳定性怎么样。就一直看着他在动