番外編｜制御班体験会 ~Dynamixelを触ろう~

（本記事は岐阜大学ロボコンサークルの2023年度制御班体験会にて使用しているものです）
# 目標はこれ
Dynamixelサーボモーターを個人のPCからUSB経由で操作する。
このとき簡単にPythonに触れて、ちょっとしたアレンジができるようになる。
# さっそく始めよう！
※ 記事を丁寧に読んで進めてください。
## <span style="color:red;">以下空いている時間を使用してU2D2 Hub Boardの組み立てやDynamixelの準備を行なうとよい</span>
## 手順1. Anacondaをインストールしよう
[Free Download | Anaconda](https://www.anaconda.com/download)
ここから普通にダウンロード・インストールする。
なお、インストール時にインストール場所を聞かれるが、このインストール場所をWindowsのメモ帳か何かにコピペしておく。
他は特にいじらずにひたすら「次へ」を押す。
無事完了すればOK。
## 手順2. AnacondaのPATHを通そう
1. Windowsの下の検索バーで「システム」と検索し、候補に挙がる「システム環境変数の編集」を開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3295530/c79006d5-4c67-16e3-024f-e633882b23dd.png)

2. 表示される下画像左側のような画面のなかから「環境変数」のボタンをクリック。
3. クリックすると下画像右側のような画面が出てくるので、その中の**システム環境変数**の中の**Path**という部分をクリックして青い選択状態にしたら**画面右下の「編集**」をおす。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3295530/22e06d14-71f6-ef3d-1170-8b5a46ebfa3f.png)

4. 下のような画面が表示されるので、右上の「新規」を押して「参照」を押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3295530/491fe05f-1dc7-295b-3f1f-98155f4884c4.png)

5. このような画面が表示されたら下画像のように「**PC」→「OS(C:)**」をクリックしてその先も同様に「**OS(C:)**」の中の「**ユーザー」→「(自分のユーザー名)**」とたどってその中の「**anaconda3**」のフォルダを選択し右下のOKを押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3295530/4ef04b26-ad55-9ed0-f92c-c5c7f14d8a25.png)

6. すると「環境変数名の編集」の画面にて「**C:\Users\(自分のユーザー名)\anaconda3**」の1行が追加されていることを確認する。
<span style="color:red;">※「\」が「￥」で表示されていても問題ない。</span>
7.  同様にして「**PC」→「OS(C:)」→「ユーザー」→「(自分のユーザー名)」→「anaconda3」→「Library」→「mingw-w64」→「bin**」でOKを押す。
8.  同様にして「**PC」→「OS(C:)」→「ユーザー」→「(自分のユーザー名)」→「anaconda3」→「Library」→「usr」→「bin**」でOKを押す
9.  同様にして「**PC」→「OS(C:)」→「ユーザー」→「(自分のユーザー名)」→「anaconda3」→「Library」→「bin**」でOKを押す
10.  同様にして「**PC」→「OS(C:)」→「ユーザー」→「(自分のユーザー名)」→「anaconda3」→「Scripts**」でOKを押す
11. ここまでやって同様に「環境変数名の編集」の画面にて下の5行があることを確認。
```
C:\Users\(自分のユーザー名)\anaconda3
C:\Users\(自分のユーザー名)\anaconda3\Library\mingw-w64\bin
C:\Users\(自分のユーザー名)\anaconda3\Library\usr\bin
C:\Users\(自分のユーザー名)\anaconda3\Library\bin
C:\Users\(自分のユーザー名)\anaconda3\Scripts
```
確認出来たら、ここまでで開いた画面ですべてOKを押して閉じる。

> 参考：[【Windows】Anaconda3における環境変数への追加方法【Python】](https://pyming.info/2022/06/06/anaconda_env_variable/)

## <span style="color:red;">追加し終わったらPCを再起動</span>
再起動したら、PCのコマンドプロンプトを開いて`conda info -e`と入力して赤字のエラーが出なければOK！
## 手順3. VSCodeと拡張機能をインストールしよう
[Visual Studio Code - Code Editing. Redefined](https://code.visualstudio.com/)
ここからダウンロードして特に何もいじらずインストールする。

インストール出来たらPython拡張機能「Python Extention Pack」を入れる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3295530/7b35ca65-53e1-5889-4a2e-defc5de3afa8.png)

**同様にして、日本語化拡張機能も入れる（検索画面から「Japanese」で検索）**

ここまで出来たら自動保存の設定をする。下参照。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3295530/a63ff756-597c-ee72-f063-61c14606a8f3.png)

ここまで出来たら一度HelloWorldで実行できるか確認する。
…参照　[1. 最速習得！Pythonでプログラミング自由自在！ - Qiita](https://qiita.com/g_robo/items/7c2a5bd300fa92dc69d4)

上手くHelloWorldできてたらOK！
## 手順5.GithubからDynamixel_tutorialをダウンロードしよう
[G-robo/Dynamixel_tutorial](https://github.com/G-robo/Dynamixel_tutorial)
上のGitHubからZipで必要なファイル・ライブラリをダウンロードする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3295530/b6b7091e-da6e-d156-18e1-be0bf1bdf05d.png)

ダウンロード出来たら解凍。
> <span style="color:red;">※解凍とは</span>
> zip形式とはファイルのサイズを圧縮して小さくなっている状態です。
> 解凍したいzipファイルを**右クリック**するといくつか表示される選択肢の中に「**すべて展開**」というものがあるはずです。それをクリックしてOKを押したら解凍が始まり、しばらくして無事終了したらOKです。
すると、zipファイルの近くに「.zip」じゃない同じ名前のフォルダが確認できるはずです。確認出来たら元のzipファイルは要らないので削除してください。以後この「.zip」じゃない同じ名前のフォルダを「解凍したフォルダ」と呼びます（一般用語です）。

解凍したフォルダをVSCodeで開きます。
開いたらDynamixelSDKフォルダの中にあるpythonフォルダを右クリック
「統合ターミナルで開く」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3295530/50f13a48-f733-cd3b-01d3-89169fd9c52e.png)

<span style="color:red;">このとき開かれるターミナルが「コマンドプロンプト」であることを確認。</span>

ターミナルが開いたらそこで`python setup.py install`と入力し セットアップする。
それっぽい表示が出たらOK。

## 手順6. サンプルプログラムを動かそう
**Dynamixel_tutorial >DynamixelSDK > python> tests > protocol2_0 のフォルダを開き
read_write.pyをクリック、プログラムコードの中の104行目にある`DEVICENAME  = '/dev/ttyUSB0'`の部分を下の手順に沿って書き換える。**
### 手順：
0、Dynamixel及びU2D2をPCにUSBで接続する。このとき、U2D2 hub boradにACアダプターを差して、電源をオンにしておく。
１、Windowsからデバイスマネージャーを開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3295530/26945e56-4914-caeb-9c95-e8c6c27f2e6b.png)

２、「ポート（COMとLPT）」をクリックして「COM？」と表示されている番号を確認。
> <span style="color:red;">※  ここで「ポート（COMとLPT）」が表示されず、「その他」に「usb>> serial-converter」が表示されている場合</span>
> →　[CDM212364_Setup.zip (2.2 MB)](https://esa-storage-tokyo.s3-ap-northeast-1.amazonaws.com/uploads/production/attachments/12504/2023/05/14/108543/ee42ce47-5c70-45ba-b4f1-401f241df085.zip)　←　ここをクリックして、Zipをダウンロードして**解凍**する（右クリック→「すべて展開」→OK→.zipファイルを削除）。解凍したフォルダの中にある「.exe」ファイルをダブルクリックして実行。指示に従って適当にOK、OKと押していく。特にいじらなくてOK。最後まで行ってインストール出来たっぽければ閉じる。もう一度デバイスマネージャーを確認して「ポート（COMとLPT）」→「COM？」が表示されていれば完了！元のCDM212364_Setupフォルダは削除してOK。

３、先ほどのプログラムの104行目を`DEVICENAME  = 'COM？'`のように書き換える。
 <span style="color:red;">※COM?をシングルクオーテーション`' '`で挟むことに注意（Shit+7キー）</span>

ここまで出来たら**実行**。
**※ read_write.pyが画面に表示されている状態で、右上の△マークをクリック。すると統合ターミナルで**
```
Press any key to continue! (or press ESC to quit!)
```
の表示がされることを確認して、統合ターミナル上のどこかを一度クリックして選択状態にしておく。
（**早い話が、右上の△マークをクリックした後は「Press any key to continue! (or press ESC to quit!)」の文字周辺を一度クリックする。**）

そして、なにかキーボードをたたくたびに回転すればOK。
 <span style="color:red;">※ 終了するときはCtrlキーを押しながらcキーを押せば終了する（強制終了コマンド）。</span>
**動かないときの対処法**
・エラーが出ている→読んだり調べたりする。
・謎（もう箱が開けてあったDynamixelを使用している）→一度read_write.pyと同じフォルダにある「factory_reset.py」を実行（もちろん同様にCOM？に書き換える）してからもう一度read_write.pyを実行する。
## 手順7. 他のプログラムも実行してみよう！
「Dynamixel_tutorial」の中にあるsample_position.pyやsample_velocity.pyも実行してみよう。
実験：キーボードの右矢印キーや左矢印キーを押すとどうなりますか？
 <span style="color:red;">※ 終了するときはCtrlキーを押しながらcキーを押せば終了する（強制終了コマンド）。</span>

詳しい解説 > [2. 最先端サーボモーター「Dynamixel」を自由自在に動かそう！ - Qiita](https://qiita.com/g_robo/items/43fd6c1d089c40bdce36#%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%92%E7%90%86%E8%A7%A3%E3%81%97%E3%82%88%E3%81%86)
## 手順8. アレンジしてみよう
数値やボタンでのifによる条件分岐を試してみよう