電磁直立日記 01

2021-08-16 02:13:58 字數 3001 閱讀 6870

3/3   這兩天速度有點慢,別人不到半天搞出來的uart通訊我花了兩天,知道如何通過檢視龍邱的庫(我買的套件全是龍邱的)來修改逐飛的庫,用以前寫stm32的xcom(串列埠傳送)來接收uart傳送的脈衝資料,學長教我用sprintf函式可以實現把任何型別轉換為字元型輸出(我原來uint16的脈衝值輸出到串列埠全是亂碼),結果是可以輸出,但是一旦值上千就全是亂碼,匿名的上位機還不知道什麼情況,估計和xcom一樣,暫時不打算再研究為何是亂碼了,因為iar的除錯可以每1000ms檢視脈衝值,不需要弄到上位機上看。目前亂碼估計就是資料型別方面出現了溢位。

5/3  今天搞懂了cannot open file"8700_2100.h"檔案的原因,在options裡c/c++complier裡要包含檔案。今天浩哥pid直立調的差不多了,我卻還沒弄好mpu6050程式,差他3~5天進度,現在浩哥給我他正在調的程式,什麼都有了,但不是我會的,按理來說這不是危機,而是好機會,你如何利用他的程式,來加快進度(跟快的懂,但一定要懂)。我要盡快看懂pid(原理不用太怎麼看了,基本上**),沒你想的那麼可怕,他並沒有比你積累很多,只是幾天而已又不是幾月。我現在如果把它程式看懂,知道波形如何出來(有問題及時交流),明白pid調什麼,怎麼調。現在他的程式裡卡爾曼濾波,角速度計算等不懂。估計看懂也得兩三天,反正我是一定不要去寫,而是在他的基礎上調其他的,我想成為他的理論顧問,而我只用看他的**。以後我寫其他模組,永遠明白我們是要搞團隊合作,而不是只顧追求個人能力,既然現在能力不足,就虛心學習,何樂而不為呢?

7/3   今天上課比較多,學了三小時,把直立要調的東西來來回回又看了,還看了平衡車資料,豐富了關於九軸資料採集使用的融和(加速度計測量的角度和陀螺儀測量的角速度積分後兩感測器通過卡爾曼濾波實現採集)

8/3   今天把平衡控制的**看得似懂非懂,卡爾曼看不懂,但知道是把九軸測量的角速度和角。為何說加速度計可以測量角度,實際上測量的是角加速度,然後通過反三角函式

angle_y

=atan2(

accel_y,accel_z

)*180/pi     求得角度,陀螺儀直接測得的角速度。國二程式裡採集的都是通過ad轉換來的,而九軸實際上採集到的資料已經是ad轉換過了的,所有可以直接通過iic獲取,浩哥把int16的acc_z/12除錯出來是5(acc_z=16912),後面改了資料型別(int16)(float(acc_z)/12)就沒問題了。

9/3 10/3  11/3 九軸採集的資料卡死(棘手),硬體:供電不穩定  電磁干擾  軟體:全域性變數太多,被重複賦值  融合演算法有毛病  

12/3  開始參考國一程式寫**,由於課多,寫到採集九軸資料時比較慢,實在是理解不夠。

13/3  下午看到了浩哥發的《陀螺儀和加速度計指南》,這是見過最有價值的文件之一,把原理通俗易懂的講解,花了三小時了解,但卡爾曼濾波中要改變的q_angle和q_acc等引數不懂,看了文件還是沒懂,一天都在到處說話浪費了點時間,沒做什麼

14/3  開始自己寫直立函式,頭緒很亂

15/3

問題很多,特別是自己建立檔案的時候,遇到最大的問題就是找不到「add.h"檔案,現在還是沒搞懂原理,但是在mr_song裡copy了inc和src並同時把自己建立的".c"和".h"檔案分別放入但還是沒用,最後在iar/program裡直接放.c檔案就沒問題了,希望去解決原理

16/3  今天終於把程式bug都解決了,但是中斷居然不輸出資料了,最後發現把資料傳送到上位機的占用時間太長,不應該放在pit中斷裡,但具體的中斷原理還是不懂,就待解決

17/3 把採集mpu6050的函式放在pit中斷後發現又沒有資料了,通過標誌位發現中斷有執行,可是無論把中斷時間擴大多少都沒資料,最終發現是接線問題而不是程式。

18/3  

19/3

20/3  終於弄懂mpu6050方向,對於朝陀螺儀y軸正半軸看,順時針旋轉角速度<0,對於加速度計x軸若朝水平面以上則》0,但自己車模限制了它只能朝下,故<0.

21/3   和浩哥去問了學長終於發現用卓晴的互補濾波比卡爾曼好,互補濾波的角速度跟隨性比卡爾曼好,所以車直立情況比較好也比較硬,而卡爾曼無論如何調節pd都要麼抖動太大要麼反應太慢太軟

22/3    終於解決自己的程式為何左輪不轉右輪轉,由於右輪沒改引腳口,同時占空比沒有負的原因是作為判斷的變數是uin32

23/3 研究了許久卓晴的方案,多少懂了原理,結合自己對脈衝採集的理解,不轉換成轉速而是直接用脈衝。現在完全使用卓晴的方案。

24/3 現在整個框架都寫好了,把速度環和轉向環都遮蔽後調直立環,發現車若開啟的位置接近平衡位置則車能較好地穩定,但一旦給外力就不停擺動,也就是沒有出現高頻抖動,而是大擺動

25/3  中午問了一下學長為何車不斷擺動,機械上:陀螺儀沒有跟車輪的軸在一條線上,造成誤差較大。軟體上:微分太大(實際上加大後不擺了,只是朝乙個方向前進。學長特別指明:電機力矩或力量不夠大,應疊加死區

26/3  搞了一天matlab

27/3   還在調直立,若角度給錯,沒有速度環,依然會往前或往後(給21.6°則勻速往前,給16.4則勻速往後。給19°能在20cm內來回擺動)。左輪死區值70,右輪40時,兩輪能相對直線。現在d從0.02(高頻抖動)——>0.005(高頻抖動)——>0(還是高頻抖動)。(((mpu_acc_angle-g_fcarangle)*0.5——>0.1,高頻抖動消減了一點,但無法穩定在一點。

0.35*g_fgyroscopeanglespeed  0.35也高頻抖動,但是很軟。

28/3 angle_control_d=0.05,抖動更小一點,但電池電量不足也會導致抖動小且軟

29/3無論任何調節,最好有理論基礎,亂調效率最低。我發現為何給的角度太大車就一直往前而不停?因為你pwm輸出限幅50%了。理論說會有積分飽和,故需要控制。今天又明白了」加權「,其實在清華濾波演算法框圖中,1/tg和所說的z軸比例就是兩個加權(0~1).  採用卓晴的轉速表示時**/s)不再猛跑了,但是存在:1.積分飽和,即隨時間跑速不斷增加。只要一開主控,就開始積分。但先開電機後開主控一開始車會向前倒下,然後自己站起來往前跑

30/3  今天弄oled發現顯示亂碼,原因是不知道oled所能顯示字元的長度,比如angle_control_p就太長,超出了oled顯示,所以資料跳動,故需要要縮短名字,但其缺點是不能改變程式的值,並且掉電後oled值全部重置(白調)。

智慧型車 直立電磁組 前期的一些總結

關於車的前瞻 需要一定的前瞻保證提前檢測到道路前方的資訊,在入彎時需要減速,出彎時需要加速,而加減速需要一定的距離,所以前瞻理論上應該至少等於感測器採集資料週期內車子前進的距離 加速或減速需要的距離。目前看來前瞻的作用更多體現在提前轉彎,在速度快時,提前轉彎顯得尤為重要。而且前瞻越大以後過小s彎時車...

shell程式設計日記 01

第一天 shabang 要學習 l inux 就要熟悉 l inux 的命令,但是 l inux 的命令太多.而且不是每乙個都那麼好記住.是不是有一種方法可以把常用的命令組合再一起.像 windows 下批處理一樣方便呢?答案是有的.可以使用linux 的shell 程式設計來滿足我們的需求.而且s...

OSG學習日記01

環境配置 參考部落格win10系統下0sg vs2017環境配置 在環境配置好後輸入部落格中的 include stdafx.h include include int main int argc,char argv 出現編譯錯誤 1 d windows kits 10 include 10.0.1...