---
# System prepended metadata

title: 昱翔的工作筆記

---

# 昱翔的工作筆記 
## command based 介紹
command-based 是讓code更有可讀性，也讓程式更好的修改，是一種design pattern,也是declarative programming的實做。

> ###  design pattern
> 相關閱讀連結：[我為什麼想學設計模式 ( Design Pattern )](https://ithelp.ithome.com.tw/articles/10201706) 
> 相關影片連結：[軟體工程師為什麼要學 Design Pattern? | 物件導向 | SOLID | 工程師 Nic )](https://www.youtube.com/watch?v=pkm5jQfnKGs&t=2s) 
> 
> 設計模式並不直接用來完成程式碼的編寫，而是描述在各種不同情況下，要怎麼解決問題的一種方案。物件導向設計模式通常以類別或物件來描述其中的關係和相互作用，但不涉及用來完成應用程式的特定類別或物件。設計模式能使不穩定依賴於相對穩定、具體依賴於相對抽象，避免會引起麻煩的緊耦合，

>### declarative programming
>相關閱讀連結：[Imperative programming vs Declarative programming | 輕鬆讀懂命令式與宣告式函式
](https://medium.com/@chih.hsi.chen/imperative-programming-vs-declarative-programming-%E8%BC%95%E9%AC%86%E8%AE%80%E6%87%82%E5%91%BD%E4%BB%A4%E5%BC%8F%E8%88%87%E5%AE%A3%E5%91%8A%E5%BC%8F%E5%87%BD%E5%BC%8F-75a1ea80b6d8) 
所謂的命令式函式就是以我們的口吻來描述該「如何」達到我們的目的，接下來只要跑我們所寫的程式，就能得到我們想要的「結果」。
相對於命令式函式，宣告式函式只需要我們告訴他需要「什麼」，由他來決定該「如何」實現。

----

## Subsystems and Commands

![](https://i.imgur.com/7MWfOur.png)

### Subsystems（低階code)
`Subsystem`檔案是對應到硬體的code，例如限制機器人的手臂做怎樣的事情。 

### commands (高階code)
`Command`檔案是命令機器人做怎樣動作的指令，例如移動到目的地。這時候就會跟finite-state machine (FSM)有點相關了。

>### finite-state machine (FSM)
>相關閱讀連結：[什麼是「有限狀態機」？
](https://ithelp.ithome.com.tw/articles/10225343) 
定義全部的狀態以及他們之間的關係。

## How Commands Are Run ？

`CommandScheduler`檔案是負責來跑前面寫的command, 他是採用 singleton class 的方式運作。
運行command會先運行`initialize()`,`CommandScheduler.getInstance().run()` ,`execute()`。

確認command的執行是否完成是`isFinished()`。


>### finite-state machine (FSM)
>相關閱讀連結：[什麼是「有限狀態機」？
](https://ithelp.ithome.com.tw/articles/10225343) 
定義全部的狀態以及他們之間的關係。


>### finite-state machine (FSM)
>相關閱讀連結：[什麼是「有限狀態機」？
](https://dotblogs.com.tw/leo_codespace/2017/06/03/204504) 
定義全部的狀態以及他們之間的關係。


## Command Groups





## charaterize 
![](https://i.imgur.com/ogczijZ.png)

kS : 克服馬達阻力的最低電壓
kV : 維持速度的最低電壓


