问题描述
我们正在开发与硬件系统交互的应用程序,并使用电话和硬件系统的加速度计和陀螺仪信息通过4个扩展的电动臂对桌面进行自动调平。该水平表面分配了前后,左右方向。
硬件系统能够知道其绝对的横摇和俯仰,但不能知道其真正的偏航,因为它只是一个6轴传感器。现在,将硬件系统安装在需要调平的表面上的不同位置/方向(滚动/俯仰/偏航的不同组合)上,因此我们正在创建一个应用内“校准”例程,该例程应告知硬件其当前方向,相对于水平面的正面。
校准步骤:
-
用户将手机沿着表面的中心线放置,手机的顶部指向表面边缘的“前部”(考虑到将手机放平,顶部指向手机边缘的前部)船,如果我们要平整船的表面)
-
用户按下“校准”按钮(这将记录我们所需的0、0、0参考)
-
然后,用户将电话旅行到硬件系统框,然后将电话放在框的顶部,电话的顶部指向框的指定“左侧”。使用此方法,我们可以参考初始0,0来确定系统的侧倾/俯仰/偏航方向。
现在,我们需要使用旋转矩阵,四元数方法或某种方式将当前XX.xx / YY.yy / ZZ.zz方向的框映射到原点0、0、0。
因此,如果将框旋转到90度,则表示俯仰和横滚已经反转,现在俯仰读取为横滚,好像它仍然在0,0方向相同,并正确控制了正确的边表面的水平。我们已经通过旋转矩阵实现了这一点,但是仅在俯仰和横滚为0时有效。无论横摇/俯仰/偏航角如何,我们都需要使用此矩阵。该盒子可以从0,0设定点以90度角,15度螺距和100度偏航角安装,但其参考框架必须始终映射到我们最初设置的0,0。
可以提供代码,但是由于它无法正常工作,因此无法确定它的用处,并且我们在尝试技术细节之前试图巩固我们的方法。
此应用程序是用iOS的Objective C编写的,最终,滚动/俯仰/偏航计算的映射将在板载C ++固件中完成(只有一次,一旦安装了盒子,它就不会移动。如果它移动了,用户必须重新校准以重新告知盒子相对于0,0点的方向,)
我们真的一直在为此绞尽脑汁,而且由于找不到很多有用的资源,我几乎耗尽了所有Google搜索字词的想法。我们使用它来开发一个可行的示例,但是仅当偏航是唯一的轴更改时,此示例才有效:http://planning.cs.uiuc.edu/node102.html
任何输入将不胜感激!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)