送藥小車代碼倉庫:https://gitee.com/lcsc/medical_car
更好的觀看體驗請去:https://lceda001.feishu.cn/wiki/ZDYbwqDfCiwVlckUEcScF0KSnRh
送藥小車立創開源平臺資料:https://oshwhub.com/li-chuang-kai-fa-ban/21-dian-sai-f-ti-zhi-neng-song-yao-xiao-che
小車尋紅線環的調試與實現
一般我們在小車比賽中最常用的是光電二極管灰度傳感器,但是這里我們已經有K210識別到的紅色色塊坐標了。所以在地圖中的尋紅線是在K210返回來的色塊坐標基礎上進行的。
依靠K210返回來的巡線中線偏移,對于PID控制來說,測量值是紅線相較屏幕中線的偏移,目標值是想讓紅線偏移為0,輸出值是電機的速度。
根據14_立創梁山派與K210串口通信協議框架搭建.md文檔我們的立創梁山派已經可以獲取到色塊的坐標了。接下來就可以參考10_小車角度環的調試與實現.md文檔來實現了。
用K210發送過來的數據實現尋紅線
還是在pid_thread.c中實現(和文檔10_小車角度環的調試與實現中是一樣的套路):
創建相應的PID控制參數的結構體:
positional_pid_params_t red_lines_pid;
初始化控制結構體并修改kp ki kd(因為已經有速度環了,兩邊輪子轉速基本是一樣的,所以kp取的是比較小的):
// 巡紅線回中pid配置 // 尋紅線 pid 參數初始化 positional_pid_init(&red_lines_pid, 0.004, 0, 0, 5, 1.5, -1.5); // 修改 尋紅線 kp ki kd red_lines_pid.positional_pid_set_value(&red_lines_pid, 0.005, 0, 0.0005);
在PID的軟件定時器回調函數中計算兩個輪子需要的速度:
// 巡紅線環 if (car_find_red_line_enable_flag == 1) { red_lines_result_motor1_speed_target = positional_pid_compute( &red_lines_pid, red_lines_target, lines_offset); } else { red_lines_result_motor1_speed_target = 0; }
在打開巡紅線環后,給小車一個運行速度,如果能能識別到紅線并成功傳輸給立創梁山派,此時小車就可以沿著紅線前進了。
最終就是各個外環計算出來的速度一起加起來給速度環(內環):
motor1_speed_target = raw_target_speed + red_lines_result_motor1_speed_target + position_result_motor1_speed_target + angle_ring_speed_target; motor2_speed_target = raw_target_speed + (-red_lines_result_motor1_speed_target) + position_result_motor2_speed_target - angle_ring_speed_target;
在實際運行時,巡線時打開尋紅線環,關閉角度環(或位置環)。轉彎時關閉巡紅線環,打開角度環(或位置環)。
審核編輯 黃宇
-
PID
+關注
關注
35文章
1473瀏覽量
85826 -
調試
+關注
關注
7文章
589瀏覽量
34065 -
開發板
+關注
關注
25文章
5121瀏覽量
98218 -
智能小車
+關注
關注
87文章
549瀏覽量
81862 -
智能循跡小車
+關注
關注
1文章
11瀏覽量
10613
發布評論請先 登錄
相關推薦
評論