37: 2016-01-12 (Tue) 00:42:54 takaboo source Cur: 2021-03-27 (Sat) 08:17:58 takaboo source
Line 1: Line 1:
-TITLE:Dynamixel Library+TITLE:Dynamixel Protocol Library
**概要 [#va21cbfb] **概要 [#va21cbfb]
-Dynamixel LibraryはDynamixel(DX,RX,MXシリーズ)の通信プロトコルをサポートした製品をWindows等のOSから操作するためのライブラリ集です。+Dynamixel Protocol LibraryはDynamixel Protocol 1の通信プロトコルをサポートした製品をWindows等のOSから操作するためのライブラリ集です。
-シリアル通信にかかる処理を本ライブラリにて行うため、シリアル通信である事をほとんど意識すること無くアプリケーションを作ることができます。+シリアル通信に関するAPI、タイミングやエラー処理、プロトコルの整合性チェック等を本ライブラリ内で行っているため、シリアル通信である事をほとんど意識すること無くアプリケーションの作りこみに専念することができます。
-なお、PCと[[BTE061D]]・[[BTE061E]]・[[BTE068]]・[[BTE068B]]・[[BTE082]]・[[BTE083]]のいずれかがUSBケーブルで接続され、PC上にWindowsのデバイスとして仮想COMポートが増設された状態で使用するものとします。+なお、PCと[[BTE061D]]・[[BTE061E]]・[[BTE068]]・[[BTE068B]]・[[BTE068C]]・[[BTE082]]・[[BTE083]]・[[BTE074]]・[[BTE079]]・[[BTE080]]・[[BTE079B]]・[[BTE080B]]・[[BTX229>http://emanual.robotis.com/docs​/en/parts/interface/u2d2/]]のいずれかがUSBポートに接続され、PCのOSに仮想COMポートが増設された状態で使用するものとします。
**ライブラリおよびサンプルプログラムのダウンロード [#j8bd290f] **ライブラリおよびサンプルプログラムのダウンロード [#j8bd290f]
以下のリンクよりライブラリ及びサンプルプログラムをアーカイブしたファイルがダウンロードできます。 以下のリンクよりライブラリ及びサンプルプログラムをアーカイブしたファイルがダウンロードできます。
--''2016/01/12 Ver.3.2''+-''2021/1/22 Ver.4.4''~ 
-#ref(http://www.besttechnology.co.jp/download/DXL​IB_V3.2.zip)+#ref(https://www.besttechnology.co.jp/do​wnload/DXLIB_V4.4.zip) 
 +内容 
 +--新しく追加されたDynamixelの定義を追加 
 +--makedll.batの内容を一部変更 
 +-2019/11/15 Ver.4.3~ 
 +#ref(https://www.besttechnology.co.jp/do​wnload/DXLIB_V4.3.zip) 
 +内容 
 +--Visual Studio上での動作検証を行いヘッダを一部修正 
 +--ライブラリソースのエンコードをUTF-8のBOM付きに統一 
 +--新しく追加されたDynamixelの定義を追加 
 +-2019/03/27 Ver.4.2~ 
 +#ref(https://www.besttechnology.co.jp/do​wnload/DXLIB_V4.2.zip) 
 +内容 
 +--追加APIの正式リリース 
 +--C言語による追加APIのサンプルプログラムを拡充 
 +--Pythonによるサンプルプログラムを拡充 
 +-2016/07/13 Ver.3.3~ 
 +#ref(https://www.besttechnology.co.jp/do​wnload/DXLIB_V3.3.zip) 
 +内容 
 +--Linux上でのttyの初期化処理を修正 
 +--Linux上でのスリープ命令をusleepに置換する様に変更 
 +-2016/01/12 Ver.3.2~ 
 +#ref(https://www.besttechnology.co.jp/download/DXL​IB_V3.2.zip)
内容 内容
--ヘッダファイルを最近のVCで使用するとエラーになるのを修正 --ヘッダファイルを最近のVCで使用するとエラーになるのを修正
Line 16: Line 38:
--GCCがやたらエラーを吐くので、ライブラリソースのエンコードをUTF-8に統一 --GCCがやたらエラーを吐くので、ライブラリソースのエンコードをUTF-8に統一
-2015/11/18 Ver.3.1~ -2015/11/18 Ver.3.1~
-#ref(http://www.besttechnology.co.jp/download/DXL​IB_V3.1.zip)+#ref(https://www.besttechnology.co.jp/download/DXL​IB_V3.1.zip)
内容 内容
--TDxAlarmStatus構造体のアライメントがGCCのバージョンによって1バイト境界にならない事があるのを修正 --TDxAlarmStatus構造体のアライメントがGCCのバージョンによって1バイト境界にならない事があるのを修正
Line 22: Line 44:
--DX_SetBaudrateの処理に待ち時間を挿入 --DX_SetBaudrateの処理に待ち時間を挿入
-2014/06/11 Ver.3.0~ -2014/06/11 Ver.3.0~
-#ref(http://www.besttechnology.co.jp/download/DXL​IB_V3.0.zip)+#ref(https://www.besttechnology.co.jp/download/DXL​IB_V3.0.zip)
内容 内容
--各APIのアドレス指定が8bit幅だったものを16bitに拡張(後継のDYNAMIXEL2に合わせた) --各APIのアドレス指定が8bit幅だったものを16bitに拡張(後継のDYNAMIXEL2に合わせた)
Line 108: Line 130:
|~|dxlib.h|<|ライブラリヘッダ | |~|dxlib.h|<|ライブラリヘッダ |
|~|dxlib_matlab.h|<|matlab用ヘッダ | |~|dxlib_matlab.h|<|matlab用ヘッダ |
 +|~|dxlib.py|<|python用API定義 |
|~|dxmemmap.h|<|DX/AX/RX/EX/MXシリーズ用コントロールテーブル定義ヘッダ | |~|dxmemmap.h|<|DX/AX/RX/EX/MXシリーズ用コントロールテーブル定義ヘッダ |
|~|makelib.bat|<|ライブラリ再構築用バッチ | |~|makelib.bat|<|ライブラリ再構築用バッチ |
|~|83.bat|<|~| |~|83.bat|<|~|
-|SampleCode|GCCDeveloperLite|smpl1(template).c |サンプル +|SampleCode|GCCDeveloperLite|smpl*.c |サンプル |
-|~|~|smpl2(ping).c |~| +
-|~|~|smpl3(byte_rw).c |~| +
-|~|~|smpl4(word_rw).c |~| +
-|~|~|smpl5(multithread).c |~| +
-|~|~|smpl6(sync).c |~| +
-|~|~|smpl7(rawpacket).c |~| +
-|~|~|smpl8(dualport).c |~| +
-|~|~|smpl9(DynamicLoad).c |~| +
-|~|~|smpl10(USS3).c |~|+
|~|~|dxlib.h |DXLIBフォルダに収録されるものと同一 | |~|~|dxlib.h |DXLIBフォルダに収録されるものと同一 |
|~|~|dxmemmap.h |~| |~|~|dxmemmap.h |~|
Line 131: Line 145:
|~|~|dxlib_x32.dll |DXLIBフォルダに収録されるものと同一 | |~|~|dxlib_x32.dll |DXLIBフォルダに収録されるものと同一 |
|~|~|dxlib_x64.dll |~| |~|~|dxlib_x64.dll |~|
-|~|LabVIEW2011|sample1.vi |サンプル +|~|LabVIEW2011|sample*.vi |サンプル |
-|~|~|sample2.vi |~| +
-|~|~|sample3.vi |~| +
-|~|~|sample4.vi |~| +
-|~|~|sample5.vi |~| +
-|~|~|sample6.vi |~| +
-|~|~|WaveForm.vi |サブvi |+
|~|~|DXLIB.llb |dllの呼び出しをvi化 | |~|~|DXLIB.llb |dllの呼び出しをvi化 |
 +|~|~|DXLIB_DXL.llb |dllの呼び出しをvi化 |
|~|~|DXLIB_Wrapper.llb |アクチュエータに特化したvi | |~|~|DXLIB_Wrapper.llb |アクチュエータに特化したvi |
|~|~|dxlib_x32.dll |DXLIBフォルダに収録されるものと同一 | |~|~|dxlib_x32.dll |DXLIBフォルダに収録されるものと同一 |
Line 144: Line 153:
|~|~|dxlib_x32.dll |DXLIBフォルダに収録されるものと同一 | |~|~|dxlib_x32.dll |DXLIBフォルダに収録されるものと同一 |
|~|~|dxlib_x64.dll |~| |~|~|dxlib_x64.dll |~|
-|~|Linux|smpl2.c |サンプル | +|~|Linux|smpl*.c |サンプル | 
-|~|~|smpl4.c |~+|~|Ruby|smpl*.rb |サンプル
-|~|Ruby|SMPL1.c |サンプル | +|~|Python|smpl*.py |サンプル | 
-|~|~|SMPL3.c |~+|~|~|dxlib.py |DXLIBフォルダに収録されるものと同一
-|~|Python|SMPL1.py |サンプル +|~|~|dxlib_x32.dll |~
-|~|~|SMPL3.py |~|+|~|~|dxlib_x64.dll |~|
**開発環境毎の設定 [#u3ff03d9] **開発環境毎の設定 [#u3ff03d9]
Line 253: Line 262:
***Python [#mc6a5a49] ***Python [#mc6a5a49]
-'SampleCode\Ruby'フォルダにサンプルが同梱されます。ポート・ボーレート・ID等は使用する環境に合わせて適宜修正して使用します。~ +'SampleCode\Python'フォルダにサンプルが同梱されます。ポート・ボーレート・ID等は使用する環境に合わせて適宜修正して使用します。~ 
-[[Python:http://www.python.jp/Zope]]はオープンソースの動的なプログラミング言語で、外部のDLLへ簡易にアクセスすることが出来ます。~ +[[Python:http://www.python.jp/]]はオープンソースの動的なプログラミング言語で、外部のDLLへ簡易にアクセスすることが出来ます。~ 
-LinuxでLoadLibraryを呼び出す際はcdllインスタンスを使用します。 +各APIのPython用の宣言を定義したdxlib.pyをimportするだけで済みます。 
-  dxlib = windll.LoadLibrary( "dxlib_x32.dll" )  # for window + from dxlib import *   # dxlibをインポート
-  dxlib = cdll.LoadLibrary( "./dxlib.so" )   # for linux+
***Java [#ceff395d] ***Java [#ceff395d]
Line 285: Line 293:
+コンパイル準備~ +コンパイル準備~
ダウンロードファイルを解凍~ ダウンロードファイルを解凍~
-+オブジェクトファイルの作成++ライブラリファイルの生成
-  gcc dxlib.cpp -o dxlib.o+ $ gcc -c -D__MAKE_LIB__ dxlib_intuitive.cpp dxlib.cpp 
 + $ ar -rcsv libdxlib.a dxlib_intuitive.o dxlib.o
+共有ライブラリの作成~ +共有ライブラリの作成~
-RubyやPython等で使用する場合のみ。+RubyやPython等で使用する場合等
-  gcc -fPIC -shared dxlib.cpp -o dxlib.so + $ gcc -fPIC -shared -D__MAKE_LIB__ dxlib_intuitive.cpp dxlib.cpp -o dxlib.so.4.2 
-+コンパイル++ユーザプログラムとのリンク
-dxlibのオブジェクトファイルとC言語ソースを合わせてコンパイルする。~+生成したライブラリファイルと自身のソースをリンクする。~
ポート・ボーレート等は使用する環境に合わせて適宜追加・修正する。~ ポート・ボーレート等は使用する環境に合わせて適宜追加・修正する。~
ライブラリは必要に合わせて追加する。~ ライブラリは必要に合わせて追加する。~
-  gcc sample.c dxlib.o -o sample+ $ gcc sample.c -ldxlib -o sample
なお、コンパイルや実行にあたってI/Fやカーネル・ディストリビューションに依存するのがLinuxですので、そのまま使用できない場合は適宜ソースを修正下さい。 なお、コンパイルや実行にあたってI/Fやカーネル・ディストリビューションに依存するのがLinuxですので、そのまま使用できない場合は適宜ソースを修正下さい。
Line 593: Line 602:
   // ID=1のAX-12へ位置(511)を指令    // ID=1のAX-12へ位置(511)を指令
   DX_WriteWordData (dev, 1, 30, 511, &err);    DX_WriteWordData (dev, 1, 30, 511, &err);
 +   DX_ClosePort (dev);
 + }
 +
 +***DX_ReadLongData [#w341e7a5]
 +対象IDのコントロールテーブルから2ワード(4バイト)のデータを読み出す。
 + bool DX_ReadLongData(TDeviceID dvid, uint8_t id, uint16_t adr, uint32_t *rdata, TErrorCode *err);
 +-パラメータ
 +--[[TDeviceID>#TDeviceID]] '''dvid'''
 +~DX_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。
 +--uint8_t '''id'''
 +~対象とするID (0~253)。
 +--uint16_t '''adr'''
 +~コントロールテーブルのアドレス。
 +--uint32_t '''*rdata'''
 +~読み出した値の保存先。
 +--[[TErrorCode>#TErrorCode]] '''*err'''
 +~エラーコード。
 +-戻り値
 +--bool
 +~正常な応答が得られた場合はtrue、それ以外はfalseを返す。~
 +-使用例
 + TDeviceID  dev;
 + TErrorCode err;
 + uint32_t  dat;
 + // オープン
 + dev = DX_OpenPort ("\\\\.\\COM10", 1000000);
 + if (dev) {
 +   // ID=1のXM430から現在位置を取得
 +   if (DX_ReadLongData (dev, 1, 132, &dat, &err)) {
 +     printf ("PRESENT POS=%d\n", dat);
 +   }
 +   DX_ClosePort (dev);
 + }
 +
 +***DX_WriteLongData [#k42e5e5f]
 +対象IDのコントロールテーブルへ2ワード(4バイト)のデータを書き込む。
 + bool DX_WriteLongData(TDeviceID dvid, uint8_t id, uint16_t adr, uint32_t dat, TErrorCode *err);
 +-パラメータ
 +--[[TDeviceID>#TDeviceID]] '''dvid'''
 +~DX_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。
 +--uint8_t '''id'''
 +~対象とするID (0~253, 254)。
 +--uint16_t '''adr'''
 +~コントロールテーブルのアドレス。
 +--uint32_t '''dat'''
 +~書き込む値。
 +--[[TErrorCode>#TErrorCode]] '''*errcode'''
 +~エラーコード。
 +-戻り値
 +--bool
 +~正常な応答が得られた場合はtrue、それ以外はfalseを返す。~
 +BROADCASTING IDを指定した場合は応答待ちを行わない。
 +-使用例
 + TDeviceID  dev;
 + TErrorCode err;
 + // オープン
 + dev = DX_OpenPort ("\\\\.\\COM10", 1000000);
 + if (dev) {
 +   // ID=1のXM430へ位置(1024)を指令
 +   DX_WriteLongData (dev, 1, 30, 1024, &err);
   DX_ClosePort (dev);    DX_ClosePort (dev);
 }  }
Line 710: Line 779:
 #define _POS1 (400)  #define _POS1 (400)
 #define _POS2 (511)  #define _POS2 (511)
 + 
 TDeviceID  dev;  TDeviceID  dev;
 TErrorCode err;  TErrorCode err;
Line 725: Line 794:
   _POS2 >> 8    _POS2 >> 8
 };  };
 + 
 dev = DX_OpenPort ("\\\\.\\COM10", 1000000);  dev = DX_OpenPort ("\\\\.\\COM10", 1000000);
 if (dev) {  if (dev) {
Line 795: Line 864:
   1,    // サイズ    1,    // サイズ
 };  };
 + 
 dev = DX_OpenPort ("\\\\.\\COM10", 1000000);  dev = DX_OpenPort ("\\\\.\\COM10", 1000000);
 if (dev) {  if (dev) {
Line 850: Line 919:
|1|ERR_DX_ANGLE|Angle Limitの範囲外にGoal Positionが指定された| |1|ERR_DX_ANGLE|Angle Limitの範囲外にGoal Positionが指定された|
|0|ERR_DX_OVERVOLTAGE|電源電圧が指定動作電圧の範囲を超えた| |0|ERR_DX_OVERVOLTAGE|電源電圧が指定動作電圧の範囲を超えた|
 +
 +**追加API [#i7e58b8f]
 +#include(DXL_intuitive,notitle)


Front page   Diff ReloadPrint View   Page list Search Recent changes   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom)