タミヤのカムプログラミングロボットを改造した話
adventar.org
19日目の記事です。
目次
- 全体像の話
- WSLのインストール
- ラズパイで使うOSをインストールする
- WSLとラズパイをSSH通信する
- カムプログラミングロボットを組み立てる
- 回路とかの話
- コードについて
- 動かしての感想とその他
全体像の話
タミヤのカムプログラミングロボットをラズパイを使ってSSHで遠隔制御できるようにしていきます。
WSLのインストール
WindowsパソコンでSSHで通信するためにTera termなど使ってやる場合もありますが、今回はWSL(Windows Subsystem for Linux)を使ってラズパイとSSHをします。
以下のURLからWSLをインストールできます。
https://www.microsoft.com/ja-jp/p/ubuntu/9nblggh4msv6#activetab=pivot:overviewtab
WSLのインストールが終わったあと起動してみると、WslRegisterDistribution failed with error 0x8007019e というエラーが出ました。
そこで、[コントロール パネル] - [プログラムと機能] - [Windows の機能の有効化または無効化] を開いて、[Linux 用 Windows サブシステム] にチェックをつける操作をして解決しました。
https://docs.microsoft.com/ja-jp/windows/wsl/troubleshooting
再度WSLを起動するとユーザー名とパスワードを聞かれるので指示に従って設定して見てください。ubuntuにインストールされているパッケージ情報のダウンロードとパッケージのアップデートをします。
sudo apt update sudo apt upgrade
参考にした記事
qiita.com
ラズパイで使うOSをインストールと下準備
今回は家にあったRaspberryPi 3 Model B+にubuntu server 20.04.3LTS (RPI 2/3/4/400)をインストールしました。
以下の記事を参考にインストールして見てください。
qiita.com
設定が終わったらラズパイに無線LANとモニターを繋げて電源をつけます。WSLで行ったようにラズパイでもubuntuにインストールされているパッケージ情報のダウンロードとパッケージのアップデートをします。
sudo apt update sudo apt upgrade
WSLとラズパイをSSH通信する
まず、以下のコマンドを打ってラズパイのipアドレスを確認します。
ip -a
有線LAN接続をしているので eth0: の欄に書かれているプライベートIPアドレス(192.168.~/24)を控えておきます。 WSLに以下のコマンドを打ってラズパイとssh通信をします。
ssh ラズパイのユーザー名@ipアドレス
通信をする際に接続するかどうかを聞かれるのでyesと答えます。
参考にした記事
qiita.com
余談(うまく行った人は読み飛ばしてもらって構いません)
WSLとラズパイでsshしようと思ったら、エラーが出てきました。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. ~中略~ Host key verification failed.
と出て通信ができませんでした。
解決方法として、
cd .ssh ls
と入力すると.sshというディレクトリにknown_hostsというのがあるのでこれを
rm known_hosts
で削除すると動作しました。
最初に使っていたラズパイ側のOSが壊れてしまって、再度OSインストールしてWSLでsshしようとしたらこのようなエラーが出ました。
ラズパイ側の前のOSと再度インストールしたOSの公開鍵暗号が違うためそれが悪さをしていたのかな
という感じでしょうか...(多分違うかも)
詳しいことはまだわかってないのでもう少し暗号化通信の学びが必要だなと感じました。
カムプログラミングロボットを組み立てる
以下のタミヤのロボットを説明書通りに組み立てます。
Amazon | タミヤ 楽しい工作シリーズ No.227 カムプログラムロボット 工作セット 70227 | ホビー用素材 通販
組み立てた後、プログラムピンを挿してロボットを動かす機構を取り外します。 組み立て終わったロボットはこのようになりました。
組み立てたときの感想として、力が無いのか止め方が悪いのか、止めがガバガバ過ぎている気がしました。特に腕の根本など。 なるべく取っ手の長いドライバーを使って組み立てられるといいと思います。(精密ドライバーを使って組み立てていたので...)
回路とかの話
使ったものは
- モータードライバ(DRV8833)
Amazon.co.jp: HiLetgo 3pcs DRV8833デュアルモータードライバー : 産業・研究開発用品 - RaspberryPi 3 Model B+
- 9v 電池(モーター駆動用)
- バッテリースナップ
バッテリースナップ(電池スナップ・Bスナップ) 縦型 ソフトタイプ: パーツ一般 秋月電子通商-電子部品・ネット通販 - モバイルバッテリー
回路は以下のようになっています。
コードについて
PWM制御で進む速さなどを調節せず、(常にフルで動く)ON/OFF制御でロボットを操作しています。 コードはシェルで書いています。 以下がコードになります。
以下の記事を参考にラズパイを制御しました。 tool-lab.com
#!/bin/bash #a1=15 #a2=14 #b1=18 #b2=23 echo 14 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio14/direction echo 15 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio15/direction echo 18 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio18/direction echo 23 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio23/direction while : do echo "方向を入力してください" read key if [ "$key" = "s" ]; then echo "まっすぐ進む" echo 1 > /sys/class/gpio/gpio14/value echo 0 > /sys/class/gpio/gpio15/value echo 1 > /sys/class/gpio/gpio18/value echo 0 > /sys/class/gpio/gpio23/value elif [ "$key" = "d" ]; then echo "右に旋回" echo 0 > /sys/class/gpio/gpio14/value echo 1 > /sys/class/gpio/gpio15/value echo 1 > /sys/class/gpio/gpio18/value echo 0 > /sys/class/gpio/gpio23/value elif [ "$key" = "a" ]; then echo "左に旋回" echo 1 > /sys/class/gpio/gpio14/value echo 0 > /sys/class/gpio/gpio15/value echo 0 > /sys/class/gpio/gpio18/value echo 1 > /sys/class/gpio/gpio23/value elif [ "$key" = "f" ]; then echo "バック" echo 0 > /sys/class/gpio/gpio14/value echo 1 > /sys/class/gpio/gpio15/value echo 0 > /sys/class/gpio/gpio18/value echo 1 > /sys/class/gpio/gpio23/value elif [ "$key" = "" ]; then echo "停止処理" echo 0 > /sys/class/gpio/gpio14/value echo 0 > /sys/class/gpio/gpio15/value echo 0 > /sys/class/gpio/gpio18/value echo 0 > /sys/class/gpio/gpio23/value fi done
方向入力を聞かれるので以下のように入力して見てください
入力 | 制御動作 |
---|---|
s+[Enter] | まっすぐ進む |
d+[Enter] | 右に回る |
a+[Enter] | 左に回る |
f+[Enter] | 後ろに進む |
[Enter] | 停止 |
入力通りに動かなかった場合は配線が間違ってないか確認してみてください。
ラズパイに以下のコマンドを打つとコードのファイルをダウンロードできます。
git clone https://github.com/GlassesGoat/kamurobo.git
コードに実行権限を与えます。
cd kamurobo chmod +x robo.sh
rootユーザーになってからファイルを実行すると操作できるようになります。
sudo su ./robo.sh
動かしての感想とその他
モーターを動かすための電池が高すぎる(多分1.5vの乾電池3本くらいがいいかも)、もしくはPWM制御で速度を変えないといけないなと思いました。
動作中に[Ctrl]+Cを押す、ラズパイの電源を切る前にモーター駆動用の電池を抜かないと勝手に前進したり動いたりするので危ないです。安全設計では無いのでそこも改善しないと行けないです。
また、有線LAN接続を無線に変更しようと思います。これらは後で追記しようと思います。(アドカレに間に合いませんでした...)
その他参考にした記事
Ubuntu環境を日本語化する | リナスク
Ubuntu Server(Raspberry Pi)のWifi設定〜リモート接続 - Qiita