ロボット生産のためのオープンソース ソリューション | デスクトップレベルのロボットアーム - モーションコントロール

1. バスサーボモードを調整する

      実装のアイデア:

      ロボットアームはターンテーブル、大アーム、小アームの3つの部分から構成されており、まずバスサーボの各IDの動作モードを設定します。サーボ各部に設定予定のID番号は以下の図の通りです。

次に、各部に対応するサーボモード(下表参照)を設定し、プログラムに書き込みます。

装備の準備:

PC またはラップトップ (Windows オペレーティング システム、Arduino IDE)、および下の図に示すその他の機器。

1.1 ターンテーブルのステアリングギアモードを変更する

ステップ 1:下の図に示すように回路を接続します。

ステップ 2:記事の最後にある情報にある「バス サーボ ID とモード変更データ\Serial Port Debugging Assistant\sscom5.13.1.exe」を開きます (次の図を参照)。

ステップ 3:ポート番号、ボーレートを選択し、シリアル ポートを開きます。

まずメニュー バーに移動します。シリアル ポート設定 --- シリアル ポート設定を開き、ポート番号とボー レートを選択し、「OK」をクリックします。

次に、「シリアルポートを開く」をクリックし、「拡張」をクリックします。

ここでコマンドはすでに設定されているので、(下図に示すように) 赤いコマンドを順番にクリックするだけでターンテーブル モードの設定が完了し、ターンテーブルが指定された角度で回転するのを観察できます。

1.2 ブームのサーボモードを変更する

ステップ 1:以下の図に示すように、大きなアームのサーボ ケーブルを小さなモジュールに接続します (注: 最初に小さなモジュールの電源をオフにしてください)。

このうち、ビッグアームのサーボラインを下図に示します。

ステップ 2:シリアル ポート デバッグ アシスタントで、ポート番号、ボー レートを選択し、シリアル ポートを開きます。

ステップ 3:下の赤いコマンドをクリックして大腕モードの設定を完了すると、大腕の回転を観察できます。

1.3 前腕のサーボモードを変更する

ステップ 1:以下の図に示すように、前腕のサーボ ケーブルを小型モジュールに接続します (注: 最初に小型モジュールの電源をオフにしてください)。

ステップ 2:シリアル ポート デバッグ アシスタントで、ポート番号、ボー レートを選択し、シリアル ポートを開きます。

ステップ 3:下の赤いコマンドをクリックして前腕モードの設定を完了すると、前腕の回転を観察できます。

以上でバスサーボモードの変更は完了です。

2. ロボットアームの運動学制御

      ロボット アームを制御する最も基本的な方法は、その運動学モデルを確立することです。3 軸直列ロボット アームの場合、運動学モデルの本質は、空間の 3D 座標を与え、制御に運動学アルゴリズムを使用することです。

2.1 解析 - 系列の運動学

      一連の運動学には、順運動学と逆運動学という 2 種類があります

      シリーズ フォワード キネマティクスとは、単に各ジョイントのサーボの回転角度を決定し、それによってエンドポイントの位置を決定することを意味します。この方法は、デバッグ中の自由度が少ないマニピュレータにとってはより実用的ですが、自由度が増加すると、デバッグの複雑さも増加します。たとえば、以下の 3 自由度 (アクチュエータを除く) の場合、その 3 つの関節のステアリング ギアの回転角 α、θ、β を決定するだけで、実行端の位置が決まります (アームの長さは関係ありません)。当面検討中です)。

     シリーズ逆運動学とは、単に終点の位置を決定し、アルゴリズムを使用して各関節が回転する必要がある角度を計算し、適切な位置に自動的に調整することを意味します。このプロジェクトでは 3 軸ロボット アーム (下の図を参照) と組み合わせて、逆運動学アルゴリズムを使用して動きを設計および制御します。

2.2 設計逆運動学アルゴリズム

      ここでは、3 自由度 (アクチュエーターを除く) 逆運動学アルゴリズムを紹介します。

      誰もが理解しやすいように、アルゴリズムは 5 つのステップに分かれています: 第 1 ステップは空間座標系の確立、第 2 および第 3 ステップはモデルの運動学計算の簡略化、第 4 ステップは終了座標変換の補正計算、第 4 ステップは座標変換終了の補正計算です。 5 番目のステップは全体的なまとめです。

      ステップ 1:次のように、ターンテーブルの回転中心を原点とする空間座標系を確立します。

上図からわかるように、点Oはターンテーブルの回転軸と大アームの回転軸の交点、点Aは大アームの端、点Cは前腕の回転中心です。 、方向 AC は前腕の回転軸、点 B は前腕の回転軸です。

      ステップ 2:計算を容易にするために、AC セグメントを 0 に圧縮します。これにより、次のようにモデルを簡素化できます。

ACセグメントの動きの計算については、以下の手順で単純な座標変更により計算していきます。

      ステップ 3:単純化されたモデルの運動学的計算を実行します。これまでの理解から、逆運動とは各関節の回転角度を座標から計算することであることがわかります。ここでは、次の手順で幾何学モデルを確立し、運動学的アルゴリズムを確立できます。

      ① 端点 B の座標を (x, y, z) とし、下図のように点 B を xy 平面に投影 B1 (x, y, 0) します。

      ②ターンテーブルの回転角度と終了座標の関係を計算します。点Oから点B1まで補助線OB1を引きます(下図の2点間の距離はd)。OB1はOAとABをxy平面に投影したものになります。ここで、ターンテーブルの初期角度をOX、ターンテーブルの回転角度を∠XOB(図中のα)とすると、以下のようになります。

次に、三角関数を使用して次の関係を取得できます。

公式1:

d は OB1 であり、2 点距離の式から次の関係が得られます。

公式2:

「式1」と「式2」を組み合わせると、ターンテーブル回転角αと終了座標の関係は次のように求められます。

公式3:

      ③大腕と小腕の角度と座標の関係を計算します。点Oと点Bの間に補助線OBを引くと(図の2点間の距離はe)、上腕と下腕のなす角度∠OAB(図のβ)がわかります。 、以下に示すように:

グラフの関係から、三角関数を使用すると次の関係が得られます。

公式4:

上の式で、a と b はそれぞれ大きなアームと小さなアームの長さであり、実際に測定でき、既知の量であることに注意してください。

このうち、e は空間内の 2 点間の距離公式に従って取得できます。

このうち、e は空間内の 2 点間の距離公式に従って取得できます。

公式5:

「式 4」と「式 5」を組み合わせると、前腕および前腕の角度 β と終了座標の関係は次のように求められます。

公式6:

④ ブームの回転角度と端点座標の関係を計算します。図から、∠AOB1 (つまり、図の θ) が大きなアームの回転角度であることがわかります。

図に示すように、次の関係が得られます。

公式7:

このうち、∠AOBは△AOBの三角関数を使って計算されます。

公式8:

eの値は「式5」で求められます。

「式7」の∠AOB1は、△OBB1において三角関数を用いて計算されます。

公式9:

ここで、z は BB1 の長さです。

上記の「式 7」、「式 8」、「式 9」に基づいて、アーム回転角度 θ と終了座標の関係が得られます。

公式10:

⑤ 次に前腕の回転角度と終了座標の関係を計算します。前腕の回転角度を見つけるには、以下に示すように、まず前腕の 0° の位置を確認する必要があります。

      上図からわかるように、リセット中の大腕と前腕の間の角度は θ=90°であり、前腕の実際の初期角度は Z 軸の正の方向であり、その後、このとき前腕はλ=90°です。移動後、下図に示すように、前腕の回転と終了座標の関係が得られます。

図からわかるように:

ここで、θ は大きなアームの角度であり、β の関係は次のとおりです。

図中、θはブームの回転角度であり、図では簡単な幾何関係を変更してある。

最後に、単純化されたモデルの運動アルゴリズムが得られます。

ターンテーブル:

大きな腕:

前腕部:

ここで、θ は大きなアームの角度であり、β の関係は次のとおりです。

      注: a は大きなアームの長さ、b は小さなアームの長さで、対応するノギスを使用して測定できます; x、y、z は端が到達する必要がある実際の座標値です。

      ステップ 4:次に、運動中の各関節角度に対する AC セグメントの影響を計算します (ここでは、座標変化を使用した補償計算が使用されます)。

ここではまず、報酬計算の役割について説明します。第 2 ステップで、第 3 ステップのアルゴリズムが AC セグメントを 0 に圧縮して計算することであると述べましたが、第 3 ステップで実際の座標点を使用して各関節の角度を計算すると、あるエラー。補正アルゴリズムは、実際の座標を第 3 ステップで得られたアルゴリズムに一致する座標に変換することであり、変換された座標を取得した後、第 3 ステップのアルゴリズムに取り込まれて計算され、各関節の正確な回転が可能になります。角度を取得しました。次に、具体的な計算を詳しく見てみましょう。

      ① 以下に示すように、まず xy 平面に投影します。

図中、0Aは大腕、ACは大腕の先端から前腕の回転中心までの距離、CBは前腕であり、端点Bの座標は(x,y)である。

②計算の便宜上、OAの延長線AB1を引き、点B1と交わる延長線の垂線BB1上に点Bを描き、B1の座標を(x1,y1)とする。

この図から、ターンテーブルの回転角は γ であることがわかります (デフォルトの OX はターンテーブルの初期位置です。ここでは座標点を通じて角度を求めるため、γ は未知の量です)。

③下図のように補助線を使用し、点B1と点Bをx軸との平行線、点B1を点Bとの平行線の垂線として使用します。

平行線定理と補角定理により、次のことが得られます。

公式11:∠B1=γ;

④ 次に、下図のようにOBと点Bを結ぶ補助線をX軸垂直線上に引き、ターンテーブルの回転角度を計算します。

図中、c は大きなアームの端と小さなアームの回転中心の間の距離で、対応するノギスで測定でき、既知の量です。

それは図から得られます。

公式12:

コサイン定理によれば、次のことが得られます。

公式13:

△BOB1では、コサイン定理により次のようになります。

公式14:

このうち、OB は次の 2 点間の距離公式に従って取得できます。

公式15:

「式 14」と「式 15」を組み合わせると、次のようになります。

公式16:

「式 12」、「式 13」、および「式 16」を組み合わせると、γ 角を計算できます。

公式17:

⑤ 次に、下図のように、△HBB1において、三角関数を用いてB1(x1,y1)を計算します。

公式18:

公式19:

      ⑥ これまでの手順で第 1 象限の座標変換を計算しましたが、第 1 象限の回転範囲は 0 ~ 90° しかなく、実際の回転範囲は 0 ~ 180° であるため、次に第 2 象限の座標変換を計算します。以下に示すように、象限の座標変換は前の手順と同じです。

図からわかるように、90°~180°の間(図の第 2 象限)では、ターンテーブル回転角度との関係は次のようになります。

公式20:

公式21:

上記の手順により、次のように、第 2 象限での座標変換後の点 B の B1 座標関係を取得することは難しくありません。

公式22:

公式23:

⑦ 補足に必要な公式を以下にまとめます。

いつ

いつ

      この時点で、座標変更の補正計算が完了しました。

      ステップ 5:運動学の計算と補償の計算については誰もがすでに理解していますが、これら 2 つのアルゴリズムをどのように組み合わせて使用​​するのでしょうか? アルゴリズムを使用してロボット アームの逆運動を制御するにはどうすればよいですか? ここでは、簡単なプロセスで理解することができます。

2.3 実験操作

    実装アイデア:ホスト コンピュータ上のソフトウェア シリアル ポート モニタとキーボードを介してロボット アームの目標座標位置を入力すると、ロボット アームは開始位置から目標位置まで移動します。

    例えばシリアルポートから座標(60,60,60)を入力し、座標点(90,90,90)から座標点(60,60,60)まで回転させます。プログラム内の開始位置を(90, 90, 90)に設定します。

  [注: 上記の座標点の単位は mm]

    機器の準備:ロボット アーム本体、メイン コントロール ボックス、ディスプレイ スクリーン、キーボード、マウス (下の図を参照)

手順:

① 記事の最後にある参考プログラム color_experiment_ws\src\InputPoit_By_SerialPort\InputPoit_By_SerialPort.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-08-10 https://www.robotway.com/

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

/*

-----------------------------------------------------------------------------------------------------------------

实验功能:通过arduino的窗口监视器控制机械臂运动。

实验思路:首先编写机械臂三轴运动的逆运动算法(即通过坐标点计算舵机运动的角度);

          之后编写接收arduino串口监视器中的数据,并对该数据进行简单的处理(即数据转换);

          最后,将处理后的数据与机械臂运动算法结合。

实现操作:将该程序下载到arduino开发版,接着按照实验教程连接线路。

        上电后,打开arduino软件的串口监视器,波特率选择115200。

        等待程序运行,直到串口监视器中显示:Please input your poit:

        此时,在串口监视器中输入相应的坐标,观察机械臂是否转到目标点。

        例如:在窗口监视器中输入:60,60,60

                   

实验接线:(主要接线)

        机械臂通信口-------------(机械臂)电控箱

        机械爪(舵机)---------------(执行器)电控箱

        其他线路按照教材图片连接。

Created 2020.7.16     By:Boris.yuan

-----------------------------------------------------------------------------------------------------------------

*/

#include <Arduino.h>

#include <stdio.h>

#include <string.h>

#define CTL_BAUDRATE 115200 //总线舵机波特率

#define SERIAL_PRINTLN Serial1

#define SerialBaudrate 115200

#define Bus_servo_Angle_inits 1500

String receive_string = "";

enum{CATCH=1,REALIZE};

int catch_red_numbers=0;

int catch_blue_numbers=0;

unsigned long old_time = millis();

unsigned long new_time = millis();

unsigned long old_time_blue = millis();

unsigned long new_time_blue = millis();

int value_move[3]={1500,1500,1500};

int last_value[3]={0,0,0};

int poit_sqrt = 0;

int catch_number = 0;

void setup() {

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

  delay(1555);

 

  Serial.begin(SerialBaudrate);delay(1000);

  SERIAL_PRINTLN.begin(CTL_BAUDRATE);delay(1000);

  Bus_servo_angle_init();delay(3000);

  Pneumatic_raw_init();delay(1000);

  Serial.println("Please input your poit:");

}

void loop() {

  Input_poit_by_Serial();

}

void Input_poit_by_Serial()

{

  while(Serial.available()>0)

  {

    Serial.println("------------------------------------------");

    String receive_string ="";

    String string_division = "";

    int comma_first,comma_second;

    int receive_data[3]={0,0,0};

    int string_test = 0;

    receive_string = Serial.readStringUntil('\n');

    string_test = receive_string.toInt();

    comma_first = receive_string.indexOf(',');

    receive_data[0] = receive_string.substring(0,comma_first).toInt();

    string_division = receive_string.substring(comma_first+1);

    comma_second = string_division.indexOf(',');

    receive_data[1] = string_division.substring(0,comma_second).toInt();

    receive_data[2] = string_division.substring(comma_second+1).toInt();

    poit_sqrt = sqrt(receive_data[0] * receive_data[0] + receive_data[1] * receive_data[1] + receive_data[2]*receive_data[2]);

    Serial.println("The coordinates you entered are:");

    Serial.print("(");Serial.print(receive_string);Serial.println(")");Serial.println(" ");

    if( (comma_first>0) && (comma_second>0) )

    {

       if( (receive_data[0] >220) ||   (receive_data[1] >220) || (receive_data[2] >230) || (poit_sqrt>220) )

       {

          Serial.println("Sorry,The poit is wrong!!!");

       }

      else{

          calculate_postion(receive_data[0],receive_data[1],receive_data[2]);delay(2000);

       }     

    }

    else{

          Serial.println("Sorry,The poit is wrong!!!");

    }Serial.println(" ");

  }  

}

 ② シリアルポートを開き、ボーレートとターミネータを選択します(下図を参照)。

ロボットアームの目標座標点を入力し、返された結果値を確認します。[ヒント: 座標点の範囲は 0 ~ 220 です]

③ロボットアームを空間位置点(60, 60, 60)まで回転させたいのですが、具体的な操作手順は以下の通りです(座標間隔には英語の文字「,」が使用されており、最後の座標には文字が入っていないことに注意してください)。

「送信」をクリックすると、次の図に示すように、ロボット アームが元の位置からターゲット位置まで回転し、同時にシリアル ポートにターゲット位置が表示されることがわかります。

もちろん、ロボット アームを (80、80、80) に回転させて効果を確認することもできます。

3. メカニカルアームによる空気圧ハンドリング

実装アイデア:シリーズ ロボット アームの逆運動学アルゴリズムを使用して、ロボット アームの空気圧ハンドリングを実現します。実験シーンを次の図に示します。この図では、2 つのブロックが移動する必要があるアイテムを表しています。

操作手順

① 記事の最後にある参照プログラム color_experiment_ws\src\Pneumatic_manipulator_handling\Pneumatic_manipulator_handling.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-08-10 https://www.robotway.com/
  ------------------------------*/
/*
-----------------------------------------------------------------------------------------------------------------
实验功能:实现气动搬运物体(抓取两个物体,并放置两个物体)。

实验思路:通过三自由度机械臂算法求出机械臂的逆运动算法(通过坐标点计算出机械臂转动角度),接着
                结合气动吸盘,规划机械臂运动路径(即添加坐标点),将物块抓取并搬运到指定目标点。搬运
                结束后,在打开的窗口中可自行输入机械臂要要运行的轨迹点坐标。

实验接线:(主要接线)
          机械臂通信口-------------(机械臂)电控箱
          气动机械臂---------------(执行器)电控箱
          其他线路按照教材图片连接。
Created 2020.7.16     By:Boris.yuan
-----------------------------------------------------------------------------------------------------------------         
*/

#include <Arduino.h>
#include <stdio.h>
#include <string.h>

#define CTL_BAUDRATE 115200 //总线舵机波特率
#define SERIAL_PRINTLN Serial1
#define SerialBaudrate 115200
#define Bus_servo_Angle_inits 1500

String receive_string = "";
enum{CATCH=1,REALIZE};
int catch_red_numbers=0;
int catch_blue_numbers=0;
unsigned long old_time = millis();
unsigned long new_time = millis();
unsigned long old_time_blue = millis();
unsigned long new_time_blue = millis();

int value_move[3]={1500,1500,1500};
int last_value[3]={0,0,0};
int poit_sqrt = 0;
int catch_number = 0;
void setup() {
  // put your setup code here, to run once:
  delay(1555);
  Serial.begin(SerialBaudrate);delay(1000);
  SERIAL_PRINTLN.begin(CTL_BAUDRATE);delay(1000);
  Bus_servo_angle_init();delay(3000);
  Pneumatic_raw_init();delay(1000);
}


void loop() {
  raw_translation();
  delay(8000);
}


void raw_translation()
{
  //catch the first sth
  calculate_postion(60,130,40);delay(3000);
  catch_and_realize_something(0);delay(3000);//catch
  calculate_postion(60,110,80);delay(3000);
  calculate_postion(-120,110,80);delay(3000);
  calculate_postion(-120,130,2);delay(3000);
  catch_and_realize_something(1);delay(3000);//relize
  calculate_postion(-120,130,70);delay(3000);
  calculate_postion(-100,90,70);delay(3000);
 
  //catch the second sth
  calculate_postion(60,100,70);delay(3000);
  calculate_postion(60,130,10);delay(3000);//down
  catch_and_realize_something(0);delay(3000);//catch
  calculate_postion(60,110,80);delay(3000);
  calculate_postion(-120,110,80);delay(3000);
  calculate_postion(-120,130,37);delay(3000);
  catch_and_realize_something(1);delay(3000);//relize
  calculate_postion(-120,130,70);delay(3000);
  calculate_postion(-100,90,70);delay(3000);
  Bus_servo_angle_init();delay(2000);
  delay(1000);  
}

      ② プログラムのダウンロードが完了したら、空気圧ハンドリングの効果を観察します。通常の状況では、ロボット アームは最初に上のブロックを運んで片側に置き、次に下のブロックを運んで最初のブロック上に置きます。

4. ロボットアームと爪の取り扱い

      実装アイデア:シリーズ ロボット アームの逆運動学アルゴリズムを使用して、2 つの物体を運ぶメカニカル クローを実現します。実験シーンを次の図に示します。この図では、2 つのブロックが移動する必要があるアイテムを表しています。

操作手順

① 記事の最後にある参照プログラム color_experiment_ws\src\Manipulator_handling\Manipulator_handling.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-08-10 https://www.robotway.com/
   ------------------------------*/
/*
-----------------------------------------------------------------------------------------------------------------
实验功能:实现气动搬运物体(抓取两个物体,并放置两个物体)。

实验思路:通过三自由度机械臂算法求出机械臂的逆运动算法(通过坐标点计算出机械臂转动角度),接着
                结合气动吸盘,规划机械臂运动路径(即添加坐标点),将物块抓取并搬运到指定目标点。搬运
                结束后,在打开的窗口中可自行输入机械臂要要运行的轨迹点坐标。

实验接线:(主要接线)
          机械臂通信口-------------(机械臂)电控箱
          气动机械臂---------------(执行器)电控箱
          其他线路按照教材图片连接。
Created 2020.7.16     By:Boris.yuan
-----------------------------------------------------------------------------------------------------------------         
*/

#include <Arduino.h>
#include <stdio.h>
#include <string.h>

#define CTL_BAUDRATE 115200 //总线舵机波特率
#define SERIAL_PRINTLN Serial1
#define SerialBaudrate 115200
#define Bus_servo_Angle_inits 1500

String receive_string = "";
enum{CATCH=1,REALIZE};
int catch_red_numbers=0;
int catch_blue_numbers=0;
unsigned long old_time = millis();
unsigned long new_time = millis();
unsigned long old_time_blue = millis();
unsigned long new_time_blue = millis();

int value_move[3]={1500,1500,1500};
int last_value[3]={0,0,0};
int poit_sqrt = 0;
int catch_number = 0;
void setup() {
   // put your setup code here, to run once:
   delay(1555);
   Serial.begin(SerialBaudrate);delay(1000);
   SERIAL_PRINTLN.begin(CTL_BAUDRATE);delay(1000);
   Bus_servo_angle_init();delay(3000);
   Pneumatic_raw_init();delay(1000);
}


void loop() {
   raw_translation();
   delay(8000);
}


void raw_translation()
{
   //catch the first sth
   calculate_postion(60,130,40);delay(3000);
   catch_and_realize_something(0);delay(3000);//catch
   calculate_postion(60,110,80);delay(3000);
   calculate_postion(-120,110,80);delay(3000);
   calculate_postion(-120,130,2);delay(3000);
   catch_and_realize_something(1);delay(3000);//relize
   calculate_postion(-120,130,70);delay(3000);
   calculate_postion(-100,90,70);delay(3000);
   
   //catch the second sth
   calculate_postion(60,100,70);delay(3000);
   calculate_postion(60,130,10);delay(3000);//down
   catch_and_realize_something(0);delay(3000);//catch
   calculate_postion(60,110,80);delay(3000);
   calculate_postion(-120,110,80);delay(3000);
   calculate_postion(-120,130,37);delay(3000);
   catch_and_realize_something(1);delay(3000);//relize
   calculate_postion(-120,130,70);delay(3000);
   calculate_postion(-100,90,70);delay(3000);
   Bus_servo_angle_init();delay(2000);
   delay(1000);   
}

② プログラムのダウンロードが完了したら、ハンドリング効果を観察します。

5. ロボットアーム位置フィードバック

      実装のアイデア:ロボット アームに 3 セットのアクションを実行させ、対応するサーボの pwm 値を返します。ロボットアームはターンテーブル、大きなアーム、小さなアームの3つの部分から構成されており、実験ではこれら3つの部分を制御するステアリングギアのPwm値をそれぞれ返します。

プロトタイプソリューション - [R332] デスクトップレベルのロボットアーム - 3. モーションコントロール - ビジョン - 色認識 - 空気圧ハンドリング - ROS - Bluetooth リモートコントロール - アルゴリズム - シミュレーション - パスプランニング - 人工知能 - マシンスペクトル robotway - オープンソース - 図 73

各バス サーボの pwm 範囲は 500 ~ 2500、各サーボのモードは 180 度です。

したがって、サーボの実際の角度と pwm のマッピング関係は、 angle=map (入力する pwm 値: 500、2500、0、180) となります。この原理を理解した上で、実際の操作を開始してください。

手順:

① 記事の最後にある参考プログラム color_experiment_ws\src\Get_BusServo_Current_Angle\Get_BusServo_Current_Angle.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-08-10 https://www.robotway.com/
  ------------------------------*/
/*
-----------------------------------------------------------------------------------------------------------------
实验功能:在串口监视器中查看舵机当前转动的角度。

实验思路:首先编写驱动总线舵机驱动程序,之后,编写接收串口监视器数据的程序,接着将
        串口监视器接收的数据进行简单的处理,最后,将处理后的数据与机械臂各部位结合。
       
实验操作:将该例程下载到arduino开发版,接着按照实验教程连接线路,完成后,打开arduino
        的串口监视器,结合总线舵机使用教程,观察串口监视器中的数据是否与总线舵机教程相符。             
        例如串口监视器输出的:总线舵机000:#000P1114!表示的意思是:
                              地址为000的总线舵机(即转台)当前的pwm值为1114(即55度)。
                              度数angle与pwm的关系式为: angle = map(pwm,500,2500,0,180)
实验接线:(主要接线)
          机械臂通信口-------------(机械臂)电控箱
          其他线路按照教材图片连接。
Created 2020.7.16     By:Boris.yuan
-----------------------------------------------------------------------------------------------------------------         
*/


#include <stdio.h>
#include <string.h>

#define CTL_BAUDRATE 115200 //总线舵机波特率
#define SERIAL_PRINTLN Serial1
#define SerialBaudrate 115200
#define Bus_servo_Angle_inits 1500

String receive_string="";
int value_move[3]={1500,1500,1500};
int last_value[3]={0,0,0};

void setup() {
  // put your setup code here, to run once:
  delay(1100);
  Serial.begin(SerialBaudrate);
  SERIAL_PRINTLN.begin(CTL_BAUDRATE);
  Serial.println("Start!");
  Bus_servo_angle_init();delay(2000);
  int ss = map(1114,500,2500,0,180);
  Serial.println(ss);
}



void loop() {

  for(int i=0;i<3;i++)
  {
    arm_action_test(i);
    for(int j=0;j<3;j++){
      Read_get_busservo_angle_current(j);
      delay(1000);
    }
    delay(5000);
  }
}

② シリアルポートを開き、返された結果の値を確認します(下図参照)。

プログラムソースコード、バスサーボID、モード変更データのダウンロードアドレスについては、「デスクトップレベルロボットアーム - モーションコントロール」を参照してください。

おすすめ

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