qinyunti 发表于 2022-11-27 20:58

【行空板 Python编程学习主控板】六轴加速度传感器可视化测试

<div class='showpostmsg'><h1>b18472ede3497b6294d0457d83abc245<br />
&nbsp;</h1>

<h1><b>前言</b></h1>

<p >开发板自带六轴加速度传感器可实时测量三轴加速度,三轴角速度。</p>

<p >通过这些数据可以进行姿态解算,知道开发板的姿态变化,进而可利用此进行交互。</p>

<p >参考</p>

<p ><a href="https://wiki.unihiker.com/pinpong_python_lib#target_9"><u>https://wiki.unihiker.com/pinpong_python_lib#target_9</u></a></p>

<p >&nbsp;</p>

<h1 ><b>传感器数据获取</b></h1>

<div class="parsedown-markdown">
<p>#&nbsp;-*-&nbsp;coding:&nbsp;utf-8&nbsp;-*-</p>

<p >import&nbsp;time</p>

<p >from&nbsp;pinpong.board&nbsp;import&nbsp;*</p>

<p >from&nbsp;pinpong.extension.unihiker&nbsp;import&nbsp;*</p>

<p >&nbsp;</p>

<p >while&nbsp;True:</p>

<p >&nbsp;&nbsp;ax&nbsp;=&nbsp;accelerometer.get_x()&nbsp;&nbsp;#读取加速度X的值</p>

<p >&nbsp;&nbsp;ay&nbsp;=&nbsp;accelerometer.get_y()&nbsp;&nbsp;#读取加速度Y的值</p>

<p >&nbsp;&nbsp;az&nbsp;=&nbsp;accelerometer.get_z()&nbsp;&nbsp;#读取加速度Z的值</p>

<p >&nbsp;&nbsp;a&nbsp;=&nbsp;accelerometer.get_strength()&nbsp;&nbsp;&nbsp;#读取加速度强度(x、y、z方向的合力)</p>

<p >&nbsp;&nbsp;gx&nbsp;=&nbsp;gyroscope.get_x()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#读取陀螺仪X的值</p>

<p >&nbsp;&nbsp;gy&nbsp;=&nbsp;gyroscope.get_y()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#读取陀螺仪Y的值</p>

<p >&nbsp;&nbsp;gz=&nbsp;&nbsp;gyroscope.get_z()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#读取陀螺仪Z的值</p>

<p >&nbsp;&nbsp;time.sleep(0.1)</p>
</div>

<p >&nbsp;</p>

<p >&nbsp;</p>

<h1 ><b>姿态解算</b></h1>

<div class="parsedown-markdown">
<p>import&nbsp;math</p>

<p >&nbsp;</p>

<p >#IMU算法更新</p>

<p >&nbsp;</p>

<p >Kp&nbsp;=&nbsp;100&nbsp;#比例增益控制加速度计/磁强计的收敛速度</p>

<p >Ki&nbsp;=&nbsp;0.002&nbsp;#积分增益控制陀螺偏差的收敛速度</p>

<p >halfT&nbsp;=&nbsp;0.001&nbsp;#采样周期的一半</p>

<p >&nbsp;</p>

<p >#传感器框架相对于辅助框架的四元数(初始化四元数的值)</p>

<p >q0&nbsp;=&nbsp;1</p>

<p >q1&nbsp;=&nbsp;0</p>

<p >q2&nbsp;=&nbsp;0</p>

<p >q3&nbsp;=&nbsp;0</p>

<p >&nbsp;</p>

<p >#由Ki缩放的积分误差项(初始化)</p>

<p >exInt&nbsp;=&nbsp;0</p>

<p >eyInt&nbsp;=&nbsp;0</p>

<p >ezInt&nbsp;=&nbsp;0</p>

<p >&nbsp;</p>

<p >def&nbsp;Update_IMU(ax,ay,az,gx,gy,gz):</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;global&nbsp;q0</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;global&nbsp;q1</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;global&nbsp;q2</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;global&nbsp;q3</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;global&nbsp;exInt</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;global&nbsp;eyInt</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;global&nbsp;ezInt</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;print(q0)</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;#测量正常化</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;norm&nbsp;=&nbsp;math.sqrt(ax*ax+ay*ay+az*az)</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;#单元化</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;ax&nbsp;=&nbsp;ax/norm</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;ay&nbsp;=&nbsp;ay/norm</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;az&nbsp;=&nbsp;az/norm</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;#估计方向的重力</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;vx&nbsp;=&nbsp;2*(q1*q3&nbsp;-&nbsp;q0*q2)</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;vy&nbsp;=&nbsp;2*(q0*q1&nbsp;+&nbsp;q2*q3)</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;vz&nbsp;=&nbsp;q0*q0&nbsp;-&nbsp;q1*q1&nbsp;-&nbsp;q2*q2&nbsp;+&nbsp;q3*q3</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;#错误的领域和方向传感器测量参考方向之间的交叉乘积的总和</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;ex&nbsp;=&nbsp;(ay*vz&nbsp;-&nbsp;az*vy)</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;ey&nbsp;=&nbsp;(az*vx&nbsp;-&nbsp;ax*vz)</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;ez&nbsp;=&nbsp;(ax*vy&nbsp;-&nbsp;ay*vx)</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;#积分误差比例积分增益</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;exInt&nbsp;+=&nbsp;ex*Ki</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;eyInt&nbsp;+=&nbsp;ey*Ki</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;ezInt&nbsp;+=&nbsp;ez*Ki</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;#调整后的陀螺仪测量</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;gx&nbsp;+=&nbsp;Kp*ex&nbsp;+&nbsp;exInt</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;gy&nbsp;+=&nbsp;Kp*ey&nbsp;+&nbsp;eyInt</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;gz&nbsp;+=&nbsp;Kp*ez&nbsp;+&nbsp;ezInt</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;#整合四元数</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;q0&nbsp;+=&nbsp;(-q1*gx&nbsp;-&nbsp;q2*gy&nbsp;-&nbsp;q3*gz)*halfT</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;q1&nbsp;+=&nbsp;(q0*gx&nbsp;+&nbsp;q2*gz&nbsp;-&nbsp;q3*gy)*halfT</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;q2&nbsp;+=&nbsp;(q0*gy&nbsp;-&nbsp;q1*gz&nbsp;+&nbsp;q3*gx)*halfT</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;q3&nbsp;+=&nbsp;(q0*gz&nbsp;+&nbsp;q1*gy&nbsp;-&nbsp;q2*gx)*halfT</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;#正常化四元数</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;norm&nbsp;=&nbsp;math.sqrt(q0*q0&nbsp;+&nbsp;q1*q1&nbsp;+&nbsp;q2*q2&nbsp;+&nbsp;q3*q3)</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;q0&nbsp;/=&nbsp;norm</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;q1&nbsp;/=&nbsp;norm</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;q2&nbsp;/=&nbsp;norm</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;q3&nbsp;/=&nbsp;norm</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;#获取欧拉角&nbsp;pitch、roll、yaw</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;pitch&nbsp;=&nbsp;math.asin(-2*q1*q3+2*q0*q2)*57.3</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;roll&nbsp;=&nbsp;math.atan2(2*q2*q3+2*q0*q1,-2*q1*q1-2*q2*q2+1)*57.3</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;yaw&nbsp;=&nbsp;math.atan2(2*(q1*q2&nbsp;+&nbsp;q0*q3),q0*q0+q1*q1-q2*q2-q3*q3)*57.3</p>

<p >return&nbsp;pitch,roll,yaw</p>
</div>

<p >&nbsp;</p>

<p >分别旋转三个轴,可以看到三个分量值变化。</p>

<p >打印欧拉角如下</p>

<p > &nbsp;</p>

<h1 ><b>可视化</b></h1>

<p><b>将角度投影到平面,根据角度计算x,y坐标的分量,从原点画线,就可以形成一个圆形轨迹,角度变化就对应着在圆形轨迹移动</b></p>

<p >这里只体现了r,y两个轴的角度</p>

<div class="parsedown-markdown">
<p>def&nbsp;Draw_Pos(gui,p,r,y):</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;l&nbsp;=&nbsp;100</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;LCDX=240</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;LCDY=320</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;px&nbsp;=&nbsp;l*math.sin(p)</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;py&nbsp;=&nbsp;l*math.cos(p)</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;gui.draw_line(x0=LCDX/2,y0=LCDY/2,x1=LCDX/2+px,y1=LCDY/2+py,width=4,color=(255,0,0),onclick=lambda:print(&quot;line&nbsp;clicked&quot;))</p>
</div>

<p >&nbsp;</p>

<h1 ><b>测试</b></h1>

<p >综合以上得到测试程序如下</p>

<div class="parsedown-markdown">
<p>#&nbsp;-*-&nbsp;coding:&nbsp;utf-8&nbsp;-*-</p>

<p >import&nbsp;time</p>

<p >from&nbsp;pinpong.board&nbsp;import&nbsp;*</p>

<p >from&nbsp;pinpong.extension.unihiker&nbsp;import&nbsp;*</p>

<p >from&nbsp;unihiker&nbsp;import&nbsp;GUI&nbsp;#导入包</p>

<p >import&nbsp;math</p>

<p >&nbsp;</p>

<p >#IMU算法更新</p>

<p >&nbsp;</p>

<p >Kp&nbsp;=&nbsp;100&nbsp;#比例增益控制加速度计/磁强计的收敛速度</p>

<p >Ki&nbsp;=&nbsp;0.002&nbsp;#积分增益控制陀螺偏差的收敛速度</p>

<p >halfT&nbsp;=&nbsp;0.001&nbsp;#采样周期的一半</p>

<p >&nbsp;</p>

<p >#传感器框架相对于辅助框架的四元数(初始化四元数的值)</p>

<p >q0&nbsp;=&nbsp;1</p>

<p >q1&nbsp;=&nbsp;0</p>

<p >q2&nbsp;=&nbsp;0</p>

<p >q3&nbsp;=&nbsp;0</p>

<p >&nbsp;</p>

<p >#由Ki缩放的积分误差项(初始化)</p>

<p >exInt&nbsp;=&nbsp;0</p>

<p >eyInt&nbsp;=&nbsp;0</p>

<p >ezInt&nbsp;=&nbsp;0</p>

<p >&nbsp;</p>

<p >def&nbsp;Update_IMU(ax,ay,az,gx,gy,gz):</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;global&nbsp;q0</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;global&nbsp;q1</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;global&nbsp;q2</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;global&nbsp;q3</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;global&nbsp;exInt</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;global&nbsp;eyInt</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;global&nbsp;ezInt</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;print(q0)</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;#测量正常化</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;norm&nbsp;=&nbsp;math.sqrt(ax*ax+ay*ay+az*az)</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;#单元化</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;ax&nbsp;=&nbsp;ax/norm</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;ay&nbsp;=&nbsp;ay/norm</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;az&nbsp;=&nbsp;az/norm</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;#估计方向的重力</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;vx&nbsp;=&nbsp;2*(q1*q3&nbsp;-&nbsp;q0*q2)</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;vy&nbsp;=&nbsp;2*(q0*q1&nbsp;+&nbsp;q2*q3)</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;vz&nbsp;=&nbsp;q0*q0&nbsp;-&nbsp;q1*q1&nbsp;-&nbsp;q2*q2&nbsp;+&nbsp;q3*q3</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;#错误的领域和方向传感器测量参考方向之间的交叉乘积的总和</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;ex&nbsp;=&nbsp;(ay*vz&nbsp;-&nbsp;az*vy)</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;ey&nbsp;=&nbsp;(az*vx&nbsp;-&nbsp;ax*vz)</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;ez&nbsp;=&nbsp;(ax*vy&nbsp;-&nbsp;ay*vx)</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;#积分误差比例积分增益</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;exInt&nbsp;+=&nbsp;ex*Ki</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;eyInt&nbsp;+=&nbsp;ey*Ki</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;ezInt&nbsp;+=&nbsp;ez*Ki</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;#调整后的陀螺仪测量</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;gx&nbsp;+=&nbsp;Kp*ex&nbsp;+&nbsp;exInt</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;gy&nbsp;+=&nbsp;Kp*ey&nbsp;+&nbsp;eyInt</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;gz&nbsp;+=&nbsp;Kp*ez&nbsp;+&nbsp;ezInt</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;#整合四元数</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;q0&nbsp;+=&nbsp;(-q1*gx&nbsp;-&nbsp;q2*gy&nbsp;-&nbsp;q3*gz)*halfT</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;q1&nbsp;+=&nbsp;(q0*gx&nbsp;+&nbsp;q2*gz&nbsp;-&nbsp;q3*gy)*halfT</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;q2&nbsp;+=&nbsp;(q0*gy&nbsp;-&nbsp;q1*gz&nbsp;+&nbsp;q3*gx)*halfT</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;q3&nbsp;+=&nbsp;(q0*gz&nbsp;+&nbsp;q1*gy&nbsp;-&nbsp;q2*gx)*halfT</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;#正常化四元数</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;norm&nbsp;=&nbsp;math.sqrt(q0*q0&nbsp;+&nbsp;q1*q1&nbsp;+&nbsp;q2*q2&nbsp;+&nbsp;q3*q3)</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;q0&nbsp;/=&nbsp;norm</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;q1&nbsp;/=&nbsp;norm</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;q2&nbsp;/=&nbsp;norm</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;q3&nbsp;/=&nbsp;norm</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;#获取欧拉角&nbsp;pitch、roll、yaw</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;pitch&nbsp;=&nbsp;math.asin(-2*q1*q3+2*q0*q2)*57.3</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;roll&nbsp;=&nbsp;math.atan2(2*q2*q3+2*q0*q1,-2*q1*q1-2*q2*q2+1)*57.3</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;yaw&nbsp;=&nbsp;math.atan2(2*(q1*q2&nbsp;+&nbsp;q0*q3),q0*q0+q1*q1-q2*q2-q3*q3)*57.3</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;pitch,roll,yaw</p>

<p >&nbsp;</p>

<p >def&nbsp;Draw_Pos(gui,p,r,y):</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;l&nbsp;=&nbsp;100</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;LCDX=240</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;LCDY=320</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;px&nbsp;=&nbsp;l*math.sin(p)</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;py&nbsp;=&nbsp;l*math.cos(p)</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;gui.draw_line(x0=LCDX/2,y0=LCDY/2,x1=LCDX/2+px,y1=LCDY/2+py,width=4,color=(255,0,0),onclick=lambda:print(&quot;line&nbsp;clicked&quot;))</p>

<p >&nbsp;</p>

<p >Board().begin()&nbsp;&nbsp;#初始化</p>

<p >gui=GUI()#实例化GUI类</p>

<p >&nbsp;</p>

<p >while&nbsp;True:</p>

<p >&nbsp;&nbsp;ax&nbsp;=&nbsp;accelerometer.get_x()&nbsp;&nbsp;#读取加速度X的值</p>

<p >&nbsp;&nbsp;ay&nbsp;=&nbsp;accelerometer.get_y()&nbsp;&nbsp;#读取加速度Y的值</p>

<p >&nbsp;&nbsp;az&nbsp;=&nbsp;accelerometer.get_z()&nbsp;&nbsp;#读取加速度Z的值</p>

<p >&nbsp;&nbsp;a&nbsp;=&nbsp;accelerometer.get_strength()&nbsp;&nbsp;&nbsp;#读取加速度强度(x、y、z方向的合力)</p>

<p >&nbsp;&nbsp;gx&nbsp;=&nbsp;gyroscope.get_x()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#读取陀螺仪X的值</p>

<p >&nbsp;&nbsp;gy&nbsp;=&nbsp;gyroscope.get_y()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#读取陀螺仪Y的值</p>

<p >&nbsp;&nbsp;gz=&nbsp;&nbsp;gyroscope.get_z()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#读取陀螺仪Z的值</p>

<p >&nbsp;&nbsp;p,r,y&nbsp;=&nbsp;Update_IMU(ax,ay,az,gx,gy,gz)</p>

<p >&nbsp;&nbsp;print(p,y,y)</p>

<p >&nbsp;&nbsp;Draw_Pos(gui,p,r,y)</p>

<p >&nbsp;&nbsp;time.sleep(0.1)</p>
</div>

<p >&nbsp;</p>

<p >&nbsp;</p>

<h1 ><b>总结</b></h1>

<p >以上测试了六轴传感器的基本操作与姿态解算,基于完善的官方python库,能很快就完成基本的Demo。</p>

<p >基于此可以完成更多的有意义的项目,比如水平仪,角度仪,手势控制等。</p>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

freebsder 发表于 2022-11-28 16:28

<p>注释的不错,看得很清晰</p>

rainbowczj 发表于 2022-12-3 10:02

<p>学习了,非常感谢。</p>
页: [1]
查看完整版本: 【行空板 Python编程学习主控板】六轴加速度传感器可视化测试