ロボット生産のためのオープンソース ソリューション | デスクトップレベルのロボット アーム - オントロジー記述 + 駆動および制御

1. オントロジーの説明 

 

 1. ロボットアームの全体説明

      このデスクトップ レベルのロボット アームは、ホスト モジュール 1 つ、ターンテーブル モジュール 1 つ、二次スイング モジュール 1 つ、プログラム可能なティーチング ボックス 1 つ、2 種類のエンド エフェクター、高解像度カメラ、アダプター、組み立てツール、スペアパーツを含むモジュール設計です。等 これらのモジュールは、パッシブ ジョイントを備えた直列 3-DOF マニピュレータにすばやく組み合わせることができ、さらにアクチュエータとセンサーを追加および交換して、さまざまな制御実験を完了することができます。

 1.1 ロボットアーム一覧の紹介

シリアルナンバー

名前

述べる

1

本体

ターンテーブル、小型アーム、大型アーム、アクチュエーターを含む

2

執行機関

例:クローアクチュエータ、空気圧アクチュエータ

3

ホスト

Raspberry Pi、Arduino メインコントロールボード、その他の関連構成を含む

4

画面

5

電子部品

例: カメラ、リモコンモジュール

ロボットアームの主な構成一覧

1.2 製品構成

ロボット アームの主なハードウェア図は次のとおりです。

主要なハードウェア図

主なハードウェア パラメータを次の表に示します。

2. ロボットアームの構造説明

ロボットアームの構造は、受動関節を備えた1自由度のターンテーブルと受動関節を備えた2自由度関節を含む3自由度の受動関節です。

      2自由度ジョイントモジュールはビッグアームとスモールアームに分かれており、ビッグアームは減速比1.76のギアボックスを介して駆動され、スモールアームは二次ベルトドライブを介してトランスミッションとパッシブジョイント設計を実現します。 。パッシブ ジョイントにより、アクチュエータの動作時にアクチュエータの端が一方向を向くようにすることができます。ベルト ドライブの 1 つのレベルで前腕の回転を制御し、ベルト ドライブのもう 1 つのレベルで端の方向を一定に保ちます。

以下は、爪とカメラを備えた実際の物体の写真です。

爪とカメラを取り付けた実物写真

アクチュエータ部分(グリッパアクチュエータが現在取り付けられている部分)も空圧コンポーネントに柔軟に置き換えることができます(下図を参照)。

空気圧機器の実際の取り付け写真

3. ロボットアームの回路接続

       回路接続を行う前に、まずホストのレイアウトとピン配置を理解しましょう。下の図はホストのレイアウトの物理図であり、この実験では主にバス、PWM (D4)、TX2/RX2 が使用されます。

ホストの正面図  
ホスト回路のピン図(右から左にホストに対応)

以下の図に示すようにロボット アームの回路接続を作成します。

ロボットアームとホスト周辺機器の配線図
ディスプレイ、マウス、キーボードがホストに接続されている

起動時の注意事項

      ロボットアームの状態には、主に非リセット状態とリセット状態がある(リセット状態とは、大アームが垂直状態に回転し、小アームが水平状態に回転することをいう)。コンピュータの電源を入れて、ロボット アームが非リセット状態からリセット状態に変化することが確認された場合にのみ、その後の実験は正常に続行できます。そうでない場合は、プログラミング プログラムが実行される可能性がありますが、ロボット アームは期待どおりに動きません。

ロボットアーム非リセット状態
ロボットアームのリセット状態

4. ソフトウェアおよびハードウェア環境の構成と使用

4.1 ソフトウェアおよびハードウェア環境の概要

ロボットは視覚認識テクノロジーを使用して、ターゲットの識別、追跡、位置決めなどの機能を実行できます。ホストコンピュータを使用してロボットの頭脳を制御し、下位コンピュータを使用して機器を制御できます。  

上位コンピュータとは以下を指します。

      人が直接制御命令を出せるコンピュータとしては、通常PCやコンピュータの画面上にさまざまな信号変化(水圧、水位、温度など)が表示されますが、本実験ではRaspberry Piの画面を用いて視覚認識した結果を表示します。

Raspberry Pi と Ros システム

下位のコンピューターとは以下を指します。

      デバイスの状態を取得するためにデバイスを直接制御するコンピュータは通常PLC/マイコンですが、今回の実験では開発用のスレーブコンピュータとしてオープンソースのArduinoメインコントロールボードを使用します。

ArduinoメインコントロールボードとプログラミングIDE

      上位コンピュータから発行されたコマンドは、まず下位コンピュータに送信され、下位コンピュータはコマンドを対応するタイミング信号に解釈して、対応する機器を直接制御します。下位コンピュータはデバイスのステータスデータ(一般的なアナログ量)を読み取り、それをデジタル信号に変換して上位コンピュータにフィードバックします。適切なプラットフォーム、プログラミング環境、関数ライブラリを選択することで、ロボットの構造、モーション制御、ロボットの動作を制御するビジョン開発など、さまざまなアプリケーションを実行できます。

4.2 Raspberry PiにRosと関数パッケージをインストールする

      使いやすさを考慮して、この実験では、Raspberry Pi と Arduino ボードを組み合わせて、使いやすいメイン コントロール ボックス (ホストとも呼ばれます) を設計しました。メインコントロールボックスには、オペレーティングシステム、プログラミング環境、必要な機能パッケージがプリインストールされています。

メインコントロールボックス(ホスト)

      Raspberry Pi の環境構成には主に、デスクトップ オペレーティング システム、ROS を含む Raspberry Pi OS (32 ビット) のインストール、ROS 環境の構成、Arduino IDE、および機能パッケージが含まれます。この実験に必要な機能パッケージには、視覚認識ライブラリ(OpenCV2.4.9)とQRコード認識ライブラリ(zbar)が含まれます。使いやすさを考慮し、本実験用にRaspberry Piイメージファイルを用意し、上記の開発環境をプリインストールしましたので、回路接続後すぐにご利用いただけます。ホスト コンピューターをディスプレイ画面に接続したら、記事の最後にあるデータ ダウンロードでcolor_experiment_wsフォルダーを見つけます。

5.データダウンロード

プロトタイプの 3D ファイルとプログラムのソース コードの詳細については、デスクトップ ロボット アーム オントロジーの説明を参照してください。

2. 駆動と制御

1. バスサーボモードの設定

      ロボット アームはバス モーターによって駆動され、360 度円形モード、270 度反時計回りモード、270 度時計回りモードなどの複数のモードがあります。バスサーボはシングルバス通信方式を採用しており、従来のサーボに比べてサーボを直列に接続でき、最大255台のサーボをカスケード接続できることが最大の特徴です。

      記事末尾の情報にある「バスサーボIDとモード変更データ」を開き、ターンテーブル、ビッグアーム、フォアアームを含むバスサーボのモードを設定する必要があります。それぞれバスサーボ。バスサーボIDの設定は下図の通りです。

ロボットアームの各サーボのIDマップ

次に、ロボット アームの各部分に対応するサーボ モードの設定を開始します。

各部

バスサーボID

サーボモード設定予定

意味

ターンテーブル

000

#000PMOD2!

サーボモード、最大角度範囲は 270 度、方向は反時計回りです

大きな腕

001

#001PMOD2!

同上

前腕部

002

#002PMOD2!

同上

機器の準備: 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. ロボットアームの単関節制御

実装アイデア:シリアル ポート経由でコマンドを送信して、単一ジョイント制御を制御します (ヒント: 最初にサーボ モードを設定する必要があります)

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

爪とカメラを取り付けた実物写真

手順:

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

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

/*

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

实验功能:实现单关节控制机械臂控制。

实验思路:通过串口发送命令,控制机械臂单关节控制。首先程序实现读取串口发送的数据,接着处理串口发送的数据,

        最后程序将处理好的数据通过Serial1发送给机械臂达到控制机械臂的效果。

        注意:串口发送命令格式为[机械臂部件pwm](pwm范围是[500~2500])。

        例如:rm 1500 底盘转到1500

              um 1500 大臂转到1500

              lm 1500 小臂转到1500

                   

实验接线:(主要接线)

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

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

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

Created 2020.7.16     By:Boris.yuan

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

*/

#include <Servo.h>

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

#define SERIAL_PRINTLN Serial1

#define SerialBaudrate 115200

#define RM "rm"

#define UM "um"

#define LM "lm"

String receive_string = "";

int catch_red_numbers=0;

int catch_blue_numbers=0;

int current_angle=0;

void setup() {

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

  delay(1100);

  Serial.begin(SerialBaudrate);

  SERIAL_PRINTLN.begin(CTL_BAUDRATE);

  Bus_servo_angle_init();delay(2000);

  Serial.println("Please input your commond......");

}

void loop() {

  while(Serial.available()>0)

  {

    String commond = "";

    long n_step = 0;

    int index = 0;

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

    index = commond.indexOf(' ');

    n_step = commond.substring(index+1).toInt();

    commond = commond.substring(0,index);

    Serial.print(commond);Serial.print('\t');

    Serial.println(n_step);

    if(commond==RM){

        if( (n_step<500) || (n_step>2500) ){

          Serial.println("Sorry,the angle is out of range!");

        }

        else{

          ArmSingleServoTo(0,n_step);

        }

        n_step=0;commond="";

    }

    if(commond==UM){

        if( (n_step<500) || (n_step>2500) ){

          Serial.println("Sorry,the angle is out of range!");

        }

        else{     

          ArmSingleServoTo(1,n_step);

        }

        n_step=0;commond="";

    }

    if(commond==LM){

        if( (n_step<500) || (n_step>2500) ){

          Serial.println("Sorry,the angle is out of range!");

        }

        else{     

          ArmSingleServoTo(2,n_step);

        }

        n_step=0;commond="";

    }

    Serial.println();

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

  }

}

② シリアルポートをオープンし、返された結果値を確認します。

注:シリアルポート送信コマンドの形式は [component pwm] (pwm の範囲は [500~2500]) です。

シリアルポート送信コマンド例

意味

RM 1500

シャーシは 1500 になります

1500

ブームを1500に回す

lm1500

前腕~1500

まず、ボーレートを設定し、プログラムが初期化されるのを待ちます。インターフェイスは次のようになります。

次に、ターンテーブルの動きを制御するサンプルを送信して、結果を確認します。

入力形式は次の図に示すとおりで、ロボット アームのターンテーブルの動きを確認できます。

同時にシリアルポートの表示データも確認できます。

今回の実験でターンテーブル、大アーム、小アームの回転位置を調べた結果は以下の通りです(下図参照)。

3. 操作レバーソリューション

実装アイデア: 操作レバーを通じて空気圧ボックスの開閉を制御し、空気圧ボックスが開くと、ブロックを吸引する機能が実現されます。

実験装置と配線:下図の通り。

手順:

ステップ 1: Basra メイン コントロール ボードBigfish 拡張ボード  Birdmen ハンドル拡張ボードを一緒に積み重ねます

Birdmen ハンドル拡張ボードのピン図を以下に示します。

ステップ 2:記事の最後にある参照プログラム color_experiment_ws\src\Rocker_Control_Sucker\rocker_contril_sucker\rocker_contril_sucker.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-03 https://www.robotway.com/

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

/*

实验功能:摇杆模块控制吸盘开关。

实验思路:读取摇杆模块数值,判断该数据,进而根据数据选取区间,编写不同区间,吸盘状态。

实验操作:将该例程下载到arduino开发版,按照实验教程接线,完成后,给模块上电,试着

        滑动摇杆模块,控制吸盘开关状态。

实验接线:气动箱信号脚连接到Barsa的D12引脚

Create 2020.7.17   By:Boris.yuan

*/

#define Sucker_Pin 12

#define Rocker_Pin A1

void setup() {

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

  delay(1000);

  Serial.begin(9600);

  pinMode(Sucker_Pin,OUTPUT);

  pinMode(Rocker_Pin,INPUT);

}

void loop() {

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

  int receive_Rocker_data = analogRead(Rocker_Pin);

  Serial.println(receive_Rocker_data);

  if( (receive_Rocker_data<200) )

  {

    digitalWrite(Sucker_Pin,LOW);

  }

  else if( (receive_Rocker_data>800) )

  {

    digitalWrite(Sucker_Pin,HIGH);

  }

  delay(30);

}

ステップ 3:左側のロッカーを右に押すと、空気圧ボックスのスイッチが開き、アイテムを吸引できます (下図を参照)。左に押すと、空気圧ボックスのスイッチが閉じます。

4. ロボットアームのワイヤレス遠隔制御

この実験では 、Bluetoothとプログラマブルティーチングペンダントを組み合わせて、Bluetoothの通信設定や無線制御などの無線リモコンの学習を行います。

4.1 2 つの Bluetooth 通信設定

実験の目的: Bluetooth マスター/スレーブ モジュールのデータ送受信をテストします。

Birdmen ハンドル拡張ボードに接続された Bluetooth モジュールはマスター モジュール、スイッチ付き通信ドッキング ステーションに接続された Bluetooth モジュールはスレーブ モジュールです。

実装のアイデア: Bluetooth マスター モジュールがデータ (123 など) を送信すると、Bluetooth スレーブ モジュールはデータ (123) を受信できます。これは、通信が成功したことを意味します。

実験装置:下の写真に示すとおり。

Bluetooth通信モジュールと対応ケーブル

手順:

      ステップ 1:まず、Bluetooth メインモジュールプログラムを Basra メインコントロールボードにダウンロードします。

① まず図のように回路を接続します(注:Bluetooth通信ドックのスイッチを左に回す必要があります)。

② 次に、記事の最後にある参照プログラム color_experiment_ws\src\Bluetooth_communication\Master\Master.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-03 https://www.robotway.com/
  ------------------------------*/
#define Baud 9600
#define SERIAL Serial2

void setup() {
  // put your setup code here, to run once:
delay(1000);
Serial.begin(Baud);
SERIAL.begin(Baud);
}

void loop() {
  // put your main code here, to run repeatedly:
  while(SERIAL.available()>0)
  {
    String receive_string = SERIAL.readStringUntil('\n');
    Serial.println(receive_string);
    receive_string = " ";
  }
}

③ 最後に、メイン コントロール ボードの USB ケーブルを抜き、Bluetooth メイン モジュールを Bigfish 拡張ボードのドッキング ステーションに挿入します (下の図を参照)。電源を入れた後、Bluetoothのランプが点滅している場合は接続待機中です。

ステップ 2: Bluetooth スレーブ モジュール プログラムをホスト コンピューターの Arduino mega2560 コントロール ボードにダウンロードします。

① Bluetooth 通信モジュールをホストの Tx2/RX2 インターフェイスに接続します (下図を参照)。

② 次に、記事の最後にある参照プログラム color_experiment_ws\src\Bluetooth_communication\Salve\Salve.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-03 https://www.robotway.com/

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

#define Baud 9600

#define SERIAL Serial2

void setup() {

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

delay(1000);

Serial.begin(Baud);

SERIAL.begin(Baud);

}

void loop() {

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

  while(SERIAL.available()>0)

  {

    String receive_string = SERIAL.readStringUntil('\n');

    Serial.println(receive_string);

    receive_string = " ";

  }

}

③ Bluetooth スレーブ モジュールをベース (下図参照) に接続し、ホストの TX2/RX2 に接続すると、Bluetooth スレーブ モジュールのライトが点灯および点滅することがわかります。

ステップ 3: Bluetooth マスター/スレーブ モジュールのライトを観察する. Bluetooth マスター/スレーブ モジュールのライトが点灯しているが点滅していない場合は、Bluetooth マスター/スレーブ モジュールが正常に接続されていることを意味します。

ステップ 4 : Bluetooth (スレーブ) モジュールの Arduino シリアル ポート モニターを開き、データ「123」が受信されるかどうかを確認します。対応するデータが受信された場合 (下図に示すように)、Bluetooth マスター/スレーブが接続されていることを意味します。モジュールは正常に通信します。

4.2 Bluetooth リモコン

実験目的:ハンドル上の 2 つのロッカーを制御することにより、機械アームは空気圧で物体を輸送できます。

実装アイデア:ハンドル ロッカーの異なる方向を押すと、ロボット アームのターンテーブル、大きなアーム、および小さなアームが異なる方向に移動するように制御できます (デフォルトのルールでは、ハンドルの左側が左側のロッカーです。そして右側が右ロッカーです)

左側のロッカーを押すと、制御される吸盤と前腕は次の図のようになります。

右のロッカーを押すと、制御されるターンテーブルとブームは次の図のようになります。

実験機器:BLE4.0 Bluetoothモジュール×2、接続ケーブル、Basraコントロールボード×1、Bluetooth接続ベース、ロボットアーム本体、空圧ボックス、接続ケーブル、ホスト、表示画面、マウス、キーボード

手順:

ステップ 1:まず、ジョイスティック モジュール (Bluetooth メイン モジュールに接続) を備えたメイン コントロール ボードにプログラムをダウンロードします。

① 以下のように回路を接続します。

② 次に、記事の最後にある参照プログラム color_experiment_ws\src\Wireness_Contril\Program_With_Rocker\controller\controller.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-03 https://www.robotway.com/

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

void setup() {

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

  Serial.begin(9600); //蓝牙串口波特率

  pinMode(A0, INPUT); //左侧上下摇杆引脚

  pinMode(A1, INPUT); //左侧上下摇杆引脚

  pinMode(A2, INPUT); //右侧上下摇杆引脚

  pinMode(A3, INPUT); //右侧上下摇杆引脚

}

void loop() {

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

  if(analogRead(A0) > 1000)

  {

    Serial.print('u');

  }

  if(analogRead(A0) < 25)

  {

    Serial.print('d');

  }

  if(analogRead(A1) > 1000)

  {

    Serial.print('c');

  }

  if(analogRead(A1) < 25)

  {

    Serial.print('s');

  }

  if(analogRead(A2) > 1000)

  {

    Serial.print('f');

  }

  if(analogRead(A2) < 25)

  {

    Serial.print('b');

  }

  if(analogRead(A3) > 1000)

  {

    Serial.print('r');

  }

  if(analogRead(A3) < 25)

  {

    Serial.print('l');

  }

  delay(10);//发送执行周期20ms,可更改,越小机械臂运动越快,但是可能导致机械臂卡顿

}

③ 図に示すように、Bluetooth メインモジュールをハンドルのドッキングステーションに挿入します。

ステップ 2:ホスト コンピューターの Arduino mega2560 コントロール ボード (Bluetooth スレーブ モジュールに接続されている) にプログラムをダウンロードします。

① まず Bluetooth スレーブモジュールを拡張ベースに接続し、もう一端をホストの TX2/RX2 に接続します。

次に、空気圧ボックスの 3 芯ワイヤをホスト コンピュータの PWM に接続します (下図を参照)。

② 次に、記事の最後にある参照プログラム color_experiment_ws\src\Wireness_Contril\Program_With_Chassis\Black_Handle_Robot_Arm_New\Black_Handle_Robot_Arm_New.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-03 https://www.robotway.com/

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

//#include <SoftwareSerial.h>

#include <stdio.h>

#include <string.h>

//#define mySerial Serial2 //总线舵机串口,TX2,GND,5V

//#define mySerial2 Serial1 //蓝牙遥控串口TX1,RX1,GND,3.3V

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

#define NOZZLE_PIN 4 //气动引脚,注意气动供电6v

#define INIT_X 1 //假设大臂长度单位为1

#define INIT_Y 1 //小臂长度与大臂长一致单位为1

#define INIT_R 1500 //底座总线舵机中间位置波特率为1500

#define DX 0.01 //每次X方向长的移动距离单位

#define DY 0.01 //每次Y方向臂长的移动距离单位

#define DR 5 //每次底座转动的单位

//SoftwareSerial mySerial(51, 4);

//SoftwareSerial mySerial2(10, 11);

#define mySerial2 Serial2

#define mySerial Serial1

float cur_x = INIT_X, cur_y = INIT_Y;

int cur_r = INIT_R;

int alphaToUpwm(float alpha)

{

  return 2732.0-(alpha/M_PI)*2464;

  /*大臂转动角度的计算公式。2464是大臂摆动180°总线舵机计算后的pwm长度。

  大臂的减速比是44/25=1.76,测试的motor转动180°需要的pwm长度是1400,1.76×1400=2464;

  2732是转动90°之后竖直向上对应的实际pwm值,2732=(2464/2)+1500,其中1500是大臂初始化竖直状态是电机的PWM值*/

}

int betaToLpwm(float beta)

{

  return 1500 + (beta/M_PI)*1400; //小臂无减速比,由总线舵机直接驱动,小臂转动角度的计算公式,1400是小臂摆动180°总线舵机需要的PWM长度,1500是小臂保持水平状态的舵机PWM值

}

int armMoveTo(float x, float y)

{

  float alpha, beta;

  if (!cartesianToAlphaBeta(x, y, alpha, beta))

  {

    armServoTo(alphaToUpwm(alpha),betaToLpwm(beta));

    return 0;

  }

  return 1;

}

void setup() {

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

  mySerial.begin(CTL_BAUDRATE);

  pinMode(NOZZLE_PIN, OUTPUT); //气动引脚定义

  mySerial2.begin(9600); //蓝牙串口波特率设置

  nozzle_off(); //初始化气动关闭

  delay(1000);

  Serial.begin(9600);

  armMoveTo(cur_x, cur_y); //初始化机械臂大臂小臂位置

  cur_r = rotServoTo(cur_r); //初始化机械臂底座位置

}

void loop() {

//   Serial.print(Serial1.parseInt());

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

if (mySerial2.available())

{

    char c = mySerial2.read();

    float tx, ty;

    switch(c)

    {

      case 'u': // up

        ty = cur_y + DY;

        if (armMoveTo(cur_x, ty) == 0) // success

        {

          cur_y = ty;

        }

        break;

      case 'd': // down

        ty = cur_y - DY;

        if (armMoveTo(cur_x, ty) == 0) // success

        {

          cur_y = ty;

        }

        break;

      case 'f': // forward

        tx = cur_x + DX;

        if (armMoveTo(tx, cur_y) == 0) // success

        {

          cur_x = tx;

        }

        break;

      case 'b': // backward

        tx = cur_x - DX;

        if (armMoveTo(tx, cur_y) == 0) // success

        {

          cur_x = tx;

        }

        break;

      case 'l': // left

        cur_r = rotServoTo(cur_r - DR);

        break;

      case 'r': // right

        cur_r = rotServoTo(cur_r + DR);

        break;

      case 'c': // catch

        //Serial.println('c');

        nozzle_on();

        break;

      case 's': // release

        //Serial.println('s');

        nozzle_off();

        break;

    }

  }

}

ステップ 3:ハンドル上の 2 つのロッカーを制御することにより、機械アームが空気圧で物体を輸送できます。

プログラムのソースコードとバスサーボID、モード変更情報の詳細については、「デスクトップロボットアーム - 駆動と制御」を参照してください。

おすすめ

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