Rover講座08 Roboclawの設定をする

# 環境
この記事は以下の環境で動いています。

| 項目 | 値 |
|:-:|:-:|
| CPU | Core i5-8250U |
| OS | Windows10 |
| Basicmicro Motion Studio | 1.0.0.75 |

| 項目 | 値 |
|:-:|:-:|
| Board | boroclaw 2x7A |
| FW Version | 4.2.8 |

# 概要

移動ロボットの足となる、駆動系部品の組み立てや、モータードライバーであるRoboclawの設定を行います。
ここでは、Pololuのエンコーダー付きギアモーターをRoboclaw経由で駆動することを目標にします。

![08_motor.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254442/87c9eea9-926d-6f89-cfa9-a140dfb90368.jpeg)

# 予備知識

## エンコーダー付きモーター

自律ロボットを作成するためにはタイヤを駆動するモーターはエンコーダー付きが必須です。エンコーダーによって正確なタイヤの移動量が分かるために、正確なオドメトリーを計算できます。
また、エンコーダーで正確な回転速度を取得できるために、駆動軸を速度制御することが出来ます。
Pololu 37Dモーターではモーター側（ギアで減速前）は1周64パルスのエンコーダーがついています。今回は70:1のギアを使うので、減速後は1周4480(70x16)パルスのエンコーダーになります。


## Roboclaw

モータードライバとモーターコントローラーが一体となった基板です。エンコーダーをフィードバックした速度制御を行えて、USBやRC信号といった多様なIFにも対応しています。USB経由で制御の設定をすることが出来ます。

## PowerDistributeBoard

配電盤に当たるもので、以下の機能を持ちま鵜s。

* バッテリーの電源を分配する
* バッテリーの電圧・電流を計測する
* 5Vの電圧を生成

色々なボードが販売されて[これ](https://ardupilot.org/copter/docs/common-3dr-power-module.html)のようなものが良く売られていますが、今回は[これ](https://ja.aliexpress.com/item/32825868458.html)を使います。
Pixhawkの裏に貼れるようになっているボードです。


# 前提条件
以下の機器が必要です。

* WindowsPC
* USBA-mictoB
* Pixhawk
* PowerDistributionBoard(Dumperプレート形式)
* Roboclaw（モータードライバ）
* 電源系部品
    * Makitaバッテリー
    * スイッチ
    * フューズ
* エンコーダー付きギアモーターx2
    * https://www.pololu.com/product/4694
* Futaba(以前の記事で設定済み)
* 駆動配線基板部材

# 手順

## PowerDistributionBoardの配線、取付


## 電源系・駆動系の接続

* 最終的に以下のような電気的接続になるように、ここまでで作った基板やケーブルを接続する。
* Roboclawの配線でモーター1が進行方向左側のモーター、モーター2が進行方向右側のモーターに対応する。

![power.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254442/0cc17a37-a5ba-46ab-5732-d668b2442616.png)

## Basicmicro Motion Studioのインストール

* WindowsPCにて[basicmicroのWebサイト](https://www.basicmicro.com/downloads)より「BasicMicro Motion Studio」をダウンロードする。
* インストーラーを開き指示に従ってインストールする。

## Roboclawとの接続、配線の確認

* Basicmicro Motion Studioを起動する。
* デバイス接続と接続する。
    * 「Attached Device」の中から接続しているものを選ぶ。
    * 「Connect Selected Unit」を押す。
* 左側の「General Settings」メニューを選択する。
    * 「Setup」グループの「Control Mode」を「RC」にします（PixhawkからのPWM信号を受けてモーターを駆動する）。
    * 「Enable Encoder 1/2 in RC/Analog Mode」にチェックを入れる（チェックなしではRC信号に比例したPWM出力をする。ありでは速度制御をする）。

![motion_studio3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254442/c960de90-e43b-45e8-ed80-12b684269aba.png)

* 「PWM Setting」メニューを選択する。    
    * 左側モーター(M1)の確認
        * ControlグループのMotor1のスライダーを上に上げる。左側モーターが「機体が前進する方向」に回っているか確認する。
            * 軸から見て反時計回り方向
            * 回転方向が逆の場合は「General Settings」面ツーの「Motor」グループでタブで「M1」横の「Reverse」にチェックを入れる 
        * この時エンコーダーの値（上部のM1 Speed）が正の値か確認する。
            * 負の値の場合は、「General Settings」メニューの「I/O」グループの「Encoder M1 Mode」の横の「Invert」にチェックを入れる。
            * +1,-1のように微妙に値が振動するだけの場合は、A相とB相のどちらかが断線しているため、配線を確認する
    * 右側モーター(M2)でも同様に行う。
        * 「機体が前進する方向」が正の値のため、右側モーターは駆動軸方向から見て時計回りが正であることに注意

![motion_studio1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254442/e676e23e-fd49-a0cb-b47c-65364800f43a.png)

* メニューバーの「Device」->「Write Settings」を押して設定をROMに書き込む。


## 速度制御のチューニング

* Basicmicro Motion Studioを起動する。
* デバイス接続と接続する。
* 「Velocity Sttings」メニューを選択する。
* M1(左側モーター)のチューニング
    * モーターが回転しても安全であることを確認して、AutoTuneの「Tune M1」を押す。
        * モーターが自動的に駆動された後に、Motor1の「Velocity P」、「Velocity I」の項目が自動で入力される。
* M1(左側モーター)のチューニング結果の確認する。
    * グラフビューで設定速度と現在速度をプロットする。ウィンドウ右の「Channels」で「Motor1 Setpoint」、「Motor1 Speed」を割り当てる。グラフの表示範囲から線がはみ出るときは横のScaleボタンを押す。
    * Controlグループの「Motor1」のスライダーを動かして、モーターを駆動する。
    * グラフビューをみて追従性を確認、場合によってはパラメーターを調整する。今回はM1/M2とも以下の数字に設定した。

| 項目 | 設定値 | 説明 |
|:-:|:-:|:-:|
| Velocity P | 2.2 | ほぼチューニングでの値 |
| Velocity I | 0.5 | ほぼチューニングでの値 |
| Velocity D | 0 | D制御は使わない |
| QPPS | 8960 | 最大回転速度、2回転/秒 |

* M2(右側モーター)でも同様の作業を行う

![motion_studio2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254442/311b9343-4d4c-a600-647f-b8c1fba21b46.png)

* メニューバーの「Device」->「Write Settings」を押して設定をROMに書き込む。

## 外部信号によるRoboclawの動作確認

* Futaba受信機とRoboclawのポートをサーボケーブルで接続する。

| Futaba送信機の対応する軸 | Futaba受信機のポート | Roboclawのポート |
|:-:|:-:|:-:|
| throttle(右スティック上下) | 2 | 1 |
| pitch(左スティック上下) | 3 | 2 |

* Futaba送信機の電源を入れて、左右スティックを上下に動かすと、対応するモーターが駆動する。

![motor_test.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254442/ccf100a0-9a6f-82c3-02ab-99a4f55032a3.gif)

# 参考
[ArdupilotでのRoboclawの設定](https://ardupilot.org/rover/docs/reference-frames-arduroller.html)
[Roboclaw AutoTuning](https://resources.basicmicro.com/auto-tuning-with-motion-studio/)

# 目次ページへのリンク
[ROS講座の目次へのリンク](https://qiita.com/srs/items/5f44440afea0eb616b4a)
[ROS2講座の目次へのリンク](https://qiita.com/srs/items/5f0d765343ca78f524ed)