---
# System prepended metadata

title: 2024/2/8
tags: [每日記錄]

---

##### tags:`每日記錄`

2024/2/8工程筆記 實到人數:3
===
##### 紀錄者:`林禾澤`
##### 指導老師:`張曦舫` `吳怡霆` `威宇老師`
`


## 任務一 :bumper

##### 負責人:`羅蓁妮`
## 任務二 :程式測試

##### 負責人:`郭庭瑋`
照片：
描述內容：測試Shooter在收Note跟射Note時的狀況
調整目標：Shooter的射擊程式

問題點：
1.捲入馬達轉動速度不足，會箝制摩擦射出的速度。(先前討論參見2/5號工程筆記)
2.緊迫螺絲會鬆動,橡膠輪位置會晃動。
3.在前面4顆馬達還未加速完全時後面的馬達就已經將Note送出去導致速度不夠。
4.Neo馬達扭力太小應換成1:4以提升速度。
5.Neo馬達超出底盤安檢可能不會過。
6.38馬達馬達有動但膠輪沒轉。

解決問題:
已知問題為:在前面4顆馬達還未加速完全時後面的馬達就已經將Note送出去導致速度不夠，若已程式的角度的話要提升射擊的速度大致有兩種解決方式，一為寫執行序讓前面馬達先動後面的馬達先睡眠一段時間，二為寫一個判斷式讓前面馬達到最高速後再讓後面馬達動。
在這裡我們選擇後者，因為如果寫執行序的話還要花時間去看馬達要多久才會到最高速，還不如直接判斷式就是馬達到達最高速。

所以我們直接建立一個Function來看馬達的速度
```java
public double getspeed(){
        return shootleft1.getEncoder().getVelocity();
    }
```

然後我們把它丟到儀表盤並在射擊時顯示
```java
   public void shooter(double shooterspeed) {
        shootleft1.set(shooterspeed);
        shootleft2.set(shooterspeed);
        SmartDashboard.putNumber("shooterspeed", shootleft1.getEncoder().getVelocity());
    }
```

最後我們發現馬達100%功率運轉的RPM是5000，於是我們就在Command裡加了這個判斷
```java
    m_ShooterSubsystem.shooter(shooterspeed);
        if (m_ShooterSubsystem.getspeed() > 5000) {
            m_ShooterSubsystem.upAxismotor(upAxisspeed);
        }
```
這樣我們就實現了讓前面馬達先到最高速後面馬達再轉的目的了。



待解決:2.4.5.6





## 任務三: Arm轉軸程式測試(PID測試)

##### 負責人:`郭庭瑋`

目標:
讓轉軸能夠以最快速度安全的到達目標點

大致流程:
我們會先給一個目標點為51.5度，然後初始角度大致為15度，接著我們會先從kp開始調整當它很接近目標但到不了點時我們就會加入ki，當我們發現可以準確到點之後我們會將我們預先寫好的保護機制(也就是輸出範圍)拉高。

測試過程:
一開始我們先計算了誤差值大約為36.5於是我們先把kp設定成0.01並將最大輸出範圍設定成0.35 ~ -0.35以確保不超過這個值，測試結果為大約到點47，因為這種PID的環境與場地也就是外在摩擦不太有關係因此無法只靠kp就完美到點，於是我們在此加入ki，但由於積分項不好計算，所以我們只是進行了簡單的乘法，並將我們的ki值設定在0.001，在測試過程中我們發現轉軸直接超過設定點往上衝，我們就馬上disable，因為依照之前的經驗下一瞬間機器的轉軸會馬上往下沖並在目標值附近擺盪，這是因為Ki值太大導致，所以為了避免機器損害所以我們就按了disable，後面我們將Ki值降低到0.0001機器就能準確的順利到點了，但由於這速度還是很慢，所以我們開始以每次0.2的速度慢慢拉高輸出範圍，但當我們慢慢拉到4.5之後我們發現速度好像跟一開始差不多，因此我們判斷可能是這組PID的最大輸出在輸出範圍之下，這樣的話我們不管怎麼拉高範圍速度都是一樣的，所以我們將馬達的速度放到儀表盤上來觀察馬達的最大輸出:
```java
public void shootershaftPID(double setpoint){
        shootershaftPID.setReference(setpoint,ControlType.kPosition);
        SmartDashboard.putNumber("shootershaftspeed", shootershaft.getAppliedOutput());
    }
```
在看到儀錶盤的數值後我們確定了馬達輸出確實沒有到達最大範圍，所以我們就不斷地將我們的KP跟KI調高以確認能夠一直保持在最大輸出範圍中，最後我們將我們的最大輸出範圍拉到1就完成了這次的測試。

結論:
這次測試雖然我們讓馬達達到設定點的速度最大值達到了1但它的最末點速度依然可以再拉高，所以之後我們可能會調整我們的KP讓速度更快。


* test video
{%youtube 67-ZfFmKZYA %}
* stage
經測試過後我們的機器可以完全穿過stage下方
{%youtube 7sJWYYU5fS4 %}


