ICS変換基板の使用方法(6-1) Arduino MEGAで18個のサーボを制御する
【関連記事】
ICS変換基板の使用方法(4-2) M5StackでID読み書き
ICS変換基板の使用方法(5) Arduino Nano EveryでKRSサーボを制御
ICS変換基板の使用方法(6-2) 直線補間でサーボを滑らかに動かす
ICS変換基板の使用方法(6-3) Arduino MEGAからKXR-L6の歩行制御
ICS変換基板を使用した場合、マイコンボードの1つのシリアル端子にデイジーチェーン接続で約8~10個のサーボを制御することができますが、よりたくさんのサーボを制御したい場合があります。例えば、KXR-L6 6脚型ロボットは、18個のサーボを搭載していますが、この場合ICS変換基板から1つのデイジーチェーン接続では制御できる台数が足りません。そこで、ICS変換基板を2つ搭載し、2つのデイジーチェーンを用意することで、18個のサーボを制御することが可能になります。以下の記事では、この方法についてご紹介します。
今回は、Arduino MEGA 2560 R3を利用します。MEGAは、USB用のUART(Serial)の他に3つのUARTが装備されています。そのうちの2つのUARTを利用することで、2系統のデイジーチェーン接続が可能になります。
※弊社では他社マインボード、及びプログラムに関するお問い合わせついて対応致しかねます。以下の内容は、仕様事例として参考にご一読ください。
■必要な製品
・KXR-L6 6脚型
KXR-L6は、アドバンスセットA Ver.2、B Ver.2どちらでも使用できます。
・ICS変換基板 ×2
・LV電源延長ケーブル ×1
・ピンヘッダ、またはArduino用ピンソケット ×必要数
・ピンソケット(2.54ピッチ)(ICS変換基板用)4ピン ×4
・ピンソケット(2.54ピッチ)(ICS変換基板用)2ピン ×2
・はんだ、はんだごて
■接続方法
プロトシールドにICS変換基板用のピンソケットをはんだ付けします。次に、ICS変換基板とArduino MEGAの各端子を配線します。対応する端子同士を繋げていくだけですので簡単です。
ICS変換基板のVOUTは、ICS変換基板に給電された外部電源をArduinoに供給するための端子です。両方のICS変換基板からVINにつなぐ必要はなく、どちらかがArduino MEGAのVINに接続されていれば問題ありません。
各EN_INピンは、デジタルI/Oでしたらどの端子でも問題ありません。
GND、IOREFは必ずそれぞれのICS変換基板ごとにつないでください。
プロトシールドとArduino MEGAをつなぐピンヘッダは、ICS変換基板と接続する箇所だけで問題ありません。
■電源の共有について
今回はICS変換基板が2つありますが、それぞれの電源端子にケーブルを配線するのは手間がかかります。そこで、ICS変換基板にあらかじめ用意されているパット状の電源端子(下図赤枠)にピンヘッダをはんだ付けし、プロトシールド上で電源を共有できるようにします。
1)各ICS変換基板の電源端子にピンヘッダをはんだ付けします。
2)プロトシールドの該当箇所にもピンソケットを立てておきます。
3)下図のようにプロトシールド上でピンソケットのPOWとGNDをそれぞれつなぎ合わせます。
※端子を間違えないようにご注意ください。電源端子ですので、ここで逆接すると全てのサーボが破損する恐れがあります。
この作業で片側に電源を供給するともう一方のICS変換基板にも給電されるようになりました。
■電源ケーブル
KXR-L6に付属しているLV電源スイッチハーネスでは、バックパック上に搭載されたICS変換基板まで長さが足りません。そこで、LV電源延長ケーブルを利用して、ケーブルを延長します。RCB-4miniにつながっている電源端子を抜き、LV電源延長ケーブルを接続します。
これをどちらかのICS変換基板に接続してください。上記で、電源を共有できていますので、片方のみで結構です。
■切り替えスイッチ
ICS変換基板に実装されている「書込」「実行」の切り替えスイッチは、常に「実行」のままにしてください。
■足先の改造
この実験で使用しているKXR-L6は、より接地面積を拡げて安定させるために足先をダミーサーボに変更しています。標準のままでも問題ありませんが、安定感が増しますのでお勧めです。
詳細は下記の記事をご参照ください。
■Arduino MEGA搭載用プレート
KXRのバックパックにArduino MEGAを搭載するためのプレートを3Dプリンタで出力しました。
こちらのデータを公開しますのでぜひご利用ください。また、このパーツはROBOSPOTにて販売中です。
以上で搭載の準備は整いました。
これをKXR-L6のバックパックに固定します。ビスは2.6-4フラットヘッドビスを使用してください。
■ZH接続ケーブルの配線
ICS変換基板用に9個のサーボをループさせるため、KXR-L6の配線を変更する必要があります。下記の図を参考に配線してください。ICS変換基板に接続するため、サーボコネクタタイプのZH接続ケーブルBが必要です。別途ご用意ください。
ロボット本体のサーボIDの変更は必要ありません。
配線図は下記からダウンロードできます。
KXR-L6本体の組み立ては下記の組立説明書を参照してください。
今回は、キット付属のRCB-4miniを使用しませんが、ロボットが正常に組み立てられているかを確認するために、RCB-4miniにつないでサンプルプロジェクトより動作確認をお願いします。
配線が完了すると下記のようになります。これでロボット側の準備は完了です!
次はいよいよプログラムを書いていきます。
■プログラム
プログラムは、setPos関数で全てのサーボに対して順番に角度を送信します。また、シリアルを2系統使用しますのでクラスを2つ作成し、名称を使い分ける点に注意する必要があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <IcsHardSerialClass.h> const byte EN_PIN1 = 34; const byte EN_PIN2 = 3; const long BAUDRATE = 115200; const int TIMEOUT = 1000; //通信できてないか確認用にわざと遅めに設定 IcsHardSerialClass krs1(&Serial1,EN_PIN1,BAUDRATE,TIMEOUT); //インスタンス+ENピン(34番ピン)およびUART1の指定 左半身 IcsHardSerialClass krs2(&Serial2,EN_PIN2,BAUDRATE,TIMEOUT); //インスタンス+ENピン(3番ピン)およびUART2の指定 右半身 void setup() { krs1.begin(); //サーボモータの通信初期設定 krs2.begin(); //サーボモータの通信初期設定 delay(1000); } |
クラスを2つ作ります。KrsServo1などサンプルで記述されている"&Serial"を、配線した通りそれぞれ"&Serial1"と"&Serial2"に変更します。クラス名はそれぞれkrs1、krs2としました。またEN_PINもそれぞれ個別にありますので、EN_PIN1、EN_PIN2とし、接続先の"34"と"3"を指定しました。BAUDRATEとTIMEOUTは共通で使用できますので、変数名を変更する必要はありません。
以降のプログラムでは、krs1.setPos(id, pos)、krs2.setPos(id, pos)とすることでコマンドを送るシリアル端子を指定することができます。
例)krs1.setPos(3, 8500); //左半身のID3のサーボを8500のポジションに動かす
krs2.setPos(9, 6000); //右半身のID9のサーボを6000のポジションに動かす
この方法で、下記のようにプログラムするとロボットがホームポジションの姿勢になります。
※電源を入れるとロボットが動きますのでご注意ください。また、脚が絡まないよう、できるだけ関節を伸ばした状態にして電源を入れてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
void loop() { //左半身 krs1.setPos(1, 6300); krs1.setPos(2, 7200); krs1.setPos(3, 9800); krs1.setPos(4, 7500); krs1.setPos(5, 7200); krs1.setPos(6, 9800); krs1.setPos(7, 8700); krs1.setPos(8, 7200); krs1.setPos(9, 9800); //右半身 krs2.setPos(1, 8700); krs2.setPos(2, 7200); krs2.setPos(3, 9800); krs2.setPos(4, 7500); krs2.setPos(5, 7200); krs2.setPos(6, 9800); krs2.setPos(7, 6300); krs2.setPos(8, 7200); krs2.setPos(9, 9800); } |
実際にプログラムを起動すると、全身のサーボが最大出力で動いて少々危険です。また、このまま歩行させると、キビキビとした動作になり歩行が不安定になります。また、サーボのパラメータ設定としてスピードを変更することが可能ですが、出力自体を抑えてしまうため歩行できなくなる可能性があります。
そこで、簡単な直線補間を導入することでサーボの動きを滑らかにし、安定した歩行を実現したいと思います。
解説が長くなりますので、こちらの方法は次回ご紹介します。
次回:『ICS変換基板の使用方法(6-2) 直線補間でサーボを滑らかに動かす』
KRS-2552R3HV ICSの詳細をみる KRS-3204R2 ICSの詳細をみる KRS-2572R2HV ICSの詳細をみる KRS-2552R2HV ICSの詳細をみる KRS-2542R2HV ICS の詳細をみる KRS-9004HV ICSの詳細をみる KRS-5054HV ICS H.Cの詳細をみる KRS-5053HV ICS H.Cの詳細をみる KRS-5034HV ICSの詳細をみる KRS-5033HV ICSの詳細をみる KRS-5032HV ICSの詳細をみる KRS-6104FHV ICSの詳細をみる KRS-3304R2 ICSの詳細をみる KRS-3302 ICSの詳細をみる ICS変換基板の詳細をみる KSBシールド2の詳細をみる ICS変換基板シールドの詳細をみる KXR用オプションボード搭載セットAの詳細をみる KRS-6003R2HV ICSの詳細をみる KRS-6003RHV ICSの詳細をみる KRS-2572HV ICSの詳細をみる KRS-2552RHV ICSの詳細をみる KRS-2542HV ICSの詳細をみる KRS-4037HV ICSの詳細をみる KRS-4034HV ICSの詳細をみる KRS-4033HV ICSの詳細をみる KRS-4032HV ICSの詳細をみる KRS-4031HV ICSの詳細をみる KRS-3304 ICSの詳細をみる KRS-3301 ICSの詳細をみる KRS-3204 ICSの詳細をみる KXR アドバンスセットA Ver.2の詳細をみる KXR-A5 アーム型 Ver.2の詳細をみる KXR-L4T-R カメ型・ローバー型 Ver.2(アカデミックパック)の詳細をみる KXR用オプションボード搭載セットBの詳細をみる