記事の詳細
汎用電動機制御基板をつかってロボットカーを製作してみよう!【NODE-REDプログラム編】
https://github.com/bit-trade-one/ADRPT8C_Generic_Motor_Controller
↑サンプルプログラムはこちらから!↑
前回のソフトウェア編をさらに進めてロボット・カーを動かすためのNODE-REDプログラム編をお送りします。
NODE-REDは、当初IBMが開発し、現在はオープンソースになっている、WEB用のJAVAスクリプト言語による、開発環境です。
ただ、今回の例では、なんとJAVAスクリプトのプログラムを1行も書くことなく、機能を実現できてしまいました。
ラズパイに標準でついていますし、少し頑張れば、Windows10でも動かせます、自分が、どこのハードの開発環境(NODE-RED)で、動かしているのが分からなくなり、それぞれのハードの得意、性能を考え、ハード分散の開発が容易にできる優れものです。
システムソフトの全体図を以下に示します。
NODE-REDで、情報の行き先を指定しています。
ラズパイのnode-redを起動します。
ブラウザから http://raspberrypi.local:1880 (raspberrypi.localは、ラズパイの名前設定で設定した名前になります、デフォルトだと、raspberrypi.localです。)node-redに接続します。
設定するのは、下記5種のノードです、ほかのノードはデバッグ用ですので、動かすだけなら必要ありません。
- MQTTinノード
Functionノード
- 機能を追加しようとして追加していますが、今回の機能であれば必要ないかもしれません
JSONノード
- オブジェクトからJSONへ変換するノード
delayノード
- 処理量を毎秒2メッセージに調整しています
node-redの設定が出来たら、pythonのプログラムを起動します
sudo python3 MCP3208-MQTTout-pub-DCmotor.py &
sudo python3 pwm-pca9685-mqttin-sub-dcmotor.py
node-redのデバッグwindowに下記のように、センサの値が表示されれば成功です。
今回、苦労した点としては赤外線距離センサの動作環境に苦労しました。当初、自分が前を歩くと、ついてくるロボットカーを考えていたのですが、うまく扱えばついてくるようなときもありますが、安定して動かすため(赤外線の反射の影響と推定)には、実験の結果下記の環境が必要でした。
- ロボットカーが稼働する(床、机上)を黒い布で覆う
- 検出する反射物を、A3白程度の大きさにする
当初、データの見える化で、node-redのdashboardを使って、webブラウザでデータをみえるようにしていたのですが、毎秒1回以上更新すると、負荷が重くなるせいか、うまく動かなくなり、いまはwebブラウザで見ないように設定しています。又、pythonプログラムでは、0.1秒ごとにデータを送り、delayノードで 処理量を毎秒2メッセージに調整しています。
シンクロ化について
とここまでが、単体動作の説明です。 当初の目標では、2台のラズパイが、シンクロ動作でした。
どうやってシンクロ動作ができるのか説明します。
追加するのは、たった一つのノードだけです。
中身もサーバのアドレスが違うだけです。
新たにつなぐ相手側のラズパイは、自分に接続されているセンサと同じように、別のラズパイの信号を読み込んで、動作するので、2台のラズパイが、あたかもシンクロしているように動くように見えるという考えです。
実際やってみると、拍子抜けするぐらいに簡単に動いてしまい、感激しました。
pythonプログラムと、NODE-REDプログラムは以下からダウンロードをおこなってください。
最後に
電子工作の世界では、ハードも、ソフトも 多種多様になり、どんどん良い製品が出てきています、しかも、最近は、オープン・ソース・ソフトウェア、オープン・八―ウェアと呼ばれ、無料で使わせてもらえる恵まれた環境になっていると思います、自分はハードが専門なのに、こんなソフトまで使わせてもらって、楽しんでいます、
皆さん、特にソフトの専門家の方!、汎用電動機制御基板を利用して色々作成してみてください!
第1回:汎用電動機制御基板をつかってロボットカーを製作してみよう!【ハード編】
第2回:汎用電動機制御基板をつかってロボットカーを製作してみよう!【ソフト編】
松元 博司