Skip to content

CuboRex-Development/cugo-sdk-samples

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

63 Commits
 
 
 
 
 
 

Repository files navigation

CuGoSDKSampleコマンドリファレンス

クローラロボット開発プラットフォームの初心者向けサンプルコードはこちらをご参照ください
https://github.com/CuboRex-Development/cugo-arduino-beginner-programming

旧製品のArduinoKitの方はこちらをご覧ください。
https://github.com/CuboRex-Development/cugo-sdk-samples/tree/uno

1. はじめに

これはクローラロボット開発プラットフォームをより発展的に使うために、さまざまな便利関数をまとめたサンプルコードです。CuGoを動かす各種関数等を説明します。

V4メイン

2. 準備

クローラロボット開発プラットフォームの利用開始までの手順を説明します。

2-1. Arduino IDEのインストール

  1. 公式ページ( https://www.arduino.cc/en/software )へ移動
  2. DOWNLOAD OPTIONSからご自身のOSのバージョンを選択
  3. JUST DOWNLOADかCONTRIBUTE & DOWNLOADを選択
  4. ダウンロードされたらファイルを実行して指示に従いインストール

2-2. 学習用ソースコードダウンロード

  1. Codeボタンを選択し、Download ZIPをクリックしてダウンロード image

  2. ダウンロードしたファイルを解凍

  3. CugoSDKSample.inoをダブルクリックし、Arduino IDEを起動

2-3. Rasberry Pi Picoの初期設定

Arduino IDE でRaspberryPiPicoに書き込む場合、IDEにRaspberryPiPicoのボード情報をあらかじめ取得する必要があります。

Arduino IDE バージョン2系(最新版)の場合

  1. ファイル > 環境設定を選択
    image

  2. 追加のボードマネージャのURLに以下のURLを入力し、OKを押します。右のウィンドウボタンをクリックすると入力できるようになります。
    https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
    image

  3. ツール > ボード > ボードマネージャ…を選択 image

  4. "pico"で検索し、”Raspberry Pi Pico/RP2040”を見つけます。”INSTALL”ボタンを押します(すでに入っている場合はUPDATEボタンを押して最新にします)。 image image

  5. スケッチ > ライブラリをインクルード… > ライブラリを管理…を選択 image

  6. RPi_Pico_TimerInterrupt.hで検索し、”RPI_PICO_TimerInterrupt”を見つけます。”INSTALL”ボタンを押します(すでに入っている場合はUPDATEボタンを押して最新にします)。 image image

Arduino IDE バージョン1.8.19(レガシー)の場合

1. ファイル > 環境設定を選択

image

  1. 追加のボードマネージャのURLに以下のURLを入力し、OKを押します。右のウィンドウボタンをクリックすると入力できるようになります。
    https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
    image

  2. ツール > ボード > ボードマネージャ…を選択 image

  3. "pico"で検索し、”Raspberry Pi Pico/RP2040”を見つけます。”インストール”ボタンを押します(すでに入っている場合は"更新"ボタンを押して最新にします)。 image image

  4. スケッチ > ライブラリをインクルード… > ライブラリを管理…を選択 image

  5. RPi_Pico_TimerInterrupt.hで検索し、”RPI_PICO_TimerInterrupt”を見つけます。”インストール”ボタンを押します(すでに入っている場合は"更新"ボタンを押して最新にします)。 image

Pythonの'encoding'モジュールが見つからないエラーでビルドできない場合

以下の図のようにpythonがうまく実行できないことでコンパイルが通らないことがあります。これはボードマネージャでRP2040をインストールしたのち、 削除してもう一度入れなおした際に発生します。すでに一度RP2040をインストールした後に2回目以降にインストールする際に必要なデータが展開しきれず、必要なものが再配置されないバグが発生していると考えられます。

image

コマンドプロンプトなどのなんらかのShellを起動して以下のファイルを削除してください。
C:\Users\YutaNakamura\AppData\Local\Arduino15\packages\rp2040\tools\pqt-python3\1.0.1-base-3a57aed\

image

上記のファイルを削除したのち、ボードマネージャからRP2040を削除します。 image

再度RP2040をインストールし、コンパイルできるようになったかを確認します。 image

2-4. 制御パラメータの確認

クローラロボット開発プラットフォームには、V3iモデルとV4モデルがあります。各モデルごとに制御パラメータが異なる場所がありますので、確認をしてください。

Arduino IDE上部タブから”CugoSDK.h”を選択 image

下記パラメータを使用しているモデルに合わせます。

//cugo仕様関連
// CuGo V4のパラメータ
#define CUGO_WHEEL_RADIUS_L 0.03858d
#define CUGO_WHEEL_RADIUS_R 0.03858d
#define CUGO_TREAD 0.380d
#define CUGO_ENCODER_RESOLUTION 600.0d
#define CUGO_MAX_MOTOR_RPM 130 //モータの速度上限値
#define CUGO_NORMAL_MOTOR_RPM 90 //通常速度の設定値
// CuGo V3iのパラメータ
// #define CUGO_WHEEL_RADIUS_L 0.03858d
// #define CUGO_WHEEL_RADIUS_R 0.03858d
// #define CUGO_TREAD 0.376d
// #define CUGO_ENCODER_RESOLUTION 360.0d
// #define CUGO_MAX_MOTOR_RPM 180 //モータの速度上限値
// #define CUGO_NORMAL_MOTOR_RPM 90 //通常速度の設定値

プログラムが下の図と同じになるように必要に応じてプログラムを書き換え、ご自身のモデルのパラメータが反映されるように調整してください。

V4の場合
”CugoSDK.h”は、サンプルプログラムから変更する必要はありません。
image

V3iの場合
”CugoSDK.h”の12行目から17行目の行頭に//を追記し、19行目から24行目の行頭の//を削除します。
image

2-5. Rasberry Pi Picoへの書き込み

  1. CugoBeginnerProgramming.inoがArduino IDEで開かれていることを確認

  2. USBケーブルでパソコンとRaspberry Pi Picoを接続。PCに認識されないときは基板にある”BOOTSEL”ボタンを押しながらPCに挿してください。
    image

  3. ツール > ボード > Raspberry Pi Pico/RP2040 > Rasberry Pi Pico を選択 image

  4. ツール > ポート からRasberry Pi Picoのポートを選択します。ポートはUSBを接続する前と後を比較して増えたものがRaspberry Pi Picoなので、それを選択します。
    USBを接続する前↓
    image

USBを接続した後↓
image

  1. 矢印ボタン " → "を選択し、マイコンボードへ書き込むを実行
    image

  2. ボードへの書き込みが完了しましたの記載があれば書き込み完了です。

2-6. LD-2のコマンドモードを有効化

クローラロボット開発プラットフォームでは、安全のため、出荷時にプログラム動作する、コマンドモードを無効化しています。
以下の図に従って、電源が切れていることを確認し、DIPスイッチの2番をON側に倒してください。大変小さなスイッチですので、つまようじなどを用意して操作してください。
詳細は、取扱説明書をご覧ください。
https://drive.google.com/drive/folders/18MQUVMLYS_4JgkeGd2v7dVHmdmFaMaZc?usp=drive_link

image

3. 使用方法

クローラロボット開発プラットフォームでは2つのモードが利用できます

3-1. ラジコンモードの利用

ラジコンモードはCugoSDKSample.inoを書き込み後、付属のコントローラの左スティックを左側に倒すことでラジコンモードが開始します。
controller

ラジコンモードでの操作方法は

  • 左スティックの上下操作が左クローラーの前進後進移動
  • 右スティックの上下操作が右クローラーの前進後進移動 

になります
radiocontrol

3-3. プログラムモードの利用

  • CuGoSDKSampleにて自作関数を利用する場合はloop内の //ここから自動走行モードの記述から //ここまで自動走行モードの記述までに記載してください。
  • loop()のif()により、ラジコンモードの実装とプログラムモードの実装を記載しております。このプログラムモードのブロック内を編集していください。
void loop() {

  //プロポ入力によりcugo_run_modeが変化
  if(cugo_runmode == CUGO_RC_MODE){//ラジコンモード
    ld2_set_control_mode(CUGO_RC_MODE);
    cugo_wait(100);
  }else if(cugo_runmode == CUGO_CMD_MODE){//自動走行モード
    //ここから自動走行モードの記述  


    //ここまで自動走行モードの記述
    
    ld2_set_control_mode(CUGO_RC_MODE); 
    cugo_wait(1000);
    //自動走行モードを1回のloopで終了する場合のみ記載、不要の場合コメントアウト
    
  }
}

3-4. cugo_switching_resetについて

プログラムモードでシーケンシャルに命令を設定している場合、プログラムを最初から実行したい場合があります。 このとき、cugo_switching_reset = true;にすると、プログラムを毎回最初から実行させることができます(cugo_beginner_programmingと同じ動作)。デフォルトはfalseです。

void setup() {
cugo_switching_reset = true;
//プロポでラジコンモード切替時に初期化したい場合はtrue、初期化しない場合はfalse

cugo_switching_reset = false; の時 image

cugo_switching_reset = true; の時 image

注意

ウォッチドッグタイマを使用してプログラムをリセットしているため、再起動に3秒ほどかかります。 ラジコンモード⇔プログラムモードの切り替えを素早く行うとプログラムモードが開始されないように感じることがあります。 (ラジコンモードに切り替えてから、短い時間でプログラムモードに切り替えた時が対象)
このとき、確実にラジコンモードに切り替えた後、約3秒間待ってから、プログラムモードに切り替える操作(スティックを右に倒す)をしてください。

なお、ラジコン操作は下位システムが常に制御をしているため、RaspberryPiPicoが再起動している間も操作をすることができますので、ご安心ください。

3-5. 自動走行モード関数例

  • 正方形に移動させたい場合は下記コードを参考にしてください
void loop() {

  //プロポ入力によりcugo_run_modeが変化
  if(cugo_runmode == CUGO_RC_MODE){//ラジコンモード
    ld2_set_control_mode(CUGO_RC_MODE);
    cugo_wait(100);
  }else if(cugo_runmode == CUGO_CMD_MODE){//自動走行モード
    //ここから自動走行モードの記述  
      //サンプルコード記載
                
        Serial.println(F("自動走行モード開始"));  
        cugo_wait(1000);
        
        Serial.println(F("1.0mの正方形移動の実施"));
        cugo_move_forward(1.0);
        cugo_wait(1000);
        cugo_turn_clockwise(90);
        cugo_wait(1000);
        cugo_move_forward(1.0);
        cugo_wait(1000);
        cugo_turn_clockwise(90);
        cugo_wait(1000);
        cugo_move_forward(1.0);
        cugo_wait(1000);
        cugo_turn_clockwise(90);
        cugo_wait(1000);
        cugo_move_forward(1.0);
        cugo_wait(1000);
        cugo_turn_clockwise(90);
        cugo_wait(1000);
        
        Serial.println(F("自動走行モード終了"));
        
      //サンプルコード終了

    //ここまで自動走行モードの記述
    
    ld2_set_control_mode(CUGO_RC_MODE); 
    cugo_wait(1000);
    //自動走行モードを1回のloopで終了する場合のみ記載、不要の場合コメントアウト
    
  }
}
  • S字に移動させたい場合は下記コードを参考にしてください
void loop() {

  //プロポ入力によりcugo_run_modeが変化
  if(cugo_runmode == CUGO_RC_MODE){//ラジコンモード
    ld2_set_control_mode(CUGO_RC_MODE);
    cugo_wait(100);
  }else if(cugo_runmode == CUGO_CMD_MODE){//自動走行モード
    //ここから自動走行モードの記述  
    Serial.println(F("自動走行モード開始"));  
    cugo_wait(1000);

    Serial.println(F("半径1.0mのS字移動"));
    cugo_curve_theta_raw(1.0,180,90);
    cugo_wait(1000);  
    cugo_curve_theta_raw(-1.0,180,90);
    cugo_wait(1000);  

    Serial.println(F("自動走行モード終了")); 

    //ここまで自動走行モードの記述
    
    ld2_set_control_mode(CUGO_RC_MODE); 
    cugo_wait(1000);
    //自動走行モードを1回のloopで終了する場合のみ記載、不要の場合コメントアウト
    
  }
}
  • その他、関数の使い方の例はCugoSDK.cpp内のcugo_testを参考にしてください。

4. 各種関数

4-1. 自動走行関連

cugo_move_forward

  • 【説明】
    • CuGoが前進後進する関数です。
    • cugo_move_forward_rawは位置制御を実施していないため、上限速度まで急峻に到達し、目標距離を超えると急停止します。
  • 【構文】
    • cugo_move_forward(float target_distance)
    • cugo_move_forward(float target_distance,float target_rpm)
    • cugo_move_forward_raw(float target_distance,float target_rpm)
  • 【パラメータ】
    • target_distance :目標距離 単位はm
    • target_rpm :上限速度 単位はrpm
  • 【戻り値】
    • なし

cugo_turn_clockwise

  • 【説明】
    • CuGoが時計回りに回転する関数です。
    • cugo_turn_clockwise_rawは位置制御を実施していないため、上限速度まで急峻に到達し、目標距離を超えると急停止します。
  • 【構文】
    • cugo_turn_clockwise(float target_degree)
    • cugo_turn_clockwise(float target_degree,float target_rpm)
    • cugo_turn_clockwise_raw(float target_degree,float target_rpm)
  • 【パラメータ】
    • target_degree :目標距離 単位は度
    • target_rpm :上限速度 単位はrpm
  • 【戻り値】
    • なし

cugo_turn_counterclockwise

  • 【説明】
    • CuGoが反時計回りに回転する関数です。
    • cugo_turn_counterclockwise_rawは位置制御を実施していないため、上限速度まで急峻に到達し、目標距離を超えると急停止します。
  • 【構文】
    • cugo_turn_counterclockwise(float target_degree)
    • cugo_turn_counterclockwise(float target_degree,float target_rpm)
    • cugo_turn_counterclockwise_raw(float target_degree,float target_rpm)
  • 【パラメータ】
    • target_degree :目標距離 単位は度
    • target_rpm :上限速度 単位はrpm
  • 【戻り値】
    • なし

cugo_curve_theta_raw

  • 【説明】
    • CuGoが指定した半径を指定した角度まで円軌道する関数です。
    • cugo_turn_counterclockwise_rawは位置制御を実施していないため、上限速度まで急峻に到達し、目標距離を超えると急停止します。
  • 【構文】
    • cugo_curve_theta_raw(float target_radius,float target_degree,float target_rpm)
  • 【パラメータ】
    • target_radius :円軌道半径 単位はm
      • 円軌道半径は指定した値が正の場合、原点はcugoの進行方向左側になります
    • target_degree :円軌道角度 単位は度
    • target_rpm :上限速度 単位はrpm
  • 【戻り値】
    • なし

cugo_curve_distance_raw

  • 【説明】
    • CuGoが指定した半径を指定した移動距離まで円軌道する関数です。
    • cugo_turn_counterclockwise_rawは位置制御を実施していないため、上限速度まで急峻に到達し、目標距離を超えると急停止します。
  • 【構文】
    • cugo_curve_distance_raw(float target_radius,float target_disttance,float target_rpm)
  • 【パラメータ】
    • target_radius :円軌道半径 単位はm
      • 円軌道半径は指定した値が正の場合、原点はCuGoの進行方向左側になります
    • target_disttance :円軌道距離 単位はm
    • target_rpm :上限速度 単位はrpm
  • 【戻り値】
    • なし

cugo_stop

  • 【説明】
    • CuGoが停止する関数です。
  • 【構文】
    • cugo_stop()
  • 【パラメータ】
    • なし
  • 【戻り値】
    • なし

cugo_wait

  • 【説明】

    • CugoSDKSampleでは割り込み処理を利用してモード遷移をしているため、delay関数を使用しないことを強く推奨します。
    • cugo_waitはdelay関数と同等の役割を果たす関数になります。
    • cugo_waitはCugoSDKSample内で利用する停止関数です。
    • cugo_waitの計測時間の上限は約70分です。70分以上の計測にはcugo_long_waitを利用してください。
    • PICO内の水晶子を利用しているため時間は正確でない場合があります。
  • 【構文】

    • cugo_wait(unsigned long long int wait_ms)
    • cugo_long_wait(unsigned long long int wait_seconds)
  • 【パラメータ】

    • wait_ms :停止時間 単位はミリ秒
    • wait_sedonds :停止時間 単位は秒
  • 【戻り値】

    • なし

4-2. 各種センサ取得関連

cugo_check_odometer

  • 【説明】
    • CuGoのオドメトリを取得します。
  • 【構文】
    • cugo_check_odometer(int check_number)
  • 【パラメータ】
    • check_number :以下から選択
    • CUGO_ODO_X , CUGO_ODO_Y , CUGO_ODO_THETA, CUGO_ODO_DEGREE
    • 上記の定数はdefineによりそれぞれ0,1,2,3の数値に対応しています。
  • 【戻り値】
    • float型

4-3. その他

cugo_init

  • 【説明】
    • CuGoを利用するための初期設定関数です。setup関数内にあります。
  • 【構文】
    • cugo_init

cugo_rpm_direct_instructions

  • 【説明】
    • モーターへプロポ入力します。
    • モーターを停止させたい場合は左右のパラメータに0を入力します。
  • 【構文】
    • cugo_rpm_direct_instructions(float left, float right)
  • 【パラメータ】
    • left 左モーターへの入力値(RPM)
    • right 右モーターへの入力値(RPM)
  • 【戻り値】
    • なし

About

CuGoを制御するコマンド類のサンプルスケッチです

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published