2: 2016-12-04 (日) 20:51:34 takaboo |
3: 2016-12-12 (月) 18:32:55 takaboo |
| | | |
| -ライブラリのダウンロード(Arduino UNOを想定)~ | | -ライブラリのダウンロード(Arduino UNOを想定)~ |
| + | -- |
| + | #ref(dxlib1.1_for_arduino.zip) |
| + | Dynamixel Protocol V.2に対応~ |
| + | 低位の送受信関数追加~ |
| + | 32bitデータの送受信関数追加~ |
| + | アドレスとサイズに関する引数は全て16bitに統一 |
| + | |
| + | -- |
| #ref(dxlib1.0_for_arduino.zip) | | #ref(dxlib1.0_for_arduino.zip) |
| + | 初期リリース |
| | | |
| DXLIBのインストールは、ArduinoのIDEの「スケッチ→ライブラリのインクルード→.ZIP形式のライブラリをインストール...」メニューを使用してダウンロードしたZIPファイルを選択するだけです。~ | | DXLIBのインストールは、ArduinoのIDEの「スケッチ→ライブラリのインクルード→.ZIP形式のライブラリをインストール...」メニューを使用してダウンロードしたZIPファイルを選択するだけです。~ |
| インストールが完了すると、ユーザーフォルダ配下に「Arduino/libraries/dxlib」が作られ、ライブラリのソースといくつかのサンプルプログラムがその中に展開されます。 | | インストールが完了すると、ユーザーフォルダ配下に「Arduino/libraries/dxlib」が作られ、ライブラリのソースといくつかのサンプルプログラムがその中に展開されます。 |
| | | |
- | DXLIBで使用できるAPIは以下の通りです。 | + | DXLIB v1.1で使用できるAPIは以下の通りです。 |
| -&color(#0099ff){''DXLIB'' (bool ss, uint8_t txpin, uint8_t rxpin)};~ | | -&color(#0099ff){''DXLIB'' (bool ss, uint8_t txpin, uint8_t rxpin)};~ |
| ソフトウェアシリアルの使用('''ss''')・送信端子('''txpin''')・受信端子('''rxpin''')を指定した上でオブジェクトを生成します。~ | | ソフトウェアシリアルの使用('''ss''')・送信端子('''txpin''')・受信端子('''rxpin''')を指定した上でオブジェクトを生成します。~ |
| dxif.begin (57143); | | dxif.begin (57143); |
| } | | } |
- | -&color(#0099ff){bool DXLIB::''WriteByteData'' (uint8_t id, uint8_t addr, uint8_t data, uint8_t *err)};~ | + | -&color(#0099ff){bool DXLIB::''TxPacket'' (uint8_t id, uint8_t inst, uint8_t *param, uint16_t len)};~ |
| + | 指定されたID('''id''')・インストラクション('''inst''')・パラメータ('''param''')・パラメータ長('''len''')のインストラクションパケットを送信します。 |
| + | -&color(#0099ff){bool DXLIB::''RxPacket'' (uint8_t *rdata, uint16_t rdatasize, uint16_t *rlen, uint8_t *err)};~ |
| + | ステータスパケットを受信します。成功するとパケット内のパラメータが'''rdata'''へコピーされ、そのパラメータのサイズが'''rlen'''に返されます。なお、ステータスパケットを受信するのに十分なサイズを確保し、そのポインタを'''rdata'''へ、サイズを'''rdatasize'''に指定します。'''err'''にはDynamixelのエラーが返ります。 |
| + | -&color(#0099ff){bool DXLIB::''ReadByteData'' (uint8_t id, uint16_t addr, uint8_t *data, uint8_t *err)};~ |
| + | 指定されたID('''id''')・アドレス('''addr''')から8ビットのデータを'''data'''へ読み出します。'''err'''にはDynamixelのエラーが返ります。 |
| + | // ID=1のAX-12のLEDを取得 |
| + | uint8_t led; |
| + | dxif.ReadByteData (1, 25, &led, NULL); |
| + | -&color(#0099ff){bool DXLIB::''ReadWordData'' (uint8_t id, uint16_t addr, uint16_t *data, uint8_t *err)};~ |
| + | 指定されたID('''id''')・アドレス('''addr''')から16ビットのデータを'''data'''へ読み出します。'''err'''にはDynamixelのエラーが返ります。 |
| + | // ID=1のAX-12からPresentPositionを取得 |
| + | uint16_t ppos; |
| + | dxif.ReadWordData (id, 36, &ppos, NULL); |
| + | -&color(#0099ff){bool DXLIB::''ReadLongData'' (uint8_t id, uint16_t addr, uint32_t *data, uint8_t *err)};~ |
| + | 指定されたID('''id''')・アドレス('''addr''')から32ビットのデータを'''data'''へ読み出します。'''err'''にはDynamixelのエラーが返ります。 |
| + | -&color(#0099ff){bool DXLIB::''WriteByteData'' (uint8_t id, uint16_t addr, uint8_t data, uint8_t *err)};~ |
| 指定されたID('''id''')・アドレス('''addr''')・8ビットのデータ('''data''')をDynamixelに書き込みます。'''err'''にはDynamixelのエラーが返ります。 | | 指定されたID('''id''')・アドレス('''addr''')・8ビットのデータ('''data''')をDynamixelに書き込みます。'''err'''にはDynamixelのエラーが返ります。 |
- | // ID=1のDynamixelのLEDを点灯 | + | // ID=1のAX-12のLEDを点灯 |
| uint8_t err; | | uint8_t err; |
| dxif.WriteByteData (id, 25, 1, &err); | | dxif.WriteByteData (id, 25, 1, &err); |
- | -&color(#0099ff){bool DXLIB::''WriteWordData'' (uint8_t id, uint8_t addr, uint16_t data, uint8_t *err)};~ | + | -&color(#0099ff){bool DXLIB::''WriteWordData'' (uint8_t id, uint16_t addr, uint16_t data, uint8_t *err)};~ |
| 指定されたID('''id''')・アドレス('''addr''')・16ビットのデータ('''data''')をDynamixelに書き込みます。'''err'''にはDynamixelのエラーが返ります。 | | 指定されたID('''id''')・アドレス('''addr''')・16ビットのデータ('''data''')をDynamixelに書き込みます。'''err'''にはDynamixelのエラーが返ります。 |
- | // ID=1のDynamixelのGoalPositionを511に変更 | + | // ID=1のAX-12のGoalPositionを511に変更 |
| dxif.WriteWordData (id, 30, 511, NULL); | | dxif.WriteWordData (id, 30, 511, NULL); |
- | -&color(#0099ff){bool DXLIB::''WriteSyncWordData'' (const uint8_t *pid, uint8_t addr, const uint16_t *pdata, int num)};~ | + | -&color(#0099ff){bool DXLIB::''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::''WriteSyncByteData'' (const uint8_t *pid, uint16_t addr, const uint8_t *pdata, int num)};~ |
| + | 指定されたid数('''num''')分のIDの配列('''pid''')・アドレス('''addr''')・8ビットのデータ配列('''pdata''')をDynamixelに書き込みます。 |
| + | // 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); |
| + | -&color(#0099ff){bool DXLIB::''WriteSyncWordData'' (const uint8_t *pid, uint16_t addr, const uint16_t *pdata, int num)};~ |
| 指定されたid数('''num''')分のIDの配列('''pid''')・アドレス('''addr''')・16ビットのデータ配列('''pdata''')をDynamixelに書き込みます。 | | 指定されたid数('''num''')分のIDの配列('''pid''')・アドレス('''addr''')・16ビットのデータ配列('''pdata''')をDynamixelに書き込みます。 |
- | // ID=1~5の5個のDynamixelに個別のGoalPositionを指令 | + | // ID=1~5の5個のAX-12に個別のGoalPositionを指令 |
| uint8_t ids={1,2,3,4,5}; | | uint8_t ids={1,2,3,4,5}; |
| uint16_t poss={100,200,300,400,500}; | | uint16_t poss={100,200,300,400,500}; |
| dxif.WriteSyncWordData (ids, 30, ppos, 5); | | dxif.WriteSyncWordData (ids, 30, ppos, 5); |
- | -&color(#0099ff){bool DXLIB::''ReadByteData'' (uint8_t id, uint8_t addr, uint8_t *data, uint8_t *err)};~ | + | -&color(#0099ff){bool DXLIB::''WriteSyncLongData'' (const uint8_t *pid, uint16_t addr, const uint32_t *pdata, int num)};~ |
- | 指定されたID('''id''')・アドレス('''addr''')から8ビットのデータを'''data'''へ読み出します。'''err'''にはDynamixelのエラーが返ります。 | + | 指定されたid数('''num''')分のIDの配列('''pid''')・アドレス('''addr''')・32ビットのデータ配列('''pdata''')をDynamixelに書き込みます。 |
- | // ID=1のDynamixelのLEDの状態を取得 | + | |
- | uint8_t led; | + | |
- | dxif.ReadByteData (1, 25, &led, NULL); | + | |
- | -&color(#0099ff){bool DXLIB::''ReadWordData'' (uint8_t id, uint8_t addr, uint16_t *data, uint8_t *err)};~ | + | |
- | 指定されたID('''id''')・アドレス('''addr''')から16ビットのデータを'''data'''へ読み出します。'''err'''にはDynamixelのエラーが返ります。 | + | |
- | // ID=1のDynamixelのPresentPositionを取得 | + | |
- | uint16_t ppos; | + | |
- | dxif.ReadWordData (id, 36, &ppos, NULL); | + | |
| -&color(#0099ff){bool DXLIB::''Ping'' (uint8_t id, uint16_t *err)};~ | | -&color(#0099ff){bool DXLIB::''Ping'' (uint8_t id, uint16_t *err)};~ |
| 指定されたID('''id''')のDynamixelを検索します。'''err'''にはDynamixelのエラーが返ります。 | | 指定されたID('''id''')のDynamixelを検索します。'''err'''にはDynamixelのエラーが返ります。 |
| 指定されたID('''id''')のDynamixelを出荷時状態に戻します。'''err'''にはDynamixelのエラーが返ります。 | | 指定されたID('''id''')のDynamixelを出荷時状態に戻します。'''err'''にはDynamixelのエラーが返ります。 |
| | | |
- | なお、本ライブラリはDynamixel XL・XM・XH・Proシリーズで採用されている新しいプロトコルには対応していません。必要に応じてライブラリのソースを改造して対応させてください。 | + | また、Arduino IDEのバージョンによっては「SoftwareSerial.h: No such file or directory」のコンパイルエラーが発生しますので、その場合は自信のスケッチの先頭に以下の1行を挿入してコンパイルします。 |
- | | + | |
- | また、Arduino IDEのバージョンによっては「SoftwareSerial.h: No such file or directory」のコンパイルエラーが発生しますので、その場合はArduino IDEをインストールしたディレクトリ配下の「hardware\arduino\avr\libraries\SoftwareSerial\SoftwareSerial.h」をユーザーフォルダ配下の「Arduino\libraries\dxlib\src」へコピーした上で再度スケッチをコンパイルします。~ | + | |
- | さらにそれでも本ライブラリに起因するコンパイルエラーが発生する場合は、自信のスケッチの先頭に以下の1行を挿入してコンパイルします。 | + | |
| #include <SoftwareSerial.h> | | #include <SoftwareSerial.h> |
| | | |