# AUV交接報告 - 軟體組 ###### tags: `2021交接` [TOC] ## 控制組 ### 技術進步 #### 控制方式 1. 整合IMU和壓力計的資訊並透過PID來控制馬達輸出 2. 利用keyboard或joystick搖桿操控潛水艇 3. 視覺追蹤指令 #### 統一的指令接口 上述方式,會轉成統一的指令{forward, backward, up, down, ...}再輸出成馬達力道訊號。 #### PID class - pid_attitude 控制水平姿態的平衡 - pid_depth 控制垂直深度的平衡 - Class/pid_class 最上層的class(可以不修改) - UI/ 利用UI來顯示潛水艇資訊and控制潛水艇and調整PID參數 #### 將code分類整理 有以下幾個子目錄: - cmd 控制指令等 - motor 計算合力,輸出給pwm開發版等 - nonROS 手動reset arduino,控制機械手臂(目前報銷) - pid pid class implementaion - sensor 利用Serial port接收arduino的sensor資料 ### 檢討 1. 納入數學考量,加入模型 **線性數學模型** -力學模型可以減輕控制方面的負擔 -如果可以,將潛水艇的transfer function找出來 2. 馬達 -測量控制訊號與馬達實際輸出力道 -抵銷力矩 3. 控制器 -選擇使用PID->調整參數讓整體系統反應速度加快 -選擇使用其他控制器->自行研究 4. 繼續完善GUI -顯示潛水艇資訊(深度、姿態、電量、PID參數...) -控制潛水艇移動(keyboard or joystick...) -方便調整PID參數 5. 與聲納等sensor整合 -建立地形 -最終目標是路線規劃 6. 增加更多種移動方式 ### QA - 系統反應不夠快,所以不好走直線,或是做完指令後需要平衡,沒辦法馬上做下一個指令 - 找老師拿六軸感測器 - [phabricator](https://www.phacility.com/phabricator/) - 線性控制系統 ### 馬達控制 #### 概括 馬達([T200](https://bypass.bluerobotics.com/store/thrusters/t100-t200-thrusters/t200-thruster-r2-rp/))利用pwm訊號接受控制,所以利用RPI外接PWM Signal 擴充版(PCA9685)。 > 因為rpi的pwm主要是軟體模擬,可能在運算量大了時候不穩,而且硬體計算pin也不夠。 #### PCA9685 [別人的介紹](https://www.taiwaniot.com.tw/product/%E5%8E%9F%E5%BB%A0-pca9685-16%E8%B7%AF%E8%88%B5%E6%A9%9F%E6%8E%A7%E5%88%B6%E6%93%B4%E5%B1%95%E6%9D%BF-16%E8%B7%AF12-bit-pwm%E6%8E%A7%E5%88%B6%E6%9D%BF/)(我懶得打.jpg) 重點: 1. 16個output channel 2. I2C 通訊協定 [**仔細der教學**](http://blog.ittraining.com.tw/2015/07/raspberry-pi2-python-i2c-16-pwm-pca9685.html) 重點: 1. 須設定PWM Frequency 2. I2C Address: x40 3. 有睡眠模式 4. 只要傳輸一次指令,輸出就會持續維持 #### T200 [Datesheet](https://cad.bluerobotics.com/T200-Public-Performance-Data-10-20V-September-2019.xlsx ) [Technical Details](https://bypass.bluerobotics.com/store/thrusters/t100-t200-thrusters/t200-thruster-r2-rp/#tab-technical-details) 1. ESC是認logic high的持續時間 e.g.1500us,而非duty cycle 2. 不過用示波器看他自己也沒有很準 3. 根據上面的datasheet,可以力量與PWM的對應關係,其餘的部分就是用插值搞定 #### Note 1. 主要架構是由PID或其他Node算出各自馬達的力,再交由*motor_force_summation*將所有力相加起來(假設直接線性相加) 2. 得到各個馬達力的最終輸出後,交由*motor_output*將力插值轉成控制訊號輸出給PCA9685 3. 由於PCA9685的frequency與T200 ESC都沒有很準,所以控制訊號還要再經過一次mapping(測出來)才會對應到1500us 4. 由於3,理想上*motor_force_summation*的輸出值的單位即為kgf,但最後可能有被乘上一個倍率 5. 由於3,所以可以測試看看輸出力道與控制訊號的關係,對以後有幫助 --- ## 水聽組 ### 技術進步 1. 水聽技術從TDOA升級為MUSIC演算法 3. 運用聲納的地形圖做路徑規劃 ### 檢討 1. 水下麥克風壞掉,無法測試MUSIC演算法的準確度 2. 希望可以多理解MUSIC演算法的數學意義 3. 麥克風買便宜一點 4. 日後將路徑規劃與PID結合 ### QA - 聯絡廠家-修復麥克風 - --- ## 視覺辨識組 ### 技術進步 - [x] 縮短 Training Model 的時間以及配備 - 3 days -> 10 hrs (也可以用基隆借我們的,可以快點train一些,不知道甚麼時候要回去) - 桌機 -> Google Colab - [x] FPS測試 - Yolov3 (5fps) - Yolov3-tiny (18fps) - Yolov4 (5fps) - Yolov4-tiny (18.2fps) - [x] Collect [dataset(door, ball)](https://drive.google.com/drive/folders/1PqqKdBjH2NxJGJN0970ClyN1h9n-mVan?usp=sharing) and [bag files](https://drive.google.com/drive/folders/1d7QCEIXzq5kt159dRXqsJVGshUSjRFy_?usp=sharing) - [x] 成功訓練模型且成功辨識物體 - [video](https://drive.google.com/file/d/1dm6BNA1v_yT261lE5bJoBWOncnBN3uZo/view?usp=sharing) - [x] [Finite State Machine](https://photos.google.com/share/AF1QipN7WGlcyEAhIWYt-P4e_L4qWHSjDW8FOWjDQIYhb9Z-FeAmmWqKM7lv9wrO2KurTA/photo/AF1QipN0S5DwkzXs6iw7m4P366YpFQ9BUBlKGCwEughK?key=Q1BjTXVHV19DOFpEYUw2QWtWNmVJRFNicE4taGVB) 追蹤球球 - [x] 持續更新code在[github](https://github.com/NCTU-AUV/auv_track) - Tutorial - 訓練模型(by 君瀚)https://hackmd.io/nhRoiaYTSCKfT5MroaI-6Q?view ### 檢討 :::success 1. FPS還是偏低,可以嘗試yolov5一些更快的模型 2. 整體code還是在別人寫好的框架底下,可以自己設計好一個框架,只要讀取 weight就可以使用就好 3. 把一些平常遇不到的node都關掉,應該可以減少一些消耗 ::: :::warning 4. 可以嘗試用 [gmapping](http://wiki.ros.org/gmapping)這個package,可以把水下聲納的laser-scan轉換成grid map,應該可以幫助潛水艇做好路徑規劃 ![](https://i.imgur.com/Snm4cxg.png) ![](https://i.imgur.com/sJGmlOa.jpg) ::: ::: danger 5. 可以把潛水艇的相關tf固定好,就可以去跑gazebo模擬 ![](https://i.imgur.com/WWJxnFi.jpg) :::