RaspberryPi 3B+でロボットアーム CRANE+ V2を動かす

# 目的
Raspberry Pi 3B+でロボットアーム CRANE+ V2を動かした際の備忘録です。

# 準備

Raspberry Pi 3B+とロボットアームを用意します。

[Raspberry Pi 3 Model B+](https://www.amazon.co.jp/dp/B07R7M7N3P/ref=cm_sw_r_tw_dp_U_x_7bykDbQ32KV4P)
[ロボットアーム CRANE+ V2](https://www.rt-shop.jp/index.php?main_page=product_info&cPath=1299_1302&products_id=3626)

ロボットアーム CRANE+ V2は電源別売りのようであり、下記を参考に電源を別途用意します。

> オプション(本体には電源が付属しておりませんので別途お求めください）
> ACアダプタ　SMPS 12V5A PS-10 [US-110V]
> [ロボット用ACアダプタ-12V5A DCプラグ：φ2.1(変換プラグφ2.5付) ](https://www.rt-shop.jp/index.php?main_page=product_info&cPath=1256_1258&products_id=3744)

# コード

https://www.rt-net.jp からサンプルコード(CRANElinux-1.00.zip)取得してビルドします

```
$ mkdir -p ~/tmp/cranev2
$ cd ~/tmp/cranev2

(https://www.rt-net.jp/CRANEplus/からサンプルコードCRANElinux-1.00.zipを取得)
$ unzip CRANElinux-1.00.zip
$ cd CRANElinux-1.00
$ gcc -o sample main.c //コンパイル
```

# テスト

```
$ ls /dev/ttyUSB0
　→/dev/ttyUSB0 があることを確認
$ sudo ./sample //管理者権限でプログラム実行
　→CRANE+V2勢いよく動くので注意
　→l でlearning
　→p でplayback で動作チェック
```

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">ロボットアームを動かした<br>（サンプルコードでティーチング） <a href="https://t.co/rOEY3iZBWd">pic.twitter.com/rOEY3iZBWd</a></p>&mdash; st (@st17890027) <a href="https://twitter.com/st17890027/status/1149923668601929729?ref_src=twsrc%5Etfw">July 13, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">ロボットアームを動かした失敗版<br>（サンプルコードでティーチング） <a href="https://t.co/ZyhQf1r5qP">pic.twitter.com/ZyhQf1r5qP</a></p>&mdash; st (@st17890027) <a href="https://twitter.com/st17890027/status/1149923771853053952?ref_src=twsrc%5Etfw">July 13, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 



# CodingError対策

```
$ sudo ./sample
応答が返らない or エラーが返る
```

ロボットアーム側の接続が悪くエラーとなっている可能性があります。
電源OFFにして、接続を見直し、電源ONで再起動すれば解決するはず。

--

```
$ sudo ./sample
/dev/ttyUSB0 not found
```

/dev/ttyUSB1 等のデバイスファイルに割り当たっている可能性があります。
main.c の相当するdefineを変更して再ビルドすれば解決

```rb:main.c
// Change PORT name according to your PC
// SerialPort
#define SERIAL_PORT     "/dev/ttyUSB0"
```

--

```
$ gcc -o sample main.c
main.c:162:20: error: use of undeclared identifier 'B1000000'
        setting.c_cflag = B1000000 | CS8 | CLOCAL | CREAD;
                          ^
1 error generated.
```

Macでビルドしようとするとserial通信のbaudrateが設定できずエラーとなるようです。Ubuntu16.04等でビルドして解決
[undeclared baud rates in cserial.h on Mac OS](https://github.com/paparazzi/paparazzi/issues/1840)


# 参考
[Raspberry Pi 3 Model B+](https://www.amazon.co.jp/dp/B07R7M7N3P/ref=cm_sw_r_tw_dp_U_x_7bykDbQ32KV4P)
[ロボット用ACアダプタ-12V5A](https://www.rt-shop.jp/index.php?main_page=product_info&cPath=1256_1258&products_id=3744)
[SKLINE 12V5A 汎用 ACアダプター ノイズフィルターつき 5.5mm(内径2.5mm)](https://www.amazon.co.jp/gp/product/B07DZSX74K/ref=ppx_yo_dt_b_asin_title_o01_s00?ie=UTF8&psc=1)
[undeclared baud rates in cserial.h on Mac OS](https://github.com/paparazzi/paparazzi/issues/1840)
[ROSを使用したCRANE+の動かし方　その6](https://www.rt-shop.jp/blog/archives/6664)
[ROSを使用したCRANE+の動かし方　その8](https://www.rt-shop.jp/blog/archives/6711)
[CRANE+の使い方(最終回)](https://www.rt-shop.jp/blog/archives/8190)
[【アーム制御】CRANE+を使ったROSアーム制御②](http://ogimotokin.hatenablog.com/entry/2018/04/06/001340)
[Raspi+ROSでモータを回してみた](https://qiita.com/MENDY/items/0089b0f52acf23b7d3f1)