書籍「M5Atomで作る歩行ロボット」より6軸二足歩行ロボットのビルドログ—UIFlowでロボを歩かせたい—

今年の夏休みに、お台場の科学未来館の特別展「きみとロボット ニンゲンッテ、ナンダ?」を見てきました。

www.miraikan.jst.go.jp

僕はこういうのにけっこう影響されやすいタイプなので、完全にロボットにかぶれて、日々高まるロボット作りたい欲。

じつは、テック系ネタを色々かじっているわりに、ロボット系はタミヤのキットくらいしか作ったことがなかったので、もう少し手応えのあるのをやってみたくなりました。

とはいえ、イチから設計するとなると他の積みプロジェクトがもっと進まなくなるので、キットを中心に探していたんですが、なにやらぴったりな本を見つけました。

著者のロボタカオさんは、なるべくローコストでロボットを作るというコンセプトで活動されていて、そのローコストロボの製作ノウハウが、材料加工から制御系までギュッと濃縮されたスゴい本です。

200ページ程度のボリュームなので、この本だけでロボット製作の全てがわかるとまでは言えませんが、最初の足掛かりにはぴったりです。

今回はこの本の第4章より、表紙にもなっている「6軸二足歩行ロボット」を組み立てたので、ビルドログを残します。

ひととおりの作り方は書籍の方で丁寧に解説されているので、本の内容とは変えたところを記録しました。

ネジの種類を5種類 → 2種類に減らした

材料表によると、5種類のM2スクリューとM2タッピングスクリュー、長さのバリエーション合わせて5種類のネジが必要です。

ネジのような小物を少量多種で買うと、割高になるし管理も面倒なので、多少無理があっても長さを6mmに統一することにしました。

  • M2スクリュー x 6mm 12本
  • M2タッピングスクリュー x 6mm 34本

あと、タッピングスクリューは樹脂用のB種(先端が平らなやつ)だと少し入手性が悪いので、ホームセンターでも手に入るA種(尖ってるやつ)にしました。

真鍮パイプは無しでも良さそう

足首の関節に真鍮パイプを使うことになっていますが、真鍮パイプはだいたい1mとかで売っているので、6mmしか使わないところに買うのは少しもったいないです。

仮止めのつもりでねじだけ取り付けたら、ねじの頭の丸いところがいい感じに滑ってくれました。

本体の重量もたいしたことないし、なにか問題が出るまではそのまま行くことにします。

開発環境をArduino → UIFlowに変更した

本書では開発環境としてArduinoが使われています。C言語で開発するならいちばんお手軽なのはArduinoですが、M5シリーズにはよりお手軽感のある「UIFlow」というビジュアルプログラミング環境があります。

m5stack.github.io

後述しますが、中でMicroPythonが動くので、シリアルインタープリタで動的にポーズを動かしたりもできておススメです。

UIFlow環境のセットアップ

ざっくりこんな手順です。

  1. ドライバをインストール
  2. M5Burnerでファームウェアを書き込む
  3. UIFlowのサイトにアクセスしてWeb GUIを開く

詳しくはチュートリアルがあるのでこの通りに操作していけばOKです。

チュートリアルは英語か中国語しかありませんが、スクリーンショットが多めなので、見た目で進めていけると思います。 docs.m5stack.com

ちなみに、UIFlow自体の画面は日本語で表示できます。

ゼロ点設定のフロー

まずは、ロボットの組み立て時に必要な、サーボのゼロ点(90°)設定のフローを作ってみました。

サーボ制御のブロックは高度なブロック → Pin Servoにあります。

最初の6行でピンの割り当てを設定しています、ピン番号以外はデフォルト値のまま。

続いてLEDマトリックスに顔を表示しています、取り付け方向に合わせて逆さまです

書籍のプログラムをふまえて、リストで角度を設定する関数を用意しました。関数ブロックを追加したら、左上のギアマークから引数設定を開いて、引数入力を追加します。

引数には角度のリストが入るので、名前はとりあえず「angles」としておきました。

トリミングと、回転軸を左右対称にする操作もこの関数内でやってしまっています。

リスト参照のインデックスが1始まりなので注意。

あとは角度のリストを入力してこの関数を呼び出せばOKです。

リストは、デフォルトだと縦並びで場所をとるので、右クリック→インライン入力に設定すると、横並びになってスッキリします。

MicroPythonのインタープリタ(REPL)で動かす

UIFlowの実態は、Blocklyの皮をかぶったMicroPythonなので、シリアル通信越しにインタープリタで動かすことができます。

最近になってUIFlowのWeb UIにもシリアルターミナルが付いたので、新しいソフトをインストールすることなく使える点も素敵です。

オレンジ色の「Terminal」ボタンをクリックするとターミナルが立ち上がります。

左上のリンクボタンからシリアルポートを選択すると、ポートに間違えがなければ「Connected to Serial Port!」と表示されて接続完了、「▶」ボタンを押すと編集中のフローを実行できます。

フローの終了を待つか、「Ctrl+C」を押すとREPLモードになるので、そのままPythonコードを書いて1行づつ実行することができます。

一度フローを実行していれば、Move関数が宣言されているので、こんな感じでコード実行すれば動的にポーズを付けられます。

ポーズが決まったら、このようにUIFlow側に書き戻すこともできます。

こういったビジュアルプログラミングは、取っつきやすいかわりに、処理が複雑になるにつれて辛くなってきますが、UIFlowの場合簡単に素のMicroPythonに移行できるので、比較的安心してプロトタイピングに利用できると思います。

twitter.com

ToDo

  • 歩かせる!
  • 元のスケッチでは、ポーズの間を線形補完して動きを滑らかにしているので、おなじようにしたい。
  • MicroPythonをROSにつなげられるuPy-rosserialというのがあったので試したい、その前にまずROSに入門する。
  • twitter.com