6足歩行ロボットを使った学習

Takerusoftware 2021.12

６足歩行ロボットを使った学習

前回のArduBlockの学習で、基本的なArduBlockの使い方とArduinoでの制御方法を学べたと思う。

・六足歩行ロボット「壱式」を組み立てよう
１）足の組み立てから始めるよ。フットプレートA、8mm
カラー、アルミ14.5mmスペーサ、フットステー、3mm
ワッシャ、M3x20
ネジ、M3ナットを準備する。

ここからは実践編。
リンク機構を使った６足歩行ロボットの制御、床の黒い線を検出しながらその線の上をなぞって歩くライントレース、距離センサを使って障害物を検出し回避動作をするプログラムを学んでいこう！
今回作るロボットは「六足歩行ロボット 壱式」。
最終的にサーボモータを２個、ラインセンサーを３個、距離センサーも３個備えた自律動作ロボットなんだ。

２）M3x20ネジに3mmワッシャーをつけてフットプレートAの中央の穴に差し込む。（フットプレートAの上下に注意。大
きい穴が空いている方が上になる）

六足歩行
ロボット

壱式

1

Takerusoftware 2021

６足歩行ロボットを使った学習

3）アルミの14.5mmスペーサーを先ほどのM3ネジに通し、そこに8mmカラーを差し込む。

５）組み立てたフットパーツにリンクを組み付ける。
リンク、アルミ5mmスペーサ、M3x8ネジ、3mmワッシャ
ー、M3ナットを準備する。

４）フットステーも差し込んで、M3ナットをはめて締め付ける。（やや強く）
６）5mmスペーサーをフットパーツとリンクの穴に差し込む。

2

Takerusoftware 2021

６足歩行ロボットを使った学習

７）M3x8ネジに3mmワッシャーを取り付け、5mmスペーサ
ーに通し、裏側からM3ナットで固定する（強めに）９）リンクを先ほど組み立てたフットパーツのリンクに重ねる。

８）中間の足を組み立てよう。
フットプレートB、リンク２枚、サーボホーン、クランクプレート、9mmスペーサ、5mmスペーサ、M3x16ネジ、M3x8ネ
ジ、3mmワッシャー、M3ナットを使うよ。

10）裏表をひっくり返して、フットプレートBと9mmスペー
サをつける。

3

Takerusoftware 2021

６足歩行ロボットを使った学習

11)クランクプレートを取り付ける。

13）表と裏をひっくり返して3mmワッシャーとM3ナットで強めに締め付ける。

12）サーボホーン取り付けM3x16ネジを差し込む。

14）リンクを裏側に重ねる。

4

Takerusoftware 2021

６足歩行ロボットを使った学習

15）スペーサー5mmを差し込み、M3x8mmネジに3mmワッシャーを組み付けスペーサーに入れて、M3ナットで強めに締め付ける。

17)次に使うのは、フットプレートA、フットステー、16mm
スペーサー、8.6mmカラー、リングスペーサ、M3x20ネジ、3mmワッシャー、M3ナット、7mmスペーサ、M3x10ネジ。

16)ここまでの工程でこの形になっていればOK。

18)リングスペーサを中央のリンクに重ねる。

5

Takerusoftware 2021

６足歩行ロボットを使った学習

19）さらにフットプレートAを重ね、7mmスペーサを差し込む。

21）8.6mmカラーにアルミの16mmスペーサを差し込み、M3x20に3mmワッシャーをつけたものをフットプレートAの後ろにリンクがくるようにして差し込む。

20）3mmワッシャーをつけたM3x10ネジを差し込み、M3ナ
ットをつけて強く締める。
22）フットステーをアルミ16mmスペーサに差し込んでM3ナットで強く締める。

6

Takerusoftware 2021

６足歩行ロボットを使った学習

22）完成した左足のユニット

23）右足のユニットもこれまでの組み立て手順を参考に左足と対称になるように組み立てる。

7

Takerusoftware 2021

６足歩行ロボットを使った学習

24）サーボの組み立てに使う部品は、サーボ、サーボステー、M3x10ねじ、M3ワッシャー、M3ナット。

26）もう１つも組み立てるが対称になるようにすること。

25）M3x10ねじとM3ナットを使ってサーボステーをこのように取り付ける。ネジは緩く止めること。

27）左右対称で組み立てたサーボモータ

8

Takerusoftware 2021

６足歩行ロボットを使った学習

28）サーボユニットをベースに取り付ける。使う部品はベース、サーボユニット、M2x8ネジ、M2ナット。

30）サーボユニットをこの向きに乗せる。

31）裏側からM2x8ネジとM2ナットで固定する。
29）ベースの向きを間違えないように作業をする。この写真の通りに机に置く。

9

Takerusoftware 2021

６足歩行ロボットを使った学習

32）反対側も同じように組み付ける。
ここでサーボモータのネジもやや強めに締め付けて固定する。

34）フットステーをM2.5x10でベースに取り付け、M2.5ナ
ットで強く固定する。

35）右足ユニットも同様に組み付ける。
33）左足ユニットのサーボホーンをサーボモータに取り付ける。

10

Takerusoftware 2021

６足歩行ロボットを使った学習

36）次に使う部品はArduinoMEGA、スペーサ、M2.5x10ネ
ジ、M2.5ナット。

38）スペーサーを取り付ける。

37）ArduinoMEGAにM2.5x10を差し込む
39）ロボットにArduinoMEGAを取り付けM2.5ナットで固定する。

11

Takerusoftware 2021

６足歩行ロボットを使った学習

40)フットゴムの取り付けに使う部品はフットゴム、M2.5x5
ネジ、M2.5ナット。

41）6本の足すべてに取り付ける。

12

Takerusoftware 2021

６足歩行ロボットを使った学習

組み立てで難しいのは、足ユニットのリンクとの位置関係かもしれないので、色分けした形で載せておくね。

42）ArduinoMEGAにGROVEシールドを差し込み、左サー
ボモータのコネクタをGROVEシールドのD2サーボコネクタに、右サーボのコネクタをD3サーボコネクタに差し込んで完
成。

左側

右側

13

Takerusoftware 2021

６足歩行ロボットを使った学習ロボットの組み立て、お疲れ様でした！
ではここからロボットを動かす学習をやっていこう。

１）前進するプログラム
D2に繋がった左足のサーボを反時計回りに、D3に繋がった
右足のサーボを時計回りに回すとロボットが前進するよ。
輪ゴムガトリングで使ったサーボは０〜１８０度の角度で揺動するけど、このロボットのサーボは９０度で停止、それより大きい数字で反時計回り、小さい数字で時計回りに回転

やりたいことは・・・・
１）ジョイスティックを繋いで、前後左右に移動できるロボットにしてみよう。
２）地面に書かれた黒い線をなぞって動くライントレーサー
ロボットにしてみよう。

するんだ。
このプログラムは、前進を10秒経過するまでおこなってから停止するプログラムになるよ。

３）進行方向に障害物があったらそれを回避できるロボットにしてみよう。
この３つだよ。
まずは、ロボットを前進させるプログラムを書いてみようか。

14

Takerusoftware 2021

６足歩行ロボットを使った学習

2）後退するプログラム

3）左旋回

前進する左右のサーボを逆に回転すると後退させることができる。
さっきの前進するプログラムとどこが変わったかわかるかな？

左に旋回するのには、左足を後退させて右足を前進させれば実現できる。
プログラムで書くとこんな感じ。

15

Takerusoftware 2021

６足歩行ロボットを使った学習

4）右旋回プログラム

5）前進・後退・左右旋回、停止をサブルーチンにしてみよう

左旋回とは逆に両方大きい数値にすれば右に旋回できるよ。

例えば前進を３秒、後退を３秒して停止するプログラムを書
きたいときは、こんな感じに書くことができる。

16

Takerusoftware 2021

６足歩行ロボットを使った学習でもこれだとパッと見た感じ、何をしているか分かりづらくないかい？
しかも、前進して後退して左旋回して前進して・・・と動きをたくさん書いていったらもう、何をしているか分からないよね？

プログラムのところを書き出したのがこれ。

そこで、使えるのがサブルーチンだ。
さっきのプログラムをサブルーチンにしてみた。

上から、前進→３秒待つ→後退→３秒待つ→停止の動きになる。
fowardを書いておくと、ここを実行するときにサブルーチンのfowardのcommands部分を実行して戻ってくる。
前のページに比べるとすごく分かりやすくなっている感じがしないかな？

17

Takerusoftware 2021

６足歩行ロボットを使った学習

残りの旋回も含めサブルーチンにしたプログラムを載せておくね。

18

Takerusoftware 2021

６足歩行ロボットを使った学習

つまり、xが０なら左旋回、xが1023なら右旋回、yが0なら後退、wが1023なら前進というように、さっき作ったサブルー
チンを呼び出せばロボットが動くようになるね。

６）ジョイスティックで動くロボットに改造しよう！
ジョイスティックをA0に繋いで次のプログラムを書いてみよう。

じゃあ、さっきのプログラムをジョイスティック対応にしてみようか。

ジョイスティックはA0とA1にアナログ信号を出力する。
スティックが前後左右どちらにも倒れていない時には、0〜1024の中央の値の511近辺の数値が表示される。

ここから左に倒すとx=0に、右に倒すとx=1023に、上に倒すとY=1023に、下に倒すとy=0になった。

19

Takerusoftware 2021

６足歩行ロボットを使った学習

ジョイスティックからの入力をxとyの変数で受ける。
あとは前のページの説明通り。
停止の条件は、xが0でもなく1023でもなくyが０でもなく１
０２３でもない時に停止にしてみたよ。
それと、サーボモータの値を80→0に、100→180に変更して出来るだけ早く動作するようにしているよ。

20

Takerusoftware 2021

６足歩行ロボットを使った学習・ロボットをバッテリーで動作するようにしてみよう

このArduinoの動作電圧は5V。サーボモータは4.5〜6Vの間で動く。
なので、5Vの電源を用意してあげればArduinoもサーボモータも同時に賄うことができる。

ジョイスティックでロボットを動かすのはどうだった？
意外に簡単〜！だったかな？それとも難しかったかな？
実際にはプログラムよりもパソコンのUSBケーブルからロボットに給電されているので、ケーブルが短すぎて操作がままならない！！って感じだったんじゃないかな？

そこで、ドローンなどに使われている7.4Vのリポバッテリ
ーを5Vに電圧を落として供給することにしたよ。

そこで、ロボットをバッテリーで動くように改良してみよう。
今は、こんな感じでパソコンから電源をもらっているけ
ど、

7.4V
リポバッテリー

7.4V

DCDC

5V

コンバータ

電圧を落とすのはDCDCコンバータという部品で行う。
この部品のGROVEコネクタをArduinoに差し込むと5Vが供給されるんだ。

Arduinoサーボモータこんな感じで、Arduinoにバッテリーをつけちゃえば邪魔なUSBケーブルを無くせるので操作性が良くなるよ。

21

Takerusoftware 2021

６足歩行ロボットを使った学習

バッテリーとDCDCコンバータの取り付け(3)バッテリーとDCDCコンバータのコネクタを繋ぐ。

(1)DCDCコンバータの両面テープを剥がし、写真の場所に貼る。

(2)バッテリーに両面テープを剥がし、写真の場所に貼る。
後はDCDCコンバータ側のGROVEコネクタをArduino側の空いているコネクタに挿せば、USBケーブルに引っ張られることなく自由にロボットを動かせるようになった。
ボールを使ってサッカーをしたり、お互いの陣地に旗を置いて、輪ゴムガトリングガンで撃ち合ったりしても面白いかもね。

22

Takerusoftware 2021

６足歩行ロボットを使った学習

７）ライントレースロボットにしてみよう

ロボットにはこのセンサーを３つ付けてある。
右、左、中央を検出できる。

床に書かれた黒い線などをセンサーで検出して、その線に沿って走行するロボットを「ライントレースロボット」と言うよ。

どうして３つ付いているんだろう？
それはこんな考え方で付けたんだ。

どんな仕組みでライントレースをしているんだろう？
一般的なものを説明するね。

中央のセンサーがラインを検出している時は前進する。
進行方向

まず、床に書かれた黒い線はフォトリフレクタというセンサ
ーで検出するよ。
これは、センサーから赤外線を出して、床に当たって跳ね返って来たものを検出するんだ。
白い床ならば、赤外線をよく反射するので検出できるけ
ど、黒い色などは反射されにくいので検出できない。
検出した時をHIGH、検出できない時をLOWとして信号を出力するセンサーなんだね。
赤外線が跳ね返って赤外線が跳ね返って来たからHIGH

来ないからLOW

ロボット
右センサーがラインを検出したら、中央センサーが入るまで右旋回をして方向転換。

ト

ッ
ボ
ロ
右旋回

左センサーがラインを検出したら、中央センサーが入るまで左旋回をして方向転換。

白い床

このセンサを使って、黒い線をなぞるようにロボットのサー
ボモータをコントロールして走らせてあげれば、ライントレー
スロボットになるんだ。

左旋回

ロボ

ット

23

Takerusoftware 2021

６足歩行ロボットを使った学習

・ラインセンサーモジュールをロボットに取り付けよう(2)センサーをラインセンサプレートにM2.5x10ネジとナットで取り付ける。（強く締めすぎないように気を付けよう。）

今回用意したラインセンサーモジュールは、D4、D5、D6に接続する。
D4が左、D5が中央、D6が右のラインの検出を担当するよ。
検出する感度は、トリマーを回すことで調整できるんだ。
(1)ラインセンサーで使う部品は、ラインセンサープレート、
ラインセンサーASY、M2.5x10ネジとM2.5ナットになるよ。
（キットによってはM2.5x12ネジの場合があります）(3)次にセンサーステーとM2.5x10ネジとM2.5ナットと3mm
ワッシャーを準備する。

24

Takerusoftware 2021

６足歩行ロボットを使った学習(4) センサーステーをM2.5x10ネジと3mmワッシャー、M2.5ナットで固定する。

(6)センサーステーに、取り付けプレートをM2.5x10ネジとM2.5ナットで取り付ける。

(5)次に使う部品は、取り付けプレートとM2.5x10ネジ、M2.5ナット。

25

Takerusoftware 2021

６足歩行ロボットを使った学習(7)組み立てたラインセンサーモジュールをロボットに
M2.5x10ネジとM2.5ナットで固定する。

(8)左センサーと中央センサーがセットになったGROVEコネ
クタをD4に差し込む。
右センサーのコネクタは、D6に差し込む。

(9)白い紙に黒いビニールテープを貼って、写真のように指２本分くらい浮かした状態で、ビニールテープを検出すると左側のLEDが消えるようにトリマーを回して調整する。
（この調整は３つのセンサーでそれぞれ行う）

26

Takerusoftware 2021

６足歩行ロボットを使った学習センサーの調整が終わった状態で、このプログラムを書き込んでロボットが黒いラインを正しく認識しているか確認しよう。
左センサーが検出するとL=0からL=1に、中央センサーが検出するとC=0からC=1に、右センサーが検出するとR=0からR=1に変化するよ。

27

Takerusoftware 2021

６足歩行ロボットを使った学習

さあ、検出はできた！
あとは、「検出した状態を表示する」プログラムから「検出した状態によって、旋回もしくは前進を行う」プログラムにするだけだね！

それは、「スピードが合ってない」からなんだ。
例えば右センサーが黒い線を検出し右旋回をする。

ト

ッ
ロボ

ではプログラムを書いて実行してみよう。
その時の待ち時間が２秒。
ロボットが旋回動作をおこなっている間は他のセンサーを検出できない。
そのため、黒い線を中央と左センサーが通過してしまいライ
ンを見つけらなかったり、中央センサーだけを通過した場合には、左センサー検出で左旋回が始まってしまい、左と右の旋回を繰り返したりと意図しない動きになってしまうからなんだね。
これを解決するにはどうしたらいいか？
このプログラムには２つの「スピード」がある。
結果はどうだったかな？ちゃんとライントレースをして動いただろうか？

１つは今説明した検出後の待ち時間によるもの。
もう１つはサーボモータのスピードだ。

きっとバタバタ動くだけでちゃんと走れないロボットばかりだ
ったと思う。
なんでだろう？？？
考え方が間違っているのかな？いや、考え方は間違ってはいない。じゃあなんで？？

じゃあ、試してみようか。最初は検出後の待ち時間を変えてみよう。

28

Takerusoftware 2021

６足歩行ロボットを使った学習

先ほどまでは2000ミリ秒だった待ち時間を100ミリ秒にしてみたよ。

直進の時は2000ミリ秒にしてみたよ。

どうだろう？さっきよりはシェイクが少なくなったかな？
うまくいかないって人は左右旋回の時間を300とか500に変えて実験してみよう。

こうするとロボットは激しくシェイクしながらライントレース
をして走り出す。
前より短い時間でセンサーを検出し姿勢を制御するからこうなるんだね。

さて、もう１つのアプローチはサーボモータの速度を遅くしてみるだったね。

でもこのプログラムを見て気づいた。
「中央からラインが外れた場合は細かくチェックしながらラインに戻ればいいけど、直進するときはそんなに細かく見な
くてもいいんじゃない？」って。

上のプログムの待ち時間を全て2000ミリ秒に戻して、今度はサーボモータの速度を変えてみようか。

早速改良してみよう。

29

Takerusoftware 2021

６足歩行ロボットを使った学習

今、サーボモータの設定は、半時計周りは180、時計回りは0になっているけど、これを100と80に変えてみようか。

さっきに比べるととてもゆっくり動くけれどもなんとかライ
ントレースをして動くようになったかな？
見ていると、ラインを検出したあとの2000ミリ秒の待ち時間が長くてまだ動きがぎこちない。
さっきみたいにそこの数値もいじってみようか。
旋回を500ミリ秒にしてみたよ。

どうだろう？いい感じになったかな？
この数値を大きくしたり小さくしたりしてロボットが滑らかにライントレースをするように調整してみよう。
こんな感じでロボットっていうのは、単にデータを処理するだけのプログラムと違って、実機の能力に合わせて細かなチューニングをしてあげないとうまく動かないものなんだ。

30

Takerusoftware 2021

６足歩行ロボットを使った学習

8）チューニングを楽にしてみよう

この変数をプログラムのそれぞれの部分に割り当ててやる。

さっきまでのプログラムで主に修正したのは
1.旋回の待ち時間
2.前進の待ち時間
3.モータの時計回りの速度
4.モータの反時計回りの速度だったけど、この４つを変えるのに何箇所もプログラムを直さないといけなかった。
すごく面倒だから「変数」を使って簡単に変えられるようにしてみようか。

そしてサーボモータの値も変数にするよ。ただし、停止だけ
は90のままでいいからそこはいじらない。

こんな感じで上から、旋回、前進の待ち時間、時計、反時計
回りの速度の変数を作ってみたよ。

31

Takerusoftware 2021

６足歩行ロボットを使った学習コースを作って走らせてみよう！
様々なコースを作って上手に走れるか挑戦してみよう。
４つの変数をうまく調整して頑張ってみよう。

これで、セットアップのところにある４つの変数の値を変更するだけで、動きの変わるプログラムができたね。

32

Takerusoftware 2021

６足歩行ロボットを使った学習

9）動きを止める処理を追加してみよう

でも残念！これはうまく動かない。
なぜかというとこの処理の前に旋回や前進をするプログラムがあるからなんだ。
結局はその処理をした後に止める処理が入るので「何もしていない」のと同じになるんだよ。

今のロボットは黒い線を３つのうちのどれかのセンサで検出すると動き出す。
でもまだ止める方法を決めてなかった。
単純に３つのセンサーが全て入った状態で止めるというのはどうだろう？

cv

どうすれば良かったかは次のページに書いてある。

ロボット

条件が全て揃ったらという処理
は、テスト部品の「かつ」を使うんだったね。

33

Takerusoftware 2021

６足歩行ロボットを使った学習

正しい処理はこんな感じ。
「もし／でなければ」部品を使って、もし、全てのラインセン
サーがHIGHならば停止、そうでなければ旋回・前進をおこなって走行するという感じにプログラムを書くんだ。

コースアウトの検出をしよう
ロボットをコースで走らせる実験をしていて、コースアウト
した時にもその直前の動き（旋回や前進）をおこなっているのでロボットは止まることができない。
放置しているとバッテリーが切れるまでどんどん走っていってしまうので、「コースアウト」の検出を考えてみよう。

進行

方向

ロボ

ット

前進や旋回でコースアウトをするということは、ロボットの後ろ側にはコースがある可能性があるってことになるよね？
なので、後退してあげれば戻れるんじゃないかな？
コースに＋になるように8cmくらいの黒いビニールテープなどを貼ってちゃんと止まるか試してみよう。

ロボ

ット

34

進行

方向

Takerusoftware 2021

６足歩行ロボットを使った学習コースアウト時の処理をまとめると、全部のラインセンサーがLOWの場合の条件

・コースアウトを検出したら・ロボットを後退させる
こんな感じで実にシンプルなんだけど、「何をもってコースア
ウト」とするかが問題。

この条件が「何秒間か継続している」・・ということを設定できる部品がないので、loopの中でこの条件が成立する間変数を+1していって（カウントアップ）ある程度のカウントに増えたら後退動作をするというのはどうだろうか？

コースアウトというのは。
・３つのセンサーがどれも黒いラインを見つけていない状態になるよね。
でも一瞬でもその状態になったらコースアウトじゃないと思う。
外れた状態で、しばらく走ったらコースアウトにした方が現実的だと思う。

では実際に「どこのラインも見つけていない状態でloopでカウントアップをした時にどのくらいカウントアップする」ものなのか計測するプログラムを書いてみよう。
まず、カウントアップ用の変数line̲outを用意する。

なので、この「全てのラインセンサーが黒いラインをみてない状態が何秒間か続いた（ロボットが進んでしまった）時にコー
スアウト」という判定にした方がいいとおもうんだ。
さて、全てのラインセンサーが黒いラインをみていない（検出がオフ）というのは、前に書いた全てのラインセンサ
ーがHIGHなら停止の逆になるよね？
だったらこんな風にプログラムが書ける。

35

Takerusoftware 2021

６足歩行ロボットを使った学習

どのくらいの数値を入れればいいか分かったんで、シリアルに出力を外して後退動作をいれてみた。

そしてloopのとこに、このプログラムを追加。

さっき決めた条件が成立したならばline̲outにline̲out+1の数値を代入する。（これでどんどん+1された値がline̲outに入ってくる）
arduinoのloopは早く回るので、100ミリ秒の待ち時間を入れているよ。
そしてその数値をシリアルモニタに表示する。

いったん、このプログラムに変更して動作を確認してみよう。
まずは、ラインのあるとこにセンサーを持っていき、前進、もしくは旋回動作をさせる。
その後に、３つのセンサーが白い部分を検出するような位置に移動するとラインアウト状態を作り出せる。
しばらくして後退動作を始めるはずだ。
でも、このプログラムは後退動作を止めるプログラムになっていないので延々と後退し続ける。

条件が成立しない場合はline̲outを０にクリアする。
これで何度もラインアウトした場合のカウントがどのくらいになるか実験できるんだ。

これじゃダメだね。
試しにやってみたら20くらいが妥当な数値だったよ。

36

Takerusoftware 2021

６足歩行ロボットを使った学習

さあ、このプログラムを入れて動きを確認してみよう。

後退（back̲ward）の下にさらに条件をつけてみた。

そしていろんなコースを作ってちゃんと走れるかどうか検証してみてね。
タイムアタックをしても面白いよ！

line̲outが計測されている状態でさらに80カウントまで行った場合に、停止状態にしてさらにその後「真」の条件の繰り返しを入れてみた。
この繰り返しは条件が絶対に偽にならないので延々と繰り返す無限ループになるよ。
その時にcommandsは空っぽなので何もしないを繰り返す。
こうなるとここでプログラムは止まって動かないんだ。

37

Takerusoftware 2021

６足歩行ロボットを使った学習(1)使う部品は、障害物センサーベース、オプションステー、オプションホルダ、障害物センサーASY、M2.5x10（もしくは12）ネジ、M2.5ナット、3mmワッシャー。

10）障害物を検出してみよう
ロボットには輪ゴムガトリングガン以外にも色んなオプションボードを載せられるようにしているよ。
今まで床に付けられた黒いラインをトレースするセンサーユ
ニットで動かしていたけれど、今度は正面と側面にセンサーを配置して障害物を検出して動くようにしてみよう。
・障害物センサーモジュールをロボットに取り付けよう今回用意した障害物センサーモジュールは、D8、D9に接続する。
D8が前、D9が側面の障害物の検出を担当するよ。
検出する感度は、トリマーを回すことで調整できるんだ。

（2)障害物センサーASYを障害物センサプレートにM2.5x10
ネジとM2.5ナットで取り付ける。（強く締めすぎないように気を付けよう）

38

Takerusoftware 2021

６足歩行ロボットを使った学習(3)センサープレートをオプションホルダにM2.5x10ネジとM2.5ナットで固定する。

(5)オプションステーにオプションホルダをM2.5x10ネジに3mmワッシャーを通してM2.5ナットで固定する。

4(4)オプションステーをロボットにM2.5x10ネジとM2.5ナッ
トで固定する。

(6)すべて組み立てるとこのような感じになる。

39

Takerusoftware 2021

６足歩行ロボットを使った学習(3)GROVEコネクタをD8に差し込む。

Fが0になる前方センサーとの距離を5cm、Sが0になる側面センサーとの距離を8cmくらいになるように、センサーのトリ
マーをドライバで回して調整してみよう。

11)障害物を検出すると回避するプログラムを書いてみよう
センサーの調整をする前に、このプログラムを書き込もう。
まずは障害物検出で停止する動きを作ってみよう。
前方障害物なし（D8がHIGH)なら前進、前方障害物を検出(D8がLOW）で停止なのでこんな感じのプログラムかな？
（ただしサーボモータは前と同じサブルーチンを使う）

Fの値が前方センサの検出状態、Sの値が側面のセンサーの検出状態になるよ。
ラインファインダセンサーとは違い、障害物検出をすると０になるんだ。

うまく動いたかな？

40

Takerusoftware 2021

６足歩行ロボットを使った学習

これから作るプログラムのルールとしては、(1)前方センサーが障害物を検出しなければ前進。

(4)抜けたら９０度くらいの右旋回。

障害物
ロボット

障害物

ロボット
(2)検出をしたら側面センサーが障害物を検出するまで左旋
回。

障害物

ロボット

(5)側面センサーが障害物を検出するまで前進

障害物

ロボット
(3)次に側面センサーが障害物から抜けるまで前進。

ロボット

障害物

41

Takerusoftware 2021

６足歩行ロボットを使った学習(6)側面センサーが抜けるまで前進。

(9)側面センサーが入ったら９０度くらい左旋回し(1)に戻る。

障害物

ロボット

障害物

ロボットの旋回したときの角度が正確に判れば障害物を上手く回避して走行ができるのだけど、このロボットにそこまでの機能はないから、上手く行くかまったく分からないけど、プ
ログラムの学習なのだから挑戦してみよう！

ロボット(7)抜けたら90度くらいの右旋回。

障害物
ロボット
(8)側面センサが入るまで前進。

ロボット

障害物

42

Takerusoftware 2021

６足歩行ロボットを使った学習

loopはこんな感じになる。
main̲stepという変数を準備
して、セット
アップで１に。
その後のloopで12）はてさて、どうやってプログラムを作る？？？？
今まで作ったプログラムは、動作ルールが１つだった。
例えばジョイスティックで操作するプログラムは、スティックの値に従ってサーボモータを前後・左右旋回で動かすだけだ
ったし、ライントレーサーもラインファインダーセンサの値

もし、テストのmain̲stepがXならruleXを実行。
その後に何かしらの条件が揃えば、main̲stepのXを+1して次の工程に。
main̲stepが９の時は次のステップを１にして先頭に戻すんだ。
そうすることで繰り返し全てのステップを実行するようになる。

で、真ん中だけだったら前進、右だけなら左旋回、左だけな
ら右旋回でライン中央にロボットを戻すだけ、まあ、ラインから逸脱したときは後退っていう動作もあったけどね。
今度の案件は前のページを見るとわかるけど(1)〜(9)のルー
ルがある。
しかもバラバラにあるルールではなく、(1)が成立したら(2)のルールに、それが終わったら(3)のルールに・・と最後は(9)までいった後にまた(1)に戻る感じ。
1,2,3,4,5,6,7,8,9,1,2,3,・・・・とルールを変えながら次のス
テップに移り変わるように動くプログラムを今回は「ステップ制御」と呼ぶことにするよ。
ステップ１が終わったらステップ２に、それが終わったら３にと内部処理が変わるので、どのステップなのかを覚えている
変数が１つ必要になるね。

43

Takerusoftware 2021

６足歩行ロボットを使った学習

ルール２のプログラムを考えよう「ロボットが障害物を検出するまで前進」だったから「検出をしたら側面センサーが障害物を検出するまで左旋
回」なので

障害物

ロボット

障害物

ロボット

ルール１のプログラムを考えよう

プログラムは前進になる。
プログラムは左旋回になる。

その後、障害物を検出したかチェックする。
前方センサーD8がHIGH(1)からLOW(0)になったかをチェッ
クし、LOWなら次のステップに移行するので、その後、側面センサが障害物を検出したかをチェックする。
側面センサーD9がHIGH(1)からLOW(0)になったかをチェッ
クし、LOWになったら次のステップに移行するので、こんな感じかな？
こうなるね。なんとなく作り方の規則性がわかってきたかな？

44

Takerusoftware 2021

６足歩行ロボットを使った学習

ルール３のプログラムを考えよう

メインプログラムをすっきりするために、ルールをサブルーチンに移動しちゃえ！

「次に側面センサーが障害物から抜けるまで前進」なので

ロボット

障害物

こんな感じに。
このスタイルで描き直すとloopの中のプログラムは恐ろしくすっきりする。

プログラムはまた前進になるね。
ルール１と同じだからまたこれを呼び出すか、そうするとややこしいから冗長だけどrule3でまた同じように書いてみるかい？

さて、どうやったら「見やすいプログラム」になるだろうか。

45

Takerusoftware 2021

６足歩行ロボットを使った学習

ルール１〜３のプログラムを整理してみよう

ルール４のプログラムを考えよう

いままでloopの中に入れてた条件をruleサブルーチンに入れるようにしたので、書く場所が変わってくるよ。

「抜けたら９０度くらいの右旋回」だけど、このロボットには９０度の旋回を検出する機能がないので旋回動作の後に適
当な待ち時間を作って90度旋回させることにする。
そうするとこんな感じ。

次のステップに移るためにセンサーなどの検出条件がないか
ら、無条件で次のステップいくしかないんだ。

でも、やってることは同じだね。

46

Takerusoftware 2021

６足歩行ロボットを使った学習

ルール５のプログラムを考えよう

ルール６のプログラムを考えよう「側面センサーが障害物を検出するまで前進」なので「側面センサーが抜けるまで前進」だったから・・・・ん？
あれれ？これはルール３と同じだ。
だったら側面センサーが抜けたのをテストし成立したら、
main̲stepの変数の値が3なら４に６なら７にすれば１つのruleサブルーチンだけで済んじゃうね。

障害物

こんな感じで。

ロボット

こんな感じだろう。

でもまだ、そこまで考えなくていい。
まず冗長でもちゃんと動くプログラムが作れるようになることを意識しよう。
なので、rule3のプログラムをコピーして名前をrule6にすればいい。
そしてmain̲stepも７に。

47

Takerusoftware 2021

６足歩行ロボットを使った学習

ルール７のプログラムを考えよう

ルール９のプログラムを考えよう「抜けたら90度くらいの右旋回」なので、ルール４と同じだ。

「側面センサーが入ったら９０度くらい左旋回し(1)に戻る」
だからr̲turnと同じくらいの時間で動作させてみようか。

ルール８のプログラムを考えよう
次のページでここまで作ったプログラムを載せるよ。
「側面センサが入るまで前進」だからルール５と同じだね。

48

Takerusoftware 2021

６足歩行ロボットを使った学習

障害物回避プログラム（バージョン０)49

Takerusoftware 2021

６足歩行ロボットを使った学習

サーボモーターのサブルーチン

50

Takerusoftware 2021

６足歩行ロボットを使った学習

13）じゃあこれを全部書き込んで即実行！！と行きたいとこ
だけど・・

ルール０のプログラムを考える
ロボットを止めてそこでプログラムも止まればいいので、ステップで動くようなプログラムの場合、一度に全部のステップを有効にして動かしちゃうと止まった時や不具合が出た時に「どこで止まったか分かりにくい」という問題が出る。
誰しも100%動くプログラムを作りたいけど、そんな簡単にはなかなかいかない。

stopの後は前にも使った無限ループを入れて止める。
そして各ルールのサブルーチンでmain̲stepを本来のものか
ら０にするとこのサブルーチンに来るようにloopのプログラ
ムにこの部品を追加しよう。

ドミノ倒しを見ていると、途中で何個か抜いておいてもし間違って倒してもそこで止まるようにしている。
また、部分ごとの動作テストの時も何個か抜いて次のアクシ
ョンに進まないようにしているんだ。
それと同じように「プログラムを止める＝ロボットを止める」サブルーチンを作り、各ステップの終わりにそれを呼び出すようにするとロボットの動作確認がしやすくなるよ。

51

Takerusoftware 2021

６足歩行ロボットを使った学習

障害物回避プログラム（バージョン1)※サーボのサブルーチンはバージョン０と同じ

52

Takerusoftware 2021

６足歩行ロボットを使った学習

14)早速つまづくわけだけど・・・・・

rule6もrule3と同じように抜けてから旋回のための空間作りに必要な前進をしなければならなかった。
こちらは3000ミリ秒くらい。

意外にもrule3まではすんなり動いた。しかし、前進して側面センサーが抜けるとすぐに止まってしまうとそこで旋回できないことに気づいた。
というわけで、側面センサーが抜けてもしばらく歩くように

その他はrule7とrule9の待ち時間を2500ミリ秒に変更した。
こうして修正したruleサブルーチンを次のページに載せておく

待ち時間を追加してみた。

ね。

こうして実際の動きに合わせながらロボットの動きを微調整していくんだよ。
何度かrule3まで実行して安定した待ち時間が決まったら
rule4に進んでみよう。
ここでは5000ミリ秒の待ち時間が入っているけど、それだと回りすぎてしまった。
なので、2500ミリ秒に変更してみた。

53

Takerusoftware 2021

６足歩行ロボットを使った学習

高性能なセンサーを使った制御じゃなくても一応このプログラムで思ってた動作を行うことができたんだ。
まさにarduinoとGroveとArdublockの可能性は無限大！！

54

Takerusoftware 2021

６足歩行ロボットを使った学習どうだったかな？
今回は６足歩行ロボットを使って、・マニュアルで動かすロボット制御
・自律動作でライントレースをするロボット制御
・自律動作でなおかつステップ動作をして障害物回避をする
ロボット制御これら３種類の制御を学んでみた。
Ardublockは簡単な言語なのだけど、その言語だけでも色々なものを作り、動かすことができる。
まずは数多くのプログラミングを体験し、Arduinoでものを作
り動かすことが何となくでもできるようになれば幸いです。

55

Takerusoftware 2021

６足歩行ロボットを使った学習

巻末資料
・ジョイスティックを使って動くロボット(1)56Takerusoftware 2021

６足歩行ロボットを使った学習

巻末資料
・ジョイスティックを使って動くロボット(2)57Takerusoftware 2021

６足歩行ロボットを使った学習

巻末資料
・ラインをトレースするロボット(1)58Takerusoftware 2021

６足歩行ロボットを使った学習

巻末資料
・ラインをトレースするロボット(2)59Takerusoftware 2021

６足歩行ロボットを使った学習

巻末資料
・ラインをトレースするロボット(3)60Takerusoftware 2021

６足歩行ロボットを使った学習

巻末資料
・障害物を回避するロボット(1)61Takerusoftware 2021

６足歩行ロボットを使った学習

巻末資料
・障害物を回避するロボット(2)62Takerusoftware 2021

６足歩行ロボットを使った学習

巻末資料
・障害物を回避するロボット(3)63Takerusoftware 2021

６足歩行ロボットを使った学習

巻末資料
・障害物を回避するロボット(4)64Takerusoftware 2021

６足歩行ロボットを使った学習

巻末資料

65

Takerusoftware 2021

６足歩行ロボットを使った学習

巻末資料
・アルミスペーサ（左から5mm,7mm,9mm.14.5mm,16mm)

・6足歩行ロボットパーツリスト

・使用ネジリスト(M2.5x10の一部がM2.5x12の場合あり）
M2
ナット

M2
8

M2.5
ナット

M2.5
5

M2.5
10

ガトリングガン

6

6

6

-

6

-

6足歩行ロボット

8

8

30

6

27

23

番号

名称

個数

1

フットプレートA

42

フットプレートB

2

3

8mmカラー

44

フットステー

4

5

リンク

6

6

アルミスペーサ5mm

27

アルミスペーサ7mm

28

アルミスペーサ9mm

29アルミスペーサ14.5mm

210

アルミスペーサ16mm

2

11

サーボモータ2

12

サーボホーン

2

13

クランクプレート2

14

サーボステー

4

15

ベース

1

16

スペーサ(樹脂）

3

17

フットゴム

6

18

ArduinoMEGA

1

19

Groveベースシールド

1

20

ラインセンサプレート

1

ラインセンサASY

1

M3
8

M3
10

M3
16

M3
20

21
22

センサーステー

2

-

-

-

-

-

23

取り付けプレート

2

20

4

10

2

4

24

障害物センサープレート

1

25

障害物センサASY

1

26

オプションステー

1

27

オプションホルダ

1

28

バッテリー

1

29

DCDCコンバータ

1

3mm
M3
ワッシャ ナット・ガトリングガンパーツリスト
番号

名称

個数

1

ベース

1

30

ドライバセット

12

サーボステー

1

31

マグネット

1

3

サーボホーン1

32

ジョイスティックASY

1

4

トリガー

4

33

ケース

5

トリガーステー1

6

ストッパーヘッド

1

7

ビーム

1

8

テンショナープレート

1

66

Takerusoftware 2021

６足歩行ロボットを使った学習

巻末資料
・調整用コース

67

Takerusoftware 2021