35: 2014-06-12 (木) 16:32:31 takaboo[6] [7] | 36: 2015-11-18 (水) 12:44:46 takaboo[6] [8] | ||
---|---|---|---|
Line 1: | Line 1: | ||
TITLE:Dynamixel Library | TITLE:Dynamixel Library | ||
**概要 [#va21cbfb] | **概要 [#va21cbfb] | ||
- | Dynamixel LibraryはDynamixelの通信プロトコルをサポートした製品をWindows等のOSから操作するためのライブラリ集です。~ | + | Dynamixel LibraryはDynamixel(DX,RX,MXシリーズ)の通信プロトコルをサポートした製品をWindows等のOSから操作するためのライブラリ集です。~ |
- | 従来はユーザ自らシリアル通信に関するAPIを使用してタイミングやエラー処理を加えて利用するものでしたが、本APIを介する事でシリアル通信である事をほとんど意識すること無くアプリケーションの作りこみに専念することができるはずです。 | + | シリアル通信にかかる処理を本ライブラリにて行うため、シリアル通信である事をほとんど意識すること無くアプリケーションを作ることができます。 |
なお、PCと[[BTE061D]]・[[BTE061E]]・[[BTE068]]・[[BTE068B]]・[[BTE082]]・[[BTE083]]のいずれかがUSBケーブルで接続され、PC上にWindowsのデバイスとして仮想COMポートが増設された状態で使用するものとします。 | なお、PCと[[BTE061D]]・[[BTE061E]]・[[BTE068]]・[[BTE068B]]・[[BTE082]]・[[BTE083]]のいずれかがUSBケーブルで接続され、PC上にWindowsのデバイスとして仮想COMポートが増設された状態で使用するものとします。 | ||
Line 8: | Line 8: | ||
**ライブラリおよびサンプルプログラムのダウンロード [#j8bd290f] | **ライブラリおよびサンプルプログラムのダウンロード [#j8bd290f] | ||
以下のリンクよりライブラリ及びサンプルプログラムをアーカイブしたファイルがダウンロードできます。 | 以下のリンクよりライブラリ及びサンプルプログラムをアーカイブしたファイルがダウンロードできます。 | ||
- | -''2014/06/11 Ver.3.0''~ | + | -''2015/11/18 Ver.3.1''~ |
+ | #ref(http://www.besttechnology.co.jp/download/DXLIB_V3.1.zip) | ||
+ | 内容 | ||
+ | --TDxAlarmStatus構造体のアライメントがGCCのバージョンによって1バイト境界にならない事があるのを修正 | ||
+ | --ヘッダファイルの一部の記述がMSVCに対応していなかったのを修正 | ||
+ | --DX_SetBaudrateの処理に待ち時間を挿入 | ||
+ | -2014/06/11 Ver.3.0~ | ||
#ref(http://www.besttechnology.co.jp/download/DXLIB_V3.0.zip) | #ref(http://www.besttechnology.co.jp/download/DXLIB_V3.0.zip) | ||
内容 | 内容 | ||
Line 22: | Line 28: | ||
--アーカイブファイル名を変更 | --アーカイブファイル名を変更 | ||
-2013/10/10 Ver.2.9.1~ | -2013/10/10 Ver.2.9.1~ | ||
- | #ref(http://www.besttechnology.co.jp/download/DXLIBforWin2.9.1.zip) | ||
内容 | 内容 | ||
--DX_SetTimeOutOffsetでオフセットタイムを指定していない場合のデフォルト値が0ではタイムアウトが生じやすいため20に変更 | --DX_SetTimeOutOffsetでオフセットタイムを指定していない場合のデフォルト値が0ではタイムアウトが生じやすいため20に変更 | ||
Line 28: | Line 33: | ||
--DXLIB.pasに追加したDX_SetTimeOutOffsetの定義ミスを修正 | --DXLIB.pasに追加したDX_SetTimeOutOffsetの定義ミスを修正 | ||
-2013/09/15 Ver.2.9~ | -2013/09/15 Ver.2.9~ | ||
- | #ref(http://www.besttechnology.co.jp/download/DXLIBforWin2.9.zip) | ||
内容 | 内容 | ||
--タイムアウトの値を見定めるのが困難という事から基本的に引数から排除し、内部で理論値を算出する様に変更。 | --タイムアウトの値を見定めるのが困難という事から基本的に引数から排除し、内部で理論値を算出する様に変更。 | ||
Line 38: | Line 42: | ||
--Win32とLinuxの相違部分を整理して多少見やすくしてみた。 | --Win32とLinuxの相違部分を整理して多少見やすくしてみた。 | ||
-2013/03/28 Ver.2.8.1~ | -2013/03/28 Ver.2.8.1~ | ||
- | #ref(http://www.besttechnology.co.jp/download/DXLIBforWin2.8.1.zip) | ||
内容 | 内容 | ||
--DX_Ping2の初期化部において不定なTDevicdIDを想定していなかったのを修正。 | --DX_Ping2の初期化部において不定なTDevicdIDを想定していなかったのを修正。 | ||
-2013/03/28 Ver.2.8~ | -2013/03/28 Ver.2.8~ | ||
- | #ref(http://www.besttechnology.co.jp/download/DXLIBforWin2.8.zip) | ||
内容 | 内容 | ||
--名称をDXLIB2からDXLIBに戻す。 | --名称をDXLIB2からDXLIBに戻す。 | ||
Line 54: | Line 56: | ||
--デバイスからのアラームステータスがAPIの応答に反映されないケースを修正。 | --デバイスからのアラームステータスがAPIの応答に反映されないケースを修正。 | ||
-2011/07/20 Ver.2.6~ | -2011/07/20 Ver.2.6~ | ||
- | #ref(http://www.besttechnology.co.jp/download/DXLIB2forWin2.6.zip) | ||
内容 | 内容 | ||
--DX_SyncWriteDataをDX_WriteSyncDataへ改名。 | --DX_SyncWriteDataをDX_WriteSyncDataへ改名。 | ||
Line 61: | Line 62: | ||
--古いバージョンのmatlabがDEVICEIDを誤認するため型を変更。 | --古いバージョンのmatlabがDEVICEIDを誤認するため型を変更。 | ||
-2011/03/28 Ver.2.5.1~ | -2011/03/28 Ver.2.5.1~ | ||
- | #ref(http://www.besttechnology.co.jp/download/DXLIB2forWin2.5.1.zip) | ||
内容 | 内容 | ||
--放置していたLinuxへの対応をマトモに見直し。 | --放置していたLinuxへの対応をマトモに見直し。 | ||
-2011/03/16 Ver.2.5~ | -2011/03/16 Ver.2.5~ | ||
- | #ref(http://www.besttechnology.co.jp/download/DXLIB2forWin2.5.zip) | ||
内容 | 内容 | ||
--内部のイベント処理をさらに整理しパフォーマンスを改善。 | --内部のイベント処理をさらに整理しパフォーマンスを改善。 | ||
Line 71: | Line 70: | ||
--DELPHI向けのサンプル追加。 | --DELPHI向けのサンプル追加。 | ||
-2011/03/08 Ver.2.4~ | -2011/03/08 Ver.2.4~ | ||
- | #ref(http://www.besttechnology.co.jp/download/DXLIB2forWin2.4.zip) | ||
内容 | 内容 | ||
--内部のイベント処理が一部破綻していたのを修正。 | --内部のイベント処理が一部破綻していたのを修正。 | ||
Line 77: | Line 75: | ||
--ゴミデータ受信時の停滞を解消。 | --ゴミデータ受信時の停滞を解消。 | ||
-2011/03/03 Ver.2.3 | -2011/03/03 Ver.2.3 | ||
- | #ref(http://www.besttechnology.co.jp/download/DXLIB2forWin2.3.zip) | ||
内容 | 内容 | ||
--内部のイベント処理がことごとく破綻していたのを修正。 | --内部のイベント処理がことごとく破綻していたのを修正。 | ||
Line 83: | Line 80: | ||
--BROADCASTING IDを使用したPING(DX_Ping2)を追加。 | --BROADCASTING IDを使用したPING(DX_Ping2)を追加。 | ||
-2011/02/02 Ver.2.2 | -2011/02/02 Ver.2.2 | ||
- | #ref(http://www.besttechnology.co.jp/download/DXLIB2forWin2.2.zip) | ||
内容 | 内容 | ||
--ライブラリ構築のオプションを修正し、各言語毎の呼出規約に囚われないファンクション名を吐く様にした。 | --ライブラリ構築のオプションを修正し、各言語毎の呼出規約に囚われないファンクション名を吐く様にした。 | ||
-2011/02/01 Ver.2.1~ | -2011/02/01 Ver.2.1~ | ||
- | #ref(http://www.besttechnology.co.jp/download/DXLIB2forWin2.1.zip) | ||
内容 | 内容 | ||
--呼出規約をstdcallに変更 | --呼出規約をstdcallに変更 | ||
Line 93: | Line 88: | ||
--新規ターゲット向けにサンプルを追加~ | --新規ターゲット向けにサンプルを追加~ | ||
-2010/12/24 Ver.2.0~ | -2010/12/24 Ver.2.0~ | ||
- | #ref(http://www.besttechnology.co.jp/download/DXLIB2forWin2.0.zip) | ||
内容 | 内容 | ||
--初期リリース~ | --初期リリース~ | ||
Line 281: | Line 275: | ||
***Linux [#w5c096b8] | ***Linux [#w5c096b8] | ||
- | Linux上でのdxlibのコンパイル方法を紹介します。~ | + | Linux上でdxlibをコンパイルする方法を紹介します。~ |
+コンパイル準備~ | +コンパイル準備~ | ||
ダウンロードファイルを解凍~ | ダウンロードファイルを解凍~ | ||
Line 298: | Line 292: | ||
**API [#ybae1454] | **API [#ybae1454] | ||
- | Dynamixel Libraryではシリアル通信を直接意識するコードを記述せずに、対象IDのデバイスのコントロールテーブルへの読み書き行うAPIを用意しています。~ | + | 本ライブラリはシリアル通信を行うコードを記述しなくて良いのですが、デバイスIDという番号を用いて使用するシリアルI/Fを一元的に管理します。また、制御対象となるDynamixelのIDを指定し、そのコントロールテーブルへの読み書き行うAPIが用意されています。~ |
- | C言語のソースにdxlib.hをインクルードすれば、APIを使用するのに必要なプロトタイプとマクロの定義がなされます。 | + | 自身のC言語で記述されたソースプログラムにdxlib.hをインクルードする事で、APIを使用するのに必要なプロトタイプとマクロの定義がなされます。 |
+ | |||
+ | ''注意事項'':~ | ||
+ | DynamixelのStatus Return Levelを必ず''2''に設定した上で使用する事。それ以外の値が設定されていた場合はAPIが想定した応答が得られず、タイムアウトするまでAPIから返らない。 | ||
***DX_OpenPort [#zbd2f6ef] | ***DX_OpenPort [#zbd2f6ef] | ||
Line 389: | Line 386: | ||
***DX_SetTimeOutOffset [#h4a1b54e] | ***DX_SetTimeOutOffset [#h4a1b54e] | ||
I/FやOSの都合で生じるであろうタイムラグを予め設定する。~ | I/FやOSの都合で生じるであろうタイムラグを予め設定する。~ | ||
- | 内部で算出している受信タイムアウト時間とタイムアウトオフセット時間を加算した時間を超えた場合に、タイムアウトエラーとして処理する。~ | + | ライブラリ内で想定した受信時間と指定されたタイムアウトオフセット時間を加算した時間を超えた場合に、タイムアウトエラーとして処理される。~ |
デフォルトは20。 | デフォルトは20。 | ||
void DX_SetTimeOutOffset (TDeviceID dvid, uint32_t offsettime); | void DX_SetTimeOutOffset (TDeviceID dvid, uint32_t offsettime); | ||
Line 431: | Line 428: | ||
***DX_Ping2 [#g16504b3] | ***DX_Ping2 [#g16504b3] | ||
PINGインストラクションでBROADCASTING IDを指定して不特定の対象の応答を確認する。~ | PINGインストラクションでBROADCASTING IDを指定して不特定の対象の応答を確認する。~ | ||
- | BROADCASTING IDを指定した場合の応答時間がデバイスのシリーズによって差があるため、それらが混在している環境では正確な情報を取得できない場合がある。 | + | 応答時間がDynamixelの種類によって差があるため、それらが混在している環境では正確な情報を取得できない場合がある。 |
bool DX_Ping2 (TDeviceID dvid, uint32_t *num, TDxAlarmStatus *AlarmStatus, TErrorCode *err); | bool DX_Ping2 (TDeviceID dvid, uint32_t *num, TDxAlarmStatus *AlarmStatus, TErrorCode *err); | ||
-パラメータ | -パラメータ | ||
Line 457: | Line 454: | ||
if (dev) { | if (dev) { | ||
// 不明な対象に対してPINGを発行 | // 不明な対象に対してPINGを発行 | ||
+ | // numには予め254の値を指定したので、最大254台まで見つけようとする | ||
if (DX_Ping2 (dev, &num, stat, &err)) { | if (DX_Ping2 (dev, &num, stat, &err)) { | ||
+ | // 1台以上見つかるとnumには見つかった数が返ってくる | ||
for (i = 0; i < num; i++) | for (i = 0; i < num; i++) | ||
printf ("Found ID=%d %02X\n", stat[i].id, stat[i].Status); | printf ("Found ID=%d %02X\n", stat[i].id, stat[i].Status); |
(This host) = https://www.besttechnology.co.jp