平行脚を備えた8自由度ロボット犬が姿勢バランスを実現

1. 機能説明

      この記事の例では、8自由度平行脚ロボット犬の姿勢バランス維持機能を実現します. ロボット犬が台の上に立つと、台が傾くと、ロボット犬は自動的に姿勢を調整して、背中が確実に安定するようにしますレベルです。

2. ロボット犬の安定性解析

      安定性はロボットの犬の動作にとって非常に重要な部分であり、脚式ロボットの安定性を決定するために、研究者は ZMP (ゼロモーメント点)、FASM (力角安定余裕)、ESM (エネルギー安定余裕) などのさまざまな方法を提案してきました。 )など。

      ロボット犬が動くとき、慣性力と脚と地面との間の接触力が主な外乱源となります。地面にあるロボット犬の脚は地面と摩擦力によって支えられますが、その他の外力はロボット犬の重心の慣性力に相当し、力の解析は次の図に示されています。

犬型ロボットの力解析の模式図

(F1、F2、F3はロボット犬に対する地面の支持力であり、等価慣性力と等価重力の合力を表します)

      四足ロボットでは、移動する歩行には通常 2 本以下の支持足しかないため、地面上で効果的な支持多角形を見つけることは不可能です。そのため、四足ロボットはロボットの重心から地面までの距離を使用する必要があります。安定性指標としての初期位置の基準量。一般的に、垂直方向のオフセット距離は安定性にほとんど影響しません。

3. 電子ハードウェア

この実験では次のハードウェアが使用されました。

メインコントロールボード

Basra メインコントロールボード (Arduino Uno と互換性あり)

拡張ボード

Bigfish2.1 拡張ボード

SH-SRサーボ拡張ボード
センサー 6軸ジャイロスコープ
バッテリー 7.4Vリチウム電池

回路接続手順:

      ① 8 つのサーボを SH-SR 拡張ボードに接続します。サーボの接続順序は 1、2、3、4、5、6、7、8 です。

      ② 6 軸ジャイロセンサーを Bigfish 拡張ボードの A0 ポートに接続します。

4. 機能実現

      ホストコンピュータ:コントローラ1.0

      下位コンピュータープログラミング環境: Arduino 1.8.19

      実装アイデア:ロボット犬が台の上に立って台が傾くと、ロボット犬は背中が水平になるように姿勢を自動的に調整します。

4.1 サーボ角度のデバッグ

      コントローラー ソフトウェアを使用してステアリング ギアの角度をデバッグするロボット犬については、上記の8 自由度平行脚ロボットの犬の歩行を参照してください。

4.2 サンプルプログラム

     以下に、8自由度平行脚ロボット犬の姿勢バランス維持のためのリファレンスルーチン(Dog_Balance.ino)を示します。具体的な実験結果については、公式サイトのデモ動画を参照してください。

/*------------------------------------------------------------------------------------

  版权说明:Copyright 2023 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved.

           Distributed under MIT license.See file LICENSE for detail or copy at

           https://opensource.org/licenses/MIT

           by 机器谱 2023-05-18 https://www.robotway.com/

  ------------------------------*/

#include "leg.h"

#include "gait.h"

#include "sensor.h"



enum{DOGBALANCE=1,DOGWALK,DogObstacleAvoidanceWalk};


float Eular[3]; /* 欧拉角 */


void setup() {

  // put your setup code here, to run once:

  Serial.begin(115200);

  Serial.begin(115200);

  sensorSetup();

  delay(3000);

}


void loop() {

  // put your main code here, to run repeatedly:

  Dog_Balance(); //狗保持平衡

}




void Dog_Balance()

{

   static long t_control = millis();

   float f = readFront();

   float b = readBack();

   readPose();

    if ((millis() - t_control) > 40) {

      if (f && !b) {

        leg0.back();

        leg1.back();

        leg2.back();

        leg3.back();

      } else if (b && !f) {

        leg0.front();

        leg1.front();

        leg2.front();

        leg3.front();

      }

      if (Eular[0] > 3) {

        leg0.down();

        leg1.down();

        leg2.up();

        leg3.up();

      }

      if (Eular[0] < -3) {

        leg0.up();

        leg1.up();

        leg2.down();

        leg3.down();

      }

      if (Eular[1] < 0 && Eular[1] > -176) {

        leg0.up();

        leg1.down();

        leg2.up();

        leg3.down();

      }

      if (Eular[1] > 0 && Eular[1] < 176) {

        leg0.down();

        leg1.up();

        leg2.down();

        leg3.up();

      }

      leg0.updatePos();

      leg1.updatePos();

      leg2.updatePos();

      leg3.updatePos();

      // SerialUSB.println();

      t_control = millis();

    }  

}

プログラムのソースコード情報の詳細については、「 8-DOF 平行脚ロボットの犬の姿勢バランス」を参照してください。

おすすめ

転載: blog.csdn.net/Robotway/article/details/131111076