TJ3で基本を学んでみる その2 ロボットをつくってみる

準備が終わったところで,今度はTJ3Bで自律型ロボットをつくってみます.

まずは走らせてみる

まずは簡単なプログラムを作成してTJ3Bを動かしてみます.

例によって,プログラミングソフトウェアC-Styleの使い方も メーカのWebサイト にある説明書に詳しく書いてありますので,併せて読んでみてください.
TJ3B C-Style 導入編 TJ3B C-Style 操作編

パソコンでプログラミングソフトウェアC-Styleを立ち上げ,左側のプログラムボタンリスト(背景が青色の部分)の一番左上のTJ3Bっぽいマークのボタンをクリックします. その後,右側のプログラムを書くエリア(背景が薄い緑の部分)でクリックすると命令が入力されます. 表示されるウィンドウでは,L:50%,R:50%と出ているのでこのまま「OK」をクリックします.

1行だけですが,これでプログラムとして動作します.

TJ3Bには2つのモータとタイヤが付いていますが,このプログラムは
左(Left)のモータを50%の電圧,右(Right)のモータを50%の電圧で駆動する
という意味になります.

次は,ビルドと書き込みです.
パソコンとTJ3BをUSB-シリアル変換ケーブルで接続し,TJ3BのスイッチをONにして, C-Styleの上の方にある「ビルド」のボタンをクリックします.

「名前を付けて保存」のウインドウが出たら,適当な名前を付けて「保存」をクリックします.
すでに保存していたプログラムを編集した場合などは,場合上書きするか聞かれます.

次に,ビルドを実行します.
「ビルド」実行をクリックすると,ビルドが実行されます.

ビルドが完了するとこのメッセージが出ます.
これでTJ3Bにダウンロードできるデータが作成されました.
「OK」をクリックします.

次に,TJ3Bにデータをダウンロードします.
「開始」をクリックすると,ダウンロードが実行されます.

ダウンロードが完了するとこのメッセージが出ます.
これで,プログラムのダウンロードは完了です.

TJ3BのスイッチをOFFにして,TJ3BからUSB-シリアル変換ケーブルを外します.
TJ3Bを床に置いてスイッチをONにし,STARTボタンを押すと概ねまっすぐ前進するはずです.
もし,後退したり回転したりする場合は,プログラムや配線を見直します.

めでたくTJ3Bが動くようになりましたが,ただまっすぐ前進するだけではロボットとは言い難いですので, 次はロボットになるようにプログラムを改良します.

タッチセンサを使って自律型ロボットにする

(自律型)ロボットとは,自身で状況を判断して動作をするロボットです.
そのためには「状況」を知る必要がありますが,今回はTJ3Bに標準で付いているタッチセンサを使ってこれを実現してみます.

TJ3Bをパソコンに接続し電源をONにして,C-Styleの上の方にある「センサモニタ」ボタンを押します.
「Sensor Monitor」のウィンドウが出るので,右下の方の「モニタ開始」のボタンをクリックすると,各センサの値が表示されます.

上の図は,左のタッチセンサを押している状態の表示です.「CN3 L-Touch」に「100%」が表示されています. タッチセンサを放すと「CN3 L-Touch」に「0%」が表示されます.
同様に右のタッチセンサを押すと「CN4 R-Touch」が,真ん中のタッチセンサを押すと「CN5 C-Touch」が反応します.

これを踏まえて,下記のようなプログラムを作ります.
前進して壁にぶつかったら(真ん中のタッチセンサが押されたら),少し後退して右に向きを変えてまた前進する.
というプログラムです.

プログラムは基本的に上から下に向かって1行ずつ実行されていきますが,その流れを変える「制御構文」と組み合わせて作成します.
今回は「while 〜 end while」と「if 〜 else 〜 end if」を使っています.

  • 「while 〜 end while」
    001行目に「while」,010行目に「end while」があります.
    今回は無条件ループにしていますので,「while」と「end while」の間を無限に繰り返します.
  • 「if 〜 else 〜 end if」 002行目に「if」があり,続いて「CN5 > 50%」という条件式があります.
    条件が成立したとき(今回は真ん中のタッチセンサが押されたとき),
    「if」の次の行から「else」の前の行までが実行されます.
    今回は,0.5秒間後退し,0.5秒間右旋回します.
    条件が成立しないときは,「else」の次の行から「end if」の前の行までが実行されます.

このプログラムを,ビルド,ダウンロードすると,TJ3でこんな動きができます.
動画のとおり,前進して壁にぶつかると方向を変えてまた前進します.

だいぶロボットっぽくなりましたが,斜めに壁にぶつかった場合は反応しないので,下のようにプログラムを改良します.

このプログラムでは変数「A」を使っています.変数を使うと値を覚えておいて条件判断などに使用できます.
3つのタッチセンサを順番に確認し,押されている場合は変数「A」に1を代入しています.
つまり「A=1」はタッチスイッチのどれかが押されていることを表し,「A=0」はタッチスイッチがどれも押されていないことを表します.
このような変数をよくフラグと呼びます.
012行目以降は前のプログラムとほとんど同じで条件判断に変数「A」を利用しています.

プログラムをビルド,ダウンロードすると,壁にぶつかったら向きを変えて進む動きができるようになります.

もうちょっとロボットをつくる

ロボット(robot)という言葉の語源は,チェコ語で強制労働を意味する「robota」だといわれています.
強制労働というとちょっと暗い感じですが,目的もなくただ動くのも面白くないのでこのTJ3Bにもロボットになってもらうべく改造します.
今回は,お掃除ロボットになってもらうことにしました.

TJ3Bのサイズに吸塵機能を搭載することは難しいので,今回はハンディモップ(ウェーブ)を取り付けてみます. 必要な部品は下記のとおり.

  • ウェーブ ハンディワイパー
    「ホコリを舞い上げず,からめとって離さない!ゴミ吸着率150%にアップ!」だそうです.
    軽いのでTJ3Bでも十分運べます.今回は先端のシートの部分だけ使用します.

まず,部品の加工します.
ユニバーサルプレートを穴が3×5個残るように切ります.カッターでもノコギリでも切れますが, 歯の薄いニッパで切るのが比較的に簡単・安全かと思います.

次に,モップ部分の組み立てます.
今回はネジは使わず,ユニバーサルプレートセットに入っているプッシュリベットを使いました.このプッシュリベットは外すのも簡単ですので, シートが汚れた場合は交換もできます.

最後に,TJ3Bに取り付けます.
ここでもプッシュリベットが使えます

完成したロボットを走らせた様子です.ハンディモップ(ウェーブ)の性能もあり,結構ゴミが取れます.
自ら周囲の状況を判断し目的の作業を実行できる「自律型ロボット」になりました.

補足:用語の紹介

初めてのかたは馴染みがないかもしれない用語の紹介です.

  • C言語
    プログラミングソフトウェア「C-Style」の由来でもあろうプログラミング言語です.
    広く普及しているプログラミング言語で世の中のいろいろな製品に使われており,電子工作やロボット工作でもよく使われます.
    ちなみに,人に「なぜ“C”なのか?」と問うと「“B”の次だから.」という答えが返ってきたりします.
  • タッチセンサ
    物体の接触を検出するセンサです.TJ3Bのタッチセンサは回路としては押しボタンスイッチと同じです.
  • 無条件ループ,無限ループ
    どちらも同じで「ずっと繰り返すプログラム」です.
    このようなロボットのプログラムは終了してはいけないので,ずっと繰り返して終わらないように作ります. プログラムが終了することはロボットの暴走を意味します.
  • タミヤ
    大変有名な模型メーカです.ミニ四駆,ラジコン,ミリタリーモデルの他,今回使用したような工作用部品も製造・販売しています.
  • 楽しい工作シリーズ
    タミヤの工作用部品のシリーズで,様々な部品やキットが揃っています.
    部品同士の取り付けに使う穴が直径3o,ピッチ5oになっており,TJ3Bの改造にぴったりです.というかTJ3Bがこれに合わせて作られたのだと思います.
  • プッシュリベット
    ネジの代わりに部品の締結に使えます.2つの部品がセットになっていて,ピンを押し込むとストッパの先端が広がって部品を固定します.