|
一覧
検索
最新
ページへ戻る
履歴
DXLIB_Arduino
のバックアップソース(No.6)
knowledge
:
DXLIB_Arduino
のバックアップソース(No.6)
差分
を表示
現在との差分
を表示
DXLIB_Arduino
へ行く。
« Prev
Next »
DXSHIELDを[[ソフトウェアシリアル>#ee08b548]]もしくは[[ハードウェアシリアル>#ce79cebb]]モードに設定した場合、ArduinoのスケッチからDynamixelを制御するためのライブラリが利用できます。~ PC版DYNAMIXEL Protocol [[1.0>Dynamixel Library]]/[[2.0>Dynamixel Protocol 2 Library]] Libraryと同様にプロトコルやシリアル通信を意識せずともコントロールテーブルへの読み書きが行えますが、Arduino版はメモリの都合から一部機能を制限したサブセット版となります。 -ライブラリのダウンロード(Arduino UNO/MEGAを想定)~ -- #ref(dxlib1.4_for_arduino.zip) ---チェックサムの検証を厳密化 ---新たにReadBlockDataとWriteBlockData関数を追加し、コントロールテーブルの読み出し及び書き込みはこの関数を介するように変更 ---プロトコルV2の例外時(0xFF 0xFF 0xFDの並びでデータが現れた場合に末尾に0xFDを付与)の処理を全ての関数へ適用(一部制約あり) ---コンパイル時のwarningを抑止 ---多少サンプルプログラムの構成を変更 ---Win版dxlibからアイテムのアドレスをマクロ定義したヘッダをコピー -- #ref(dxlib1.3_for_arduino.zip) ---dxlib.cppのハードウェアシリアルポートの初期化不足修正 -- #ref(dxlib1.2_for_arduino.zip) ---任意のハードウェアシリアルポートへの割り当て対応 -- #ref(dxlib1.1_for_arduino.zip) ---Dynamixel Protocol V.2に対応 ---低位の送受信関数追加 ---32bitデータの送受信関数追加 ---アドレスとサイズに関する引数は全て16bitに統一 -- #ref(dxlib1.0_for_arduino.zip) ---初期リリース DXLIBのインストールは、ArduinoのIDEの「スケッチ→ライブラリのインクルード→.ZIP形式のライブラリをインストール...」メニューを使用してダウンロードしたZIPファイルを選択するだけです。~ インストールが完了すると、ユーザーフォルダ配下に「Arduino/libraries/dxlib」が作られ、ライブラリのソースといくつかのサンプルプログラムがその中に展開されます。詳しくはサンプルプログラムとライブラリのソースを参照して下さい。~ DXLIB v1.4以降で使用できるヘッダファイルとAPIは以下の通りです。 -&color(#0099ff){''dxlib.h''};~ [[DYNAMIXEL Communiation Protocol 1.0]]対応デバイスを対象とする場合、'''dxlib.h'''をスケッチにインクルードする事で'''DXLIB'''クラスが利用できるようになります。なお、Arduinoのリソースの都合から、'''dx2lib.h'''との共存はできません。 #html{{ <pre class="brush: c;"> #include <dxlib.h> DXLIB dxif (true); // select software serial void setup() { dxif.begin (57600); }</pre> }} -&color(#0099ff){''dx2lib.h''};~ [[DYNAMIXEL Communiation Protocol 2.0]]対応デバイスを対象とする場合、'''dx2lib.h'''をスケッチにインクルードする事で'''DX2LIB'''クラスが利用できるようになります。なお、Arduinoのリソースの都合から、'''dxlib.h'''との共存はできません。 #html{{ <pre class="brush: c;"> #include <dxlib.h> DX2LIB dxif (true); // select software serial void setup() { dxif.begin (57600); }</pre> }} -&color(#0099ff){''DXLIB/DX2LIB'' (bool ss, HardwareSerial *hws, uint8_t rxpin, uint8_t txpin)};~ ヘッダファイルに応じて'''DXLIB'''ないし'''DX2LIB'''いずれかのクラスが使用できます。同時にソフトウェアシリアルの使用('''ss''')・ハードウェアシリアルオブジェクト('''hws''')・受信端子('''rxpin''')・送信端子('''txpin''')を指定した上でオブジェクトを生成できます。~ なお、'''ss'''にtrueを指定したら[[ソフトウェアシリアルモード>#ee08b548]]、falseを指定したら[[ハードウェアシリアルモード>#ce79cebb]]にDXSHIELDを設定しなくてはなりません。~ また、'''hws'''や'''rxpin'''、'''txpin'''は通常指定する必要はありませんが、他のSHIELDやArduinoの機能の都合で使用できない場合に限り指定します。 #html{{ <pre class="brush: c;"> #include <dxlib.h> // dxifの名前でDynamixel Protocol V.2 Libraryをインスタンス化 // ソフトウェアシリアルモードで使用 DX2LIB dxif(true);</pre> }} -&color(#0099ff){void DXLIB/DX2LIB::''begin'' (long baud)};~ ライブラリを使用可能にします。引数('''baud''')にはDynamixelに設定されたボーレートを指定します。~ なお、選択したモードにより使用できるボーレートに制限があります。 #html{{ <pre class="brush: c;"> // 生成されたdxifを57143bpsで初期化 void setup() { dxif.begin (57143); }</pre> }} -&color(#0099ff){bool DXLIB/DX2LIB::''TxPacket'' (uint8_t id, uint8_t inst, uint8_t *param, uint16_t len)};~ 指定されたID('''id''')・インストラクション('''inst''')・パラメータ('''param''')・パラメータ長('''len''')のインストラクションパケットを送信します。 #html{{ <pre class="brush: c;"> // ID=1へPingインストラクションパケットを送信 dxif.TxPacket (1, 0x01, NULL, 0);</pre> }} -&color(#0099ff){bool DXLIB/DX2LIB::''RxPacket'' (uint8_t *rdata, uint16_t rdatasize, uint8_t *rid, uint16_t *rlen, uint8_t *err)};~ ステータスパケットを受信します。成功するとパケット内のパラメータが'''rdata'''へコピーされ、そのパラメータのサイズが'''rlen'''に返されます。なお、ステータスパケットを受信するのに十分なサイズを確保し、そのポインタを'''rdata'''へ、サイズを'''rdatasize'''に指定します。'''rid'''にはID、'''err'''にはDynamixelのエラーが返ります。 #html{{ <pre class="brush: c;"> uint8_t buf[10], id, err; uint16_t len; // ID=1へPingインストラクションパケットを送信 dxif.TxPacket (1, 0x01, NULL, 0); // ステータスパケットを受信 dxif.RxPacket (buf, sizeof (buf), &id, &len, &err)</pre> }} -&color(#0099ff){bool DXLIB/DX2LIB::''ReadBlockData'' (uint8_t id, uint16_t addr, uint8_t *data, uint16_t len, uint8_t *err)};~ 指定されたID('''id''')・アドレス('''addr''')から8ビットのデータを'''data'''へ'''len'''の長さ分読み出します。'''err'''にはDynamixelのエラーが返ります。&br; なおDX2LIBで4バイト以上を読み出す場合、まずサフィックスが付与された状態でdataへ読み出し、その後に必要に応じてサフィックス削除が行われます。そのため実際に必要なサイズよりも大きめにdataを確保しておく必要があります(最大で1.34倍)。 #html{{ <pre class="brush: c;"> // ID=1のAX-12のComplianceを取得 uint8_t compliance[4]; dxif.ReadBlockData (1, 26, &compliance, 4, NULL);</pre> }} -&color(#0099ff){bool DXLIB/DX2LIB::''ReadByteData'' (uint8_t id, uint16_t addr, uint8_t *data, uint8_t *err)};~ 指定されたID('''id''')・アドレス('''addr''')から8ビットのデータを'''data'''へ読み出します。'''err'''にはDynamixelのエラーが返ります。 #html{{ <pre class="brush: c;"> // ID=1のAX-12のLEDを取得 uint8_t led; dxif.ReadByteData (1, 25, &led, NULL);</pre> }} -&color(#0099ff){bool DXLIB/DX2LIB::''ReadWordData'' (uint8_t id, uint16_t addr, uint16_t *data, uint8_t *err)};~ 指定されたID('''id''')・アドレス('''addr''')から16ビットのデータを'''data'''へ読み出します。'''err'''にはDynamixelのエラーが返ります。 #html{{ <pre class="brush: c;"> // ID=1のAX-12からPresentPositionを取得 uint16_t ppos; dxif.ReadWordData (id, 36, &ppos, NULL);</pre> }} -&color(#0099ff){bool DXLIB/DX2LIB::''ReadLongData'' (uint8_t id, uint16_t addr, uint32_t *data, uint8_t *err)};~ 指定されたID('''id''')・アドレス('''addr''')から32ビットのデータを'''data'''へ読み出します。'''err'''にはDynamixelのエラーが返ります。 -&color(#0099ff){bool DXLIB/DX2LIB::''WriteBlockData'' (uint8_t id, uint16_t addr, const uint8_t *data, uint16_t len, uint8_t *err)};~ 指定されたID('''id''')・アドレス('''addr''')・8ビットのデータ('''data''')・指定バイト数('''len''')をDynamixelに書き込みます。'''err'''にはDynamixelのエラーが返ります。 #html{{ <pre class="brush: c;"> // ID=1のAX-12のComplianceを設定 uint8_t err; uint8_t compliance[4] = {1,1,32,32}; dxif.WriteBlockData (1, 26, &compliance, 4, NULL);</pre> }} -&color(#0099ff){bool DXLIB/DX2LIB::''WriteByteData'' (uint8_t id, uint16_t addr, uint8_t data, uint8_t *err)};~ 指定されたID('''id''')・アドレス('''addr''')・8ビットのデータ('''data''')をDynamixelに書き込みます。'''err'''にはDynamixelのエラーが返ります。 #html{{ <pre class="brush: c;"> // ID=1のAX-12のLEDを点灯 uint8_t err; dxif.WriteByteData (id, 25, 1, &err);</pre> }} -&color(#0099ff){bool DXLIB/DX2LIB::''WriteWordData'' (uint8_t id, uint16_t addr, uint16_t data, uint8_t *err)};~ 指定されたID('''id''')・アドレス('''addr''')・16ビットのデータ('''data''')をDynamixelに書き込みます。'''err'''にはDynamixelのエラーが返ります。 #html{{ <pre class="brush: c;"> // ID=1のAX-12のGoalPositionを511に変更 dxif.WriteWordData (id, 30, 511, NULL);</pre> }} -&color(#0099ff){bool DXLIB/DX2LIB::''WriteLongData'' (uint8_t id, uint16_t addr, uint32_t data, uint8_t *err)};~ 指定されたID('''id''')・アドレス('''addr''')・32ビットのデータ('''data''')をDynamixelに書き込みます。'''err'''にはDynamixelのエラーが返ります。 -&color(#0099ff){bool DXLIB/DX2LIB::''WriteSyncByteData'' (const uint8_t *pid, uint16_t addr, const uint8_t *pdata, int num)};~ 指定されたid数('''num''')分のIDの配列('''pid''')・アドレス('''addr''')・8ビットのデータ配列('''pdata''')をDynamixelに書き込みます。 #html{{ <pre class="brush: c;"> // ID=1~5の5個のAX-12のLEDへ点滅を指令 uint8_t ids={1,2,3,4,5}; uint16_t leds={1,1,1,1,1}; dxif.WriteSyncByteData (ids, 30, leds, 5);</pre> }} -&color(#0099ff){bool DXLIB/DX2LIB::''WriteSyncWordData'' (const uint8_t *pid, uint16_t addr, const uint16_t *pdata, int num)};~ 指定されたid数('''num''')分のIDの配列('''pid''')・アドレス('''addr''')・16ビットのデータ配列('''pdata''')をDynamixelに書き込みます。 #html{{ <pre class="brush: c;"> // ID=1~5の5個のAX-12に個別のGoalPositionを指令 uint8_t ids={1,2,3,4,5}; uint16_t poss={100,200,300,400,500}; dxif.WriteSyncWordData (ids, 30, ppos, 5);</pre> }} -&color(#0099ff){bool DXLIB/DX2LIB::''WriteSyncLongData'' (const uint8_t *pid, uint16_t addr, const uint32_t *pdata, int num)};~ 指定されたid数('''num''')分のIDの配列('''pid''')・アドレス('''addr''')・32ビットのデータ配列('''pdata''')をDynamixelに書き込みます。 -&color(#0099ff){bool DXLIB/DX2LIB::''Ping'' (uint8_t id, uint16_t *err)};~ 指定されたID('''id''')のDynamixelを検索します。'''err'''にはDynamixelのエラーが返ります。 -&color(#0099ff){bool DXLIB/DX2LIB::''Reset'' (uint8_t id, uint16_t *err)};~ 指定されたID('''id''')のDynamixelを出荷時状態に戻します。'''err'''にはDynamixelのエラーが返ります。 また、Arduino IDEのバージョンによっては「SoftwareSerial.h: No such file or directory」のコンパイルエラーが発生しますので、その場合は自身のスケッチの先頭に以下の1行を挿入してコンパイルします。 #html{{ <pre class="brush: c;"> #include <SoftwareSerial.h></pre> }}
« Prev
Next »
DXLIB_Arduino のバックアップ一覧
DXLIB_Arduino のバックアップソース(No. All)
1: 2018-12-02 (日) 21:05:16
takaboo
2: 2018-12-02 (日) 21:05:16
takaboo
3: 2021-09-09 (木) 17:49:32
takaboo
4: 2021-09-09 (木) 17:49:32
takaboo
5: 2022-06-04 (土) 22:09:03
takaboo
6: 2022-06-08 (水) 09:09:54
takaboo
7: 2022-06-08 (水) 09:10:10
takaboo
8: 2023-03-15 (水) 07:20:45
takaboo
9: 2023-03-15 (水) 07:21:59
takaboo
10: 2023-03-21 (火) 18:09:00
takaboo
現: 2023-03-21 (火) 18:09:15
takaboo
Copyright© 1989,2024 BestTechnology Co.,Ltd.
メニュー
トップ
ニュース
お知らせ
新商品情報
更新情報
マニュアル類
技術情報
チュートリアル
FAQ
お問合せ
技術的なお問合せ
その他お問合せ
お見積り
ブログ
会社案内
ショッピング
ご利用案内
検索
カテゴリ 一覧
ロボットキット
Dynamixelシリーズ
マイコンボード
相撲ロボット
センサ
通信機器
お客様ページ