jackwang123 发表于 2012-4-10 15:40:02

关于姿态角的计算的问题

第一次研究类似于四轴飞行的东东,有个问题不是很理解。
假设物体本身有横滚30度,在方位角40度下,做俯仰运动,我的理解只有俯仰角会变化,横滚角和方位角不变,
为什么按照公式算出来会变呢?
ax,ay,az是三轴加速度值,mx,my,mz是磁场值。
定义x为水平指北为正,y指向东为正,z指向地心为正。
按照公式
俯仰pitch_acc = atan((float)Ax/sqrt((float)((Ay*Ay)+(Az*Az))))*57.29578;
横滚roll_acc= atan((float)Ay/sqrt((float)((Ax*Ax)+(Az*Az))))*57.29578;

xh=mx*cos(pitch)+my*sin(roll)*sin(pitch)-mz*cos(roll)*sin(pitch);
yh=my*cos(roll)+mz*sin(roll);
方位角:yaw=atan2(yh/xh)


另外,pitch和tilt有什么区别呢?

jss 发表于 2012-4-18 19:42:19

本帖最后由 jss 于 2012-4-18 21:55 编辑

“pitch和tilt有什么区别呢”
首先,我们会遇到两个系,参考系和机体系。你给定的只是一个参考系(严格上说不是参考系,应该是地理系)。机体系是和四旋翼固连的。
俯仰偏航横滚这些角指明的是参考系按一定顺序旋转到与机体系重合,各个轴需要旋转的角度。要记住空间旋转不可交换。
先旋转x轴30°,再旋转y轴45°,最后旋转z轴60°,和先旋转z轴60°,再旋转y轴45°,最后旋转x轴30°是完全不一样的。对于这两种旋转,我们都说横滚30°,俯仰45°,偏航60°。
上述的两种旋转分别对应着欧拉角的xyz旋转和zyx旋转。
pitch,我们必须知道是在那种旋转之下的;而tilt,大约只是意味着机体xy轴确定的平面和水平面之间的夹角(关于tilt我不是很确定,除了在关于手机的编程中可以见到tilt,在四旋翼中没看到过tilt)。

你必须对你的使用的旋转方式和对应的旋转矩阵非常熟悉。

在你的假设下,你不明白为什么横滚角和方位角会变。事实上机体在横滚30度,方位角有40度之后,机体系和参考系已经不重合了,现在机四旋翼做俯仰运动,机体系和参考系之间的夹角肯定会变的。

jackwang123 发表于 2012-4-25 12:58:31

谢谢楼上详细的回复。
经过这段时间的摸索,计算出来横滚角确实是应该变的,方位角不变。
我所需要的知道的量是tilt(xy轴确定的平面和水平面之间的夹角),方位角,和机体实测磁场在参考系下的分量,俯仰和横滚我是在计算方位角用的到的中间量。
由于三轴磁场传感器的不正交,最后算出的在参考系下的磁场总量不是常数,这个磁场传感器的不垂直能不能校正呢?
页: [1]
查看完整版本: 关于姿态角的计算的问题