TOP > カテゴリ > ロボット・電子工作・マイコン >

四足歩行ロボットへの挑戦 試作機 [Arduino]

前へ進んだ後に、後ろに戻ってきます。

今回もプロトタイプ(試作機)なのでプラ板や結束バンドなどで「アバウト」に組み立ています。本稼動させる場合は、アルミ板や木材、ネジなどを使用して「精密に製作」すると歩行の動作が安定します。

それ以外にも、ロボットの足裏の素材/サイズの影響も大きいです。

使用部品・材料

総額で約23,854円です。(Arduino本体の値段を除く)

部品/材料値段備考
[電子部品]
サンハヤト SAD-101 ニューブレッドボード
(3個)
¥1500Amazon.com
ロジックレベル双方向変換モジュール
(2個)
¥7361.8Vから10Vまでに対応した電圧レベル変換。
スイッチサイエンス(SFE-BOB-12009)
Longruner サーボ ロボット用 デジタルサーボ 二軸 180度動作 15kg/17kg 0.16sec/60°トルク 1mm硬質アルミ板(大/小U) スマートロボットサーボ 高性能 LY10-1
(8個)
¥17,600各関節用
Amazon.com
両端ロングピンヘッダ 1×40¥50ニッパーで3つにしてサーボの端子と接続。(ジャンパーワイヤーでも代用可能)
秋月電子の通販コード(C-09056)
15 cm 150mmオスtoメスJR プラグ  RCラジコン サーボ延長リード線ケーブル (20本入り)¥1199サーボ端子の延長用
Amazon.com
タクトスイッチ¥10歩行開始用。
秋月電子の通販コード(P-03647)
カーボン抵抗器数円10kΩ(1個)を使用。
[電源]
ブレッドボード用DCジャックDIP化キット¥100(開発時)サーボの外部電源用。
秋月電子の通販コード(K-05148)
スイッチングACアダプター6V2A 100~240V NP12-US0620¥840(開発時)サーボの外部電源用。
秋月電子の通販コード(M-00024)
ROBOパワーセル F2-850タイプ(Li-fe) 任意ロボットのサーボ用バッテリー。
マルツなどで販売
※取扱店リスト
リチウムフェライトバッテリー専用充電器 BX-20LF任意ロボットのサーボ用バッテリーの充電器。
マルツなどで販売
※取扱店リスト
[材料]
KSNR-205¥100反発弾性に優れたスポンジ。ロボットの足裏に使用。ゴムの方が前に進みやすいかも?
ホームセンターなど
タミヤ ユニバーサルプレート 2枚セット (70157)
(2個) 
¥936ロボットの胴体用。プラ板を合計4枚使用。
Amazon.com
ステンレス 金折隅金 38x38mm 2個セット
(2個)
¥200サーボと胴体の固定用(L字のブラケット)。
100円ショップ(ダイソー)
結束バンド 170本入り白色 10cm(4inch)¥100サーボ同士の固定などに使用する。
100円ショップ(ダイソー)
3M スコッチ はがせる両面テープ 強力 薄手 12mm×15m SRE-12¥483足裏のスポンジなどに使用する。
※強力ではがせる両面テープです。
Amazon.com

写真

実物は予想以上に大きくて重いです。胴体はプラスチック板(4枚)だと限界に近いです。アルミ板か木材が良いです。

配線図

スケッチ(プログラム)

タクトスイッチを押すとロボットが前進、後進を行います。

//  <注意> 
//  スケッチを書き込む際はArduinoのデジタル1ピンから
//  ジャンパーワイヤーを外して下さい。
//  書き込み後に1ピンにジャンパーワイヤーを挿入します。

#include <Servo.h>
Servo myServo1; // 左前下
Servo myServo2; // 左前上
Servo myServo3; // 左後下
Servo myServo4; // 左後上
Servo myServo5; // 右前下
Servo myServo6; // 右前上
Servo myServo7; // 右後下
Servo myServo8; // 右後上

void setup() {
  pinMode(13, INPUT);

  myServo1.attach(1,500,2500);
  myServo2.attach(2,500,2500);
  myServo3.attach(3,500,2500);
  myServo4.attach(4,500,2500);
  myServo5.attach(5,500,2500);
  myServo6.attach(6,500,2500);
  myServo7.attach(7,500,2500);
  myServo8.attach(8,500,2500);

  // サーボの位置を初期化する
  myServo1.write(0);
  myServo2.write(90);
  myServo3.write(0);
  myServo4.write(90);
  myServo5.write(0);
  myServo6.write(90);
  myServo7.write(0);
  myServo8.write(90);

  delay(2000);
}

void loop() {

  if (digitalRead(13) == HIGH) {

    // 前へ進む
    for(int i=0;i<5;i++){
      // ----------------------------
      //  対角線1ペア(右前足、左後足)
      // ----------------------------   
      // 足を上げる
      myServo3.write(90);
      myServo5.write(90);
      delay(500);
  
      // 脚を前へ
      myServo4.write(150);
      myServo6.write(150);
      delay(750);
  
      // 足を下げる
      myServo3.write(0);
      myServo5.write(0);
      delay(750);
  
      // 脚を定位置に戻す
      myServo4.write(90);
      myServo6.write(90);
      // 反対の対角線ペアを後ろへ
      myServo2.write(30);
      myServo8.write(30);
      delay(750);
  
      // ----------------------------
      //  対角線2ペア(左前足、右後足)
      // ----------------------------
      // 足を上げる
      myServo1.write(90);
      myServo7.write(90);
      delay(500);
  
      // 脚を前へ
      myServo2.write(150);
      myServo8.write(150);
      delay(750);
  
      // 足を下げる
      myServo1.write(0);
      myServo7.write(0);
      delay(750);
  
      // 脚を定位置に戻す
      myServo2.write(90);
      myServo8.write(90);
      // 反対の対角線ペアを後ろへ
      myServo4.write(30);
      myServo6.write(30);
      delay(750);    
    }

    // 初期化
    myServo4.write(90);
    myServo6.write(90);
    delay(500);   
         
    // 後ろへ進む
    for(int i=0;i<5;i++){
      // ----------------------------
      //  対角線ペア1(右前足、左後足)
      // ----------------------------   
      // 足を上げる
      myServo3.write(90);
      myServo5.write(90);
      delay(500);
  
      // 脚を後ろへ
      myServo4.write(30);
      myServo6.write(30);
      delay(750);
  
      // 足を下げる
      myServo3.write(0);
      myServo5.write(0);
      delay(750);
  
      // 脚を定位置に戻す
      myServo4.write(90);
      myServo6.write(90);
      // 反対の対角線ペアを前へ
      myServo2.write(150);
      myServo8.write(150);
      delay(750);
  
      // ----------------------------
      //  対角線ペア2(左前足、右後足)
      // ----------------------------
      // 足を上げる
      myServo1.write(90);
      myServo7.write(90);
      delay(500);
  
      // 脚を後ろへ
      myServo2.write(30);
      myServo8.write(30);
      delay(750);
  
      // 足を下げる
      myServo1.write(0);
      myServo7.write(0);
      delay(750);
  
      // 脚を定位置に戻す
      myServo2.write(90);
      myServo8.write(90);
      // 反対の対角線ペアを前へ
      myServo4.write(150);
      myServo6.write(150);
      delay(750);    
    } 
  }

  delay(10);
}

右前足、左後足を「対角線ペア1」。左前足、右後足を「対角線ペア2」。

そして、対角線ペア1、対角線ペア2の動作を併せた歩行動作を「1セット」としています。このロボットの「歩行の原理」はソースコード内のコメントと実際の動作から読み取ってください。

参考動画

4脚ロボット(H25-42N)
Raspberry Piで4足歩行ロボット
四足歩行ラジコンロボットの制作
多脚ロボットEXOSシリーズ HP-25S
KXR L4T demo
など多数。YouTubeで先人の動画を参考にすると良いです。





関連記事



公開日:2018年01月16日 最終更新日:2018年01月22日
記事NO:02630