小車轉(zhuǎn)向的調(diào)試與實現(xiàn)
怎么實現(xiàn)小車的90度轉(zhuǎn)向?
首先,在09_國產(chǎn)IMU移植及姿態(tài)解算.md里面我們可以獲取到小車的姿態(tài)信息,對應的轉(zhuǎn)向信息就是Yaw(偏航角)。
而在08_直流減速電機PID速度環(huán)與位置環(huán)調(diào)試中我們也可以準確控制小車輪子的轉(zhuǎn)速和轉(zhuǎn)多少個脈沖(也就是轉(zhuǎn)幾圈)了。
這樣實現(xiàn)小車的轉(zhuǎn)向就有了兩種方案了。一種是用Yaw(偏航角)作為測量值,想要轉(zhuǎn)的角度作為目標值,用PID驅(qū)動小車以一定的速度去旋轉(zhuǎn)來達到目標值。
第二種是在實現(xiàn)小車輪子位置環(huán)的基礎(chǔ)上,控制兩邊輪子同時向不同的方向旋轉(zhuǎn)一定的圈數(shù)(編碼器脈沖),在小車輪子不打滑的情況下轉(zhuǎn)過的角度就是一個確定的值,在送藥小車的地圖中,旋轉(zhuǎn)基本都是90度的,所以這種實現(xiàn)方法會很簡單也容易調(diào)試。
用角度環(huán)實現(xiàn)90度轉(zhuǎn)向
在pid_thread.c中實現(xiàn):
創(chuàng)建相應的PID控制參數(shù)的結(jié)構(gòu)體:
positional_pid_params_t car_angle_ring_pid;
初始化控制結(jié)構(gòu)體并修改kp ki kd:
//角度環(huán)配置 //角度環(huán) pid 參數(shù)初始化 positional_pid_init(&car_angle_ring_pid, 0.015, 0, 0, 0.1, 2, -2); //修改 角度環(huán) kp ki kd car_angle_ring_pid.positional_pid_set_value(&car_angle_ring_pid, 0.015, 0, 0);
在PID的軟件定時器回調(diào)函數(shù)中計算兩個輪子需要的速度:
// 小車角度環(huán) if (car_angle_ring_enable_flag == 1) { static float error = 0; error = turn_target - fusion_data.euler.euler.yaw; // 處理角度突變 if (error > 180.0f) error -= 360.0f; else if (error < -180.0f) error += 360.0f; angle_ring_speed_target = positional_pid_compute( &car_angle_ring_pid, error, fusion_data.euler.euler.yaw); } else { turn_target = fusion_data.euler.euler.yaw; angle_ring_speed_target = 0; }
打開角度環(huán)后他就會保持Yaw為0,如下面這個圖一樣:
下面是設(shè)定他靠角度換旋轉(zhuǎn)90度的效果:
用位置環(huán)實現(xiàn)90度轉(zhuǎn)向
還是在pid_thread.c中實現(xiàn):
在08_直流減速電機PID速度環(huán)與位置環(huán)調(diào)試已經(jīng)可以讓輪子轉(zhuǎn)固定的脈沖(圈數(shù))了,直接把對應的目標值加給電機1和電機2的位置目標就可以了。
// 位置式旋轉(zhuǎn),負數(shù)左轉(zhuǎn),正數(shù)右轉(zhuǎn)。 void car_spin_position(int32_t _position_target) { motor1_position_target += -_position_target; motor2_position_target -= _position_target; }
在實際實現(xiàn)中,如下面的gif圖所示:
審核編輯 黃宇
-
電機
+關(guān)注
關(guān)注
143文章
9265瀏覽量
148639 -
PID
+關(guān)注
關(guān)注
37文章
1480瀏覽量
87540 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5589瀏覽量
103099
發(fā)布評論請先 登錄
有ARM,NPU,F(xiàn)PGA三種核心的開發(fā)板 — 米爾安路飛龍派開發(fā)板

直接送!50套小安派 BW21-CBV-Kit Ai圖像識別開發(fā)板!

deepin 23+樹莓派讓小車動起來

ARM開發(fā)板與樹莓派的比較
自適應藍牙控制智能小車
授人以漁,24電賽H題完賽資料開源,思想開源-(1)硬件講解

PY32F002A單片機開發(fā)板 PY32F002AF15P6開發(fā)板 32位MCU,M0+內(nèi)核

樹莓派和arm開發(fā)板的區(qū)別
linux開發(fā)板與樹莓派的區(qū)別
19.3-星曈科技 openmv Hopenmv發(fā)送五個uchar Openmv+STM32F103C8T6視覺巡線小車 STM32循跡小車系列教程

19.4-STM32接收數(shù)據(jù)-狀態(tài)顯示在屏幕 openMV尋跡與小車控制 Openmv+STM32F103C8T6視覺巡線小車

【核桃派ZeroW開發(fā)板體驗連載】核桃派ZeroW開發(fā)板拆箱、組裝、上電,
【GD32F303紅楓派開發(fā)板使用手冊】第二十講 SPI-SPI NAND FLASH讀寫實驗

評論