へたれオヤジのＧｏＰｉＧｏ３

![GoPiGo3](https://gopigo3.readthedocs.io/en/master/_images/gpg3_and_logo.jpg)
写真は[公式ページ](https://gopigo3.readthedocs.io/en/master/)より

###[実際に動いている動画はこちら](https://youtu.be/i3roqI1QGME)

#■きっかけ
興味があってRaspberry Piを買ったはいいものの、電気系が弱くて全く使えない状態でした。
ソフトウエア関係の仕事なので、UNIXサーバに触れることはありますが、lsやcp程度の知識しかありません。
たまたま、PlayStation3のコントローラーで操作するロボットを見る機会があり、自分でも作れるキットがないか探していたところ、これに行き着きました。

見つけた動画
[GoPiGo Example: PS3 Controller (by youTube)](
https://www.youtube.com/watch?v=_Jhw79j3BDw)
これがやりたかった！


#■商品の特徴
Dexter社は米ワシントンにある教育、研究者、愛好家向けのロボットを制作しています。
（GoPiGoはKickstarterによる資金集めで、日本でも話題になりました）

GoPiGoはRaspberry Piを使ったコンピュータ教育用の教材を目的として作られているため

- こどもでも簡単に組み立てられる。
- すぐに使える。
- 専門の知識がいらない。

などの特徴があります。

紹介動画でも実際に子供が遊んでいる姿が紹介されています。
[GoPiGo3 Robot for Education](https://www.youtube.com/watch?v=bIZl0-6vrm8)

また、商品もRaspberry PiやOSの入ったSDカード付のオールインワンパッケージが販売されており、あとは単3電池(8本)を用意すればいいようになっています。
へたれオヤジにはピッタリですね。

最終目標はPS3のコントローラーを使ったラジコンカーを作る事です。

#■商品
商品はアマゾンより安い「[ロボットショップ](https://www.robotshop.com/jp/ja/)」で購入しました。
[もっと安いショップ](
http://viptoycimall.xyz/index.php?main_page=product_info&products_id=41826)も見つけたのですが、不安があって専門ショップにしました。（不幸なことにこの不安は的中しました・・・）

それ以外にも、充電式の単3電池、充電器、外でも使うためのミニルーターなどを購入しました。

購入商品一覧

| 商品 | ショップ | 金額 |
|:--|:-:|--:|
|[GoPiGo3 初心者スターターキット](https://www.robotshop.com/jp/ja/gopigo3-beginner-starter-kit.html)|ロボットショップ|27,940|
|[パナソニック エネループ 単3形充電池 4本パック BK-3MCC/4SA x 2セット](https://www.amazon.co.jp/gp/product/B07FR54TWY/ref=ppx_yo_dt_b_asin_title_o01_s00?ie=UTF8&psc=1)|anazon|2,650|
|[パナソニック 急速充電器 単3形・単4形 黒 BQ-CC73AM-K](https://www.amazon.co.jp/gp/product/B07FQJJ58Z/ref=ppx_yo_dt_b_asin_title_o02_s00?ie=UTF8&psc=1) |amazon|2,049 |
|[RAVPower Wi-Fi SDカードリーダー RP-WD009](https://www.amazon.co.jp/gp/product/B07TFGKCTL/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1)|amazon|￥5,099 (タイムセール+クーポン)|
|[Team microSDHCカード 16GB](https://www.amazon.co.jp/gp/product/B07DJ17CKQ/ref=ppx_yo_dt_b_asin_title_o04_s00?ie=UTF8&psc=1)|amazon|550|
|計||38,292|
こまごまと買うと、意外とかかるものですね。
もう少し出せば[これが買えてしまう]
(https://store.dji.com/jp/product/mavic-mini?vid=84651&set_country=JP&gclid=CjwKCAiAqqTuBRBAEiwA7B66hR991-h2lsQAJI9OGVM5HLF8T5vs7knJwGv3eNNFW9_TVCLUg3RKnRoCu6MQAvD_BwE)ぐらい。

これ以外に、Raspberry PI用にマウス、キーボード、モニタを用意。
プログラム開発のためにＰＣが必要です。

#■GoPiGo3スターターキットについて
GoPiGo3スターターキットには、**「初心者用」**と**「上級者用」**があります。
違いはOSが「Dexter OS」か「Raspian for Robots」の違いだけです。

Dexter OSとはRaspian(Stetch Lite)をベースとして、すべてブラウザから操作を行うものです。
OSの仕組みやコマンドなどを知らなくても、画面の操作だけでプログラムが作れる「Bloxter」(Scratchのようなもの）が付いてきます。

今回はこれを購入したのですが、SSHでログインできない(後述)ため、用意されているレッスンを使うことは出来ても、プログラミングには向いていません。
結局、上級者用に提供されているOSイメージをダウンロードして使うことにしました。

上級者用は「Raspian for Robots」で、GoPiGo3に必要なライブラリ類はインストール済みで、SSH接続やVNC接続ができるようになっています。
目的だったPS3コントローラーサンプルもこちらに含まれているので、最初からこちらを購入すればよかったです。

OSの違い
![os比較.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531312/a920a12b-462c-b03a-c9f7-a637cb141dca.png)

「初心者用」「上級者用」とも、キットの内容は変わりません。

GoPiGo3 スターターキットに含まれるもの

1. GoPiGo基本セット（本体）
2. Raspberry PI 3B(+ではありません)
3. USBメモリカード(8GB)
4. サーボセット
5. 距離センサーセット
6. OSイメージの入ったSDカード(8G)

2～6をバラで買うとスターターキットより高くなるので、余ったRaspberry PIがないのであれば、こちらの方をお勧めします。
ただし、すでにRaspberry PI 3Bを持っていて、あとは、自分でそろえるのであれば、基本セットで十分だと思います。
こちらのほうが[断然安い(13,306)](https://www.robotshop.com/jp/ja/gopigo3-base-kit.html)ですしね。


#■実際の購入
発注時に受付メール、翌日には発送メールが来て翌々日には商品が届きました。（はや！）
![DSC_1522.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531312/22764319-08dc-e9f1-2580-060a7e246a18.jpeg)
（箱の中身）

![DSC_1519.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531312/945ea706-1cfe-0174-1b69-6a0c8d0104af.jpeg)
(届いた箱に猫も興味津々)

![DSC_1529.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531312/18392224-62ae-856f-ef8c-a99defb317a3.jpeg)
使う場面がわからない空のUSBメモリ

![DSC_1532.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531312/085a619b-69a7-3676-7aa0-689c9a476911.jpeg)
両目の飾り付き赤外線距離センサ(センサは真ん中）

![DSC_1533.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531312/be7a2bfb-ccbc-18c9-2ae9-bdacc723dc6c.jpeg)
電源

![DSC_1535.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531312/51d5e1df-bc64-beb3-bb50-50b0fa9d9203.jpeg)
Dexter OS SDカード(8Gでは少ないので、別の 16GB SDカードにコピーして使用しました）

![DSC_1536.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531312/9fd6c78e-f53b-6585-b7ca-366185c7f2ff.jpeg)
Raspberry PI 3B

![DSC_1541.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531312/29a9d41e-499a-3613-1a28-e642a916f90a.jpeg)
基本キット

![DSC_1542.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531312/8c3c0acd-25f2-d800-e325-6561d50a1e22.jpeg)
基本キットの内容

![DSC_1563.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531312/253a8f90-11c8-71ee-f622-b3b07ac44883.jpeg)
RedBord(Arduino)


![DSC_1547.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531312/fbbfce84-3901-9d0f-49d4-a5ddb34c9f4d.jpeg)
ホイール

![DSC_1548.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531312/2938c097-2992-31d9-93d6-8cebfaa85cef.jpeg)
アクリル用取り付けパーツ

![DSC_1549.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531312/79b18e6c-90fc-cc7f-4962-e8cfa331ecce.jpeg)
モーター取り付けパーツ

![DSC_1550.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531312/4e7978eb-9f12-84e8-f5b6-d49be97734da.jpeg)
後輪パーツ

![DSC_1551.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531312/5cae6365-2659-142a-d434-fe277dfe360f.jpeg)
予備パーツ（どっさり）

![DSC_1552.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531312/de8df230-f2ae-b66d-d309-a85fe5ef66f3.jpeg)
コントローラーパーツ

![DSC_1558.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531312/5156c8bc-734d-3a2f-19fd-6e90db9c03c5.jpeg)
距離センサ付きモーター

![DSC_1554.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531312/5a0ed88d-4cc9-804d-8ed0-5f5feeee0b20.jpeg)
モーター接続ケーブル、電池バンド、電源ケーブル


![DSC_1555.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531312/69182806-be55-45d9-9221-7db3296c5d2f.jpeg)
電池ボックス（単三８本用）

![DSC_1556.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531312/68fb5613-c7cb-2a80-4cce-39994fa1fcc4.jpeg)
アクリル板(下)

![DSC_1557.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531312/418d8305-6109-18c7-15f5-8c4a76adc748.jpeg)
アクリル板(上)

![DSC_1526.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531312/32543876-b0d2-72cb-50fc-919dade4f81e.jpeg)
それ以外に買いそろえたもの

アクリルパーツに番号が振られていたり、シールが貼られていたりと作りやすくする工夫が随所にされています。
また、部品は機能別のパーツにまとめられており、さらに予備のパーツがどっさり入っていました。（安心ですね）
DEXTERロゴ入りのドライバが付属
ただ、残念なことに作りが雑で、さすがメイドインUSA。こんな曲がったワッシャー(スペーサー？)初めて見ました。

子供向けという事で、多少乱暴に扱ってもいいようにできていると思います。


#■組み立て
特に**日本語の説明書はない**ため、Dexter社のサイト(英語)を参考に組み立てることになります。
- [チュートリアル＆ドキュメンテーション](https://www.dexterindustries.com/gopigo3-tutorials-documentation/)
- 写真たっぷりでわかりやすい[組み立て説明](https://www.dexterindustries.com/GoPiGo/get-started-with-the-gopigo3-raspberry-pi-robot/1-assemble-gopigo3/)


教育向けキットのため、子供でも作れるように配慮されており、組み立ては非常に簡単です。

ただし、Dexter社のサイトの説明と実際の商品内容（特にパーツ類のまとめ方）が違うため、戸惑うこともしばし。
ドキュメントが商品に追い付いていない、よくあるパターンですね。
息子と組み立てましたが、組み立て自体は30分程度でできました。

![DSC_1560.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531312/afd6e2b8-32d6-a4de-0836-b60596bb2f36.jpeg)
（組み立て写真１）

![DSC_1565.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531312/1227f889-5665-5dab-95b8-3e459aa8ea20.jpeg)
（組み立て写真２）

#■（１）初心者オプション(Dexter OS)での接続

**ブラウザからのアクセスのみ**となります。
手順は簡単。

1. 電源をいれる
2. しばらく待つ(Wifiランプが緑になるのを待つ）
3. PCのWifi接続先一覧にある「GoPiGo」に接続する
4. ブラウザが自動的に起動し以下の画面が表示されます。
 ブラウザが起動しない場合、手動で起動し、URLに「mygopigo.com」と入力します。
注）InternetExploerの場合、時々ボタンが効かなくなるバグがあります。IE以外を使用してください。

（画面）

5.Driveを選択し、ボタンをクリック

（画面）

GoPiGoが動きます！
まじ感動！

##■トラブル１
ここでトラブル発生。
なんと右側のモータが動きません。
接続やケーブルを調べましたが、どうやらモーターが初期不良のようです。
ショップに交換の依頼をしました。

（ショップから交換のために、本体を返送してほしい旨の連絡が来ましたが、急いでいることを伝えたところ、**モーターだけ**送ってもらうことになりました。（不良部品の返品は不要とのこと）
[パーツ販売もしている](https://www.robotshop.com/jp/ja/gopigo3-motor-replacement-kit.html)ショップならではの対応でとても助かりました。

##■トラブル２
接続のポイントはPCのWifi接続先としてGoPiGoに接続する点です。
実は、GoPiGo3自身がWifiスポットとして機能しており、最初のうちそれが分からず、ずいぶんと悩みました。


また、Raspberry PIの画面をモニタに出し、ログインしようとしたのですが、標準ユーザであるpiのパスワードが分かりません。
さらにルートのパスワードも分からないため、ログインプロンプトから先に進めることができずに困りました。
[このBlog](
https://www.omnijava.com/2018/05/06/raspberry-pi-java-and-the-gopigo3-part-1-setting-up-the-gopigo3/)を見つけて、**Wifiの接続先を変える**ことに気づき、ようやく画面を出すことができました！

画面が出たところまではよかったのですが、Bloxterの使い方がよく分からないのと、PS3コントローラーのサンプルが見つからなかったので、Dexter OSを使うのはあきらめ、上級者オプション(Raspian for Robots)のセットアップにチャレンジすることにしました。

#■（２）上級者オプション(Raspian for Robots)での接続
最初から上級者オプションを購入した場合は、SDカードを挿入して起動します。
ベースキットを購入した場合、OSイメージが入ったSDカードを作る必要があります。

手順
1. OSイメージを[gitHUB](https://github.com/DexterInd/GoPiGo)からダウンロードします。
2. zipファイルを解凍します。
3. SDカードをフォーマットします。
　フォーマットはDiskFormat32を使いました。
　ここでトラブル。SDカードが書き込めないとエラーになります。
　[ここ](https://www.reneelab.jp/sd-card-unlock.html)を参考にdiskpartコマンドで読み取り属性をクリアしました。
4. Win32 Disk Imagerを使って、先ほどのOSイメージを書き込みます。

組み立てる前にWifi設定だけしておきます。
手順

1. Raspberry PIにSDカード、マウス、キーボード、モニタを繋げます。
2. Raspberry PIに電源を入れます。
3. しばらく待つとデスクトップが表示されます。
4. デスクトップ画面からWifi接続設定を行います。

GpPiGo3を組み立てます。(組み立て方は先ほどと同じです）

組み立てたら、GoPiGo3の電源を入れて、しばらく待つとWifiランプが白色に光ります。
接続方法として２つあります。

・SSH接続

SSHクライアント(私はTeraTermを使用しました)をインストールし、ログインします。
ホスト名**pi@dex.local**で接続し、パスワード**robots1234**で入ることができます。

![SSH1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531312/d3563ca1-9b10-f3ab-84e6-3cb0433d7d22.png)
(画面１)
![SSH2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531312/729fa40d-22cb-adb3-c7b6-f123a0e904cd.png)
(画面２)
![SSH3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531312/1c20c61b-fe55-14a3-5d2c-1ac8f30883bf.png)
(画面３)

・VNC接続
ブラウザで「[dex.local](http://dex.local/)」を開いてVNCを選択し、パスワードrobots1234をいれるとデスクトップが表示されます。

![vnc.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531312/1ce33c5b-3f45-2603-4ed2-bf3ecc6c881d.png)
(VNC画面)


ブラウザでVNCができることを知らなったので、ビックリしました。
また、どちらもIPアドレスではなく「dex.local」で接続できるので、IPを調べずにすみます。素晴らしい！

デスクトップのGoPiGo3 Control Panelを起動し、GoPiGo3が動くことを確認します。

![vnc2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531312/9a4bbe59-455f-5426-e7fd-a1d10ccfb8ed.png)
(テスト画面)


#■PlayStation3コントローラー接続
**組み立てる前に接続設定は済ませておきます。**

ここを見ながら設定します。
[PS3 Control with GoPiGo]
(https://www.dexterindustries.com/GoPiGo/projects/python-examples-for-the-raspberry-pi/raspberry-pi-ps3-control-with-gopigo-robot-example/)

設定が済んで、再起動後、PSボタンを押すとbiuetoothの認識は一瞬で終わります。
PlayStation接続と違って、LEDは消えますが、接続しているので、安心してください。
ls /dev/input/js0
があれば、成功です。

#■トラブル３
一番やりたかったPS3からのコントロール。
接続設定は済ませていざ実行となった時に、エラー！。**かなりがっかりしました。**
が、Pythonの勉強ができると気を取り直し、追跡することにしました。
###(結果)
PS3コントローラーデータの受信部分がサンプルでは動かないことが判明。（理由は不明ですが）

こちらを参考に受信部分を見直しました。
■ラズパイでラジコン(3)：Pythonでdualshock3の入力を読み取る
[https://www.usagi1975.com/30jul170722/](https://www.usagi1975.com/30jul170722/)

また、提供されているサンプルはGoPiGo2用のスクリプトでした。Exampleを見ならがGoPiGo3用に書き直しました。
できたコードは以下の通りです

```python:ps3.py
#!/usr/bin/python3
import struct
import gopigo3
import easygopigo3 as easy
import time

device_path = "/dev/input/js0"

# unsigned long, short, unsigned char, unsigned char
EVENT_FORMAT = "LhBB";
EVENT_SIZE = struct.calcsize(EVENT_FORMAT)

try:
  GPG = easy.EasyGoPiGo3()
except Exception as e:
  print("GoPiGo3 cannot be instanstited")
  print(e)
  exit()

with open(device_path, "rb") as device:
  event = device.read(EVENT_SIZE)
  while event:
    (ds3_time, ds3_val, ds3_type, ds3_num) = struct.unpack(EVENT_FORMAT, event)
    print( "{0}, {1}, {2}, {3}".format( ds3_time, ds3_val, ds3_type, ds3_num ) )
 
    if ds3_val == 1 and ds3_type== 1 and ds3_num==13:
        GPG.forward()
        print "F"
    if ds3_val == 1 and ds3_type == 1 and ds3_num == 14:
        GPG.backward()
        print "B"
    if ds3_val == 1 and ds3_type == 1 and ds3_num == 16:
        GPG.right()
        print "R"
    if ds3_val == 1 and ds3_type == 1 and ds3_num == 15:
        GPG.left()
        print "L"
    if ds3_val == 1 and ds3_type == 1 and ds3_num == 0:
        GPG.stop()
        print "STOP"

    event = device.read(EVENT_SIZE)
```
[実際に動いている様子はこちら](https://youtu.be/i3roqI1QGME)

#■結論
+ GoPiGoは手軽で簡単。ベースキットなら1万円台で手に入ります。
+ PS3コントローラーがあれば、ラジコンカーが作れます。
+ ある程度のRaspberry PIの知識は必要です。


#■参考リソース
GoPiGoについて日本語で書かれているリソースはそれほど多くありません。その分内容が濃くてとても参考になります。参考にしたリソースです。感謝！

＜日本語で書かれた記事＞

■[ROSでgopigo3を走らせる]
(https://qiita.com/cut0ter/items/0326f5dee89456e47001)
ubuntu mate + rosでGoPiGoを動かしている方です。

■[ラズパイで動くロボット「GoPiGo」をつかって遠隔見守りロボットを作ろう（1） 開発準備編]
(https://codezine.jp/article/detail/9829)
GoPiGoに関して、日本語できちんと書かれた記事はこれくらい？

■[GOPIGOを作ろう]
(http://masaaki1.blogspot.com/2016/10/gopigo.html)
米国のDexter Industriesから直接購入された方のBlogです。
書かれている内容や、やりたいことは私に近くて参考になりました。

■[10さいからはじめる「お絵かきロボット」づくり]
(https://qiita.com/ykoga/items/3362beb26fc640913645)
子供に楽しいロボットの講義をしているテイストが素晴らしい。

■[工作と小物のがらくた部屋 Dexter Industries GoPiGo 組み立て]
(http://junkroom2cyberrobotics.blogspot.com/2016/03/dexter-industries-gopigo.html)
GoPiGoだけでなく、GrovePiも組み立てられている方。すげぇ。

■[GoPiGo2で遊んでみた]
(https://www.slideshare.net/mainya/go-pigo2)
上手にスライドにまとめられている方です。

■[tkamada_の日々]
(https://tkamada.blogspot.com/2015/10/gopigo.html)
赤い基盤はArudinoだそうです。知らなかった。


＜Shops＞
■[ロボショップ株式会社]
(https://www.robotshop.com/jp/ja/)
米robotshopの日本法人。品揃えが多いのと発送が早いのが素晴らしい

■[GoPiGo3 初心者スターターキット：ロボショップ 店 - 18,829円]
(http://viptoycimall.xyz/index.php?main_page=product_info&products_id=41826)
ベースキットなら1万を切る安さ。パパもう1台買っちゃうゾ！

■[はじめてのロボット・カー開発キットの販売]
(https://spectrum-tech.co.jp/products/robotcar.html)
GoPiGoをシステムとして販売されている会社様です。
目の付け所が良いと思うので、商売になればいいな。

＜Dexter Site＞
■[GoPiGo3 Tutorials & Documentation]
(https://www.dexterindustries.com/gopigo3-tutorials-documentation/)
ここにリソースがまとめられています。
古いのが難点

■PS3コントローラー
[PS3 Control with GoPiGo]
(https://www.dexterindustries.com/GoPiGo/projects/python-examples-for-the-raspberry-pi/raspberry-pi-ps3-control-with-gopigo-robot-example/)
接続手順はこの通りですが、サンプルは、GoPiGo3では動きません。

■[Assemble the GoPiGo Servo Kit]
(https://www.dexterindustries.com/GoPiGo/get-started-with-the-gopigo3-raspberry-pi-robot/6-attach-the-servo-kit-gopigo3-raspberry-pi-robot/)
実際のキット内容と説明が全然あっていません。早く更新してください。

■[Dexter Industries GoPiGo3 Documentation!]
(https://gopigo3.readthedocs.io/en/master/index.html)
APIドキュメントのようです。

■[Raspberry Pi, Java, and the GoPiGo3 - Part 1: Setting up the GoPiGo3]
(https://www.omnijava.com/2018/05/06/raspberry-pi-java-and-the-gopigo3-part-1-setting-up-the-gopigo3/)
英語のBlogですが、loginに関して丁寧に解説されています。
ここに掲載されたサンプルが実際に同梱されていました。素晴らしい。