由於接觸陀螺儀比較長時間了,一直有乙個念想,就是做乙個自己的陀螺儀3d模型顯示,功夫不負有心人,終於某個早晨在乙個技術群裡發現了有processing這個軟體可以比較簡單的實現(雖然之前也知道c#等這些傳統意義上的上位機豪強可以實現,但總歸有些生疏隔閡一般,再乙個也是基於時間成本考慮)。於是乎花了一天的時間將這個3d模型做了出來,效果還不錯,嘻嘻?~
在這期間遇到了乙個問題,在學長的幫助下成功解決,現在來描述一下這個具體過程:
首先有些東西必須描述清楚:
陀螺儀得出來得角度是有正有負串列埠每次只能發1byte,也就是8bits在這兩個大前提下,問題就慢慢顯露了出來。首先1byte最大能表示2^8=255,難道還要我陀螺儀轉的角度不超過255°不成,那顯然是byte太刁蠻了,你byte表示不了這麼多關我陀螺儀什麼事對吧。這裡就是第乙個問題,陀螺儀得角度超過255時導致byte溢位又直接回到0,試著想一下3d模型上轉了200多度了再繼續轉直接給你回到到0度,就像向日葵跟著太陽自東向西,第二天乙個猛回頭從西邊甩到東邊,這誰受得了?
第二個問題也呼應了標題,串列埠不能發負數的問題。這裡要來一波小定義:byte資料型別(位元組型)用乙個位元組(byte)儲存,可區別256個數字,取值範圍:0-255。byte是0-255的 無符號型別,所以不能表示負數。這也就是為什麼串列埠傳送資料發不過去的原因了。在3d的現象就是順時針模型跟著動,逆時針就不動了。
直接上**吧,有緣人就看著?,反正筆記也是我自己看?
arduino的**:
#include
#include
mpu6050 mpu6050(wire);
int inbyte = 0; // incoming serial byte
int pit,rol,yaw; //角度值
int pit_h,rol_h,yaw_h; //角度高八位
int pit_l,rol_l,yaw_l; //角度低八位
int pit_flag=0,rol_flag=0,yaw_flag=0; //角度正負標誌位
void setup()
void loop()
else if(pit>0 && pit<=255-1)
else if(pit < -255+1)
else
/**********************************/
if(rol > 255-1)
else if(rol>0 && rol<=255-1)
else if(rol < -255+1)
else
/**********************************/
if(yaw > 255-1)
else if(yaw>0 && yaw<=255-1)
else if(yaw
else
serial.write(pit_h);
serial.write(pit_l);
serial.write(rol_h);
serial.write(rol_l);
serial.write(yaw_h);
serial.write(yaw_l);
serial.write(pit_flag);
serial.write(rol_flag);
serial.write(yaw_flag);
/**************這裡注釋的供除錯時看資料用*******************/
/*
serial.print("pit:");
serial.print(pit);
serial.print(" rol:");
serial.print(rol);
serial.print(" yaw:");
serial.println(yaw);
*/
}
/***************與processing確認連線*********************/
void establishcontact()
}
processing的**:
import processing.serial.*;
serial myport;
int serialinarray = new int[9];
int serialcount = 0;
int pit,rol,yaw;
int pit_last,rol_last,yaw_last;
boolean firstcontact = false;
void setup()
float i = 0,j = 0,k = 0;
void draw()
void serialevent(serial myport)
}
else
}
}
陀螺儀的學習
從陀螺儀得到x y z三個角速度後就需要通過積分來得到角度,事實上,經過簡單的積分是得不到正確的角度的,更得不到尤拉角,在這裡說一下通過的runge kunta更新四元數,從而對角速度積分得到角度的過程。四元數能到快速的發展,得益於飛行器控制與導航的發展,要求更合理的描述剛體空間的運動,以便於計算機...
陀螺儀工作原理
陀螺儀是用來測量平衡和轉速的工具,在載體高速轉動的時候,陀螺儀始終要通過自我調節,使得轉子保持原有的平衡,這一點是如何做到的?帶著這個問題,我們來看一下這個古老而又神秘的裝置的工作原理。我把三個gimbal環用不同的顏色做了標記,底部三個軸向,rgb分別對應xyz。假設現在這個陀螺儀被放在一艘船上,...
陀螺儀工作原理
我們知道陀螺儀使用來測量平衡和轉速的工具,在載體高速轉動的時候,陀螺儀始終要通過自我調節,使得轉子保持原有的平衡,這一點是如何做到的?帶著這個問題,我們來看一下這個古老而又神秘的裝置的工作原理。我把三個gimbal環用不同的顏色做了標記,底部三個軸向,rgb分別對應xyz。假設現在這個陀螺儀被放在一...