@mobi Open Trial Kit 1.0

# はじめに

私はAMR制御用ソフトウェアの開発を行っていますが、下記の用途に用いる台車の選定に困ることがあります。

* お客様の環境で走行デモの依頼があった時、<b>気軽に持ち運べる</b>台車が欲しい
* <b>複数台同時</b>に走行させる実験をしたい
* 台車の部品を使って<b>実用的な台車に拡張</b>したい

市販されている台車をいくつか探してみましたが、今ひとつフィットしない。。。今回、勉強も兼ねて自分で開発してみることにしました。
さらに、ハードウェアの設計図とモータードライバも皆さんに広く使っていただこうとオープンソースとして公開したいと思います。同じような悩みを抱えていらっしゃる方のお役に立てれば幸いです。

# 方針

台車を設計するにあたって次の方針を立てました。

<dl>
<dt>部品は入手性を重視する
<dd>故障した時に同じ部品が入手できることと信頼性を考慮して、継続的に入手できる部品を中心に選定しました。
<dt>会社で購入できる
<dd>前項の入手性に関係しますが、会社で部品を購入する場合ネットショップ(Amazonとか)は使用できないことも有るので、MISUMIさんとか会社で購入できそうなところで扱っている部品を使用しました。
<dt>ある程度素人でも組み立てができる
<dd>当社はソフトウェア開発のエキスパートは多く在籍していますが、ハードウェアの加工については専門外。。。プラモデルのように簡単に組み立てられるようにしました。
</dl>

部品の調達は他に選択肢が見つからずネットショップで調達したものもあります。

# 零号機

最初、「多少荷物が運べるぐらいがいいんじゃない？」という意見の元、50cm四方程度の台車を作成しました。

![AMR1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3112366/4502c310-2e87-4f3e-8ace-ea64cce85c0a.jpeg)

デカすぎ。。。当初、デモに持ち歩くというつもりだったのに無理です。宅配でも断られるかも。１台だけ作ってお蔵入りしました。

# 初号機 ```@mobi Open Trial Kit 1.0```

荷物の運搬は諦めて、当初の使い方ができるなるべく小型の台車を設計しました。

![AMR2-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3112366/4563e102-382f-484e-9216-1e31c9e39594.jpeg)

![AMR2-2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3112366/2c6f1a92-73df-4097-b5a6-bb2a1c3febe5.jpeg)


およそ30cm角で、高さは25cmぐらいです。重さは20kg弱（鉛シールドバッテリーなのが重たい）。主な構成部品のスペックは下記の通りです。

|部品|メーカー|品番|
|---|---|---|
|モーター|オリエンタルモーター|BLVシリーズRタイプ BLMR460SHK-15|
|バッテリー|モノタロウ 12Vバッテリーゲルタイプ|MNX4L-BS|
|充電器|メルテック|MP-230|
|パワーリレー|Panasonic|HE1AN-S-DC24V|
|DCDC変換器|MEAN WELL|DDR-60G-12 24->12V 60W|
|コントローラPC|GMKTec|Alder Lake-N97|
|LiDAR|北陽電機|UST-20LX|
|IMU|WitMotion|HWT901B|

githubに登録しているパーツリストの部品で約30万円ぐらいです(LiDARを除く)。作例では北陽電機のLiDARを使用しています。

フレーム部材は全てミスミ製アルミフレームとmeviy (https://meviy.misumi-ec.com/ja-jp) で作成した部品を使用しています。コントローラPCはGMKTecのミニPCを使用しています。そのうちラズパイ5に載せ替えたいと思っています。

バッテリーはリチウムで安心できるものは高価なのとサイズ的に乗らないのでバイク用の鉛シールドバッテリーを用いました。12Vを直列にしてモーター駆動用の24Vを得ています。

使用している部品一覧とCADデータについては下記のgithubにて公開しています。

https://github.com/Panasonic-Advanced-Technology/open_trial_kit

RSコンポーネンツが配布しているCADソフト「DesignSpark Mechanical」の無償版（EXPLORER）を使って開くことが出来ます。

https://www.rs-online.com/designspark/mechanical-software-jp

```
CAD/open_trial_kit.rsdocx
```
を開いてください。

# ロボットドライバソフトウェア

今回はオリエンタルモーター製のブラシレスモーターBLVシリーズRタイプを用いています(https://www.orientalmotor.co.jp/ja/products/brushless-motors/blv-r) 。この製品は次の特徴を備えておりAMRに適していると思います。

- バッテリー駆動可能
- モータードライバモジュールが小さい
- 60W～400Wのモーター出力から選択できる
- 1rpmの低速から駆動できる
- ブラシレスモーターなのに位置制御ができる

しかし、AMRに組み付けて使用するために必要な、差動二輪ロボット用のドライバソフトウェアがありません。

以前から下記の記事でオリエンタルモーターを用いたロボットドライバソフトウェアを試作・検討していましたが、今回```@mobi Open Trial Kit 1.0```の公開に合わせてドライバソフトウェア(blv_r_controller)もOSS公開することにしました。

:::note warn
本ソフトウェアはパナソニック アドバンストテクノロジー株式会社が公開しています。ソフトウェアに関する問い合わせをオリエンタルモーター様へなさらないようにお願いします。
:::

https://qiita.com/yamamoto-kazusige/items/e434fe5138860ce53d5d

以前の投稿ではCANOpenでモーターを制御してましたが、本ソフトの実装はmodbusRTUによるモーター制御になっています。

https://github.com/Panasonic-Advanced-Technology/blvr_ros_controller

## blv_r_controller ノード

blv_r_controllerのコンパイル方法などはgithubのREADMEを参照してください。

### Publishトピック
#### ~odom [nav_msgs/Odometry]
オドメトリ。

#### ~emg_status [std_msgs/Bool]
非常停止ボタンの押下状態の通知。
* true:非常停止モードON
* false:非常停止モードOFF

#### ~estop [robot_driver_msgs/MotorError]
エラー停止状態の通知。

#### ~status [robot_driver_msgs/MotorStatusComplex]
エラー詳細情報の通知。

本ドライバではrobot_driver_msgs/MotorStatus[] statusに以下を設定します。
* name
  * 二輪差動駆動台車用：left,right
  * 四輪差動駆動(メカナムホイール)用：left,right,rear_left,rear_right
* status
  * robot_driver_fw::RobotDriverStatus (robot_driver_fw/include/robot_driver_fw/robot_driver.h) を参照
* sub_status
  * robot_driver_fw::RobotDriverErr (robot_driver_fw/include/robot_driver_fw/robot_status.h) の以下いずれかを通知
    * RobotDriverErr::BUSY
    * RobotDriverErr::NOERR
* err_code
  * エラーコード(NET-ID 0x0040) [オリエンタルモーター BLVシリーズの仕様書参照]
* err_detail
  * name,err_codeを組み合わせた文字列。「(name)err_codeの16進数表示」

### Subscribeトピック
#### ~cmd_vel [geometry_msgs/Twist]
速度を指定し、ロボットを制御します。

#### ~cmd_pos [geometry_msgs/Twist]
位置を指定し、ロボットを制御します。

### Services
#### ~config_set_pos [robot_driver_msgs/ConfigSetPos]
位置指定制御時に適用されるパラメータを設定します。

#### ~get_status [robot_driver_msgs/GetMotorStatus]
モータードライバの状態を取得します。

#### ~reset [std_srvs/Empty]
モータードライバの再起動処理を行います。

#### ~control_excitation [std_srvs/SetBool]
モーター励磁状態を操作します。
* 励磁ON/OFF(ON:true/OFF:false)

# おわりに

同じような悩みを抱えていらっしゃる方のお役に立てれば幸いです。
下記の記事で組み立て方についても公開しています。併せてご参照ください。

https://qiita.com/baya-H/items/46ed9246f3faa9cf5830