2.0に対応した製品をWindows等のOSから操作するためのライブラリ集です。シリアル通信に関するAPI、タイミングやエラー処理、プロトコルの整合性チェック等をライブラリ内で行うため、シリアル通信である事をほとんど意識すること無くアプリケーションの作りこみに専念することができます。PCとBTE061D・BTE061E・BTE068・BTE068B・BTE068C・BTE082・BTE083・BTE074・BTE079・BTE080・BTE079B・BTE080B・BTX229のいずれかがUSBポートに接続され、PCのOSに仮想COMポートが増設された状態で使用するものとします。2.0を装備した装置を同一ネットワーク上で同時に運用する事は推奨できない。ライブラリおよびサンプルプログラムのダウンロード以下のリンクよりライブラリ及びサンプルプログラムをアーカイブしたファイルがダウンロードできます。Ver.1.3betahttp://www.besttechnology.co.jp/download​/DX2LIB_V1.3beta.zip内容ベータリリースアーカイブファイルには以下のファイルが同梱されます。必要に応じて解凍してください(ベータ版では一部欠損)。サンプルSMPL3.c開発環境毎の設定ここでは3つのツールで使用する場合の設定方法を説明します。ここで紹介しないツールでも必要とされる操作は概ね同様ですが、全てに対応できるとまでは明言しません。Liteの詳細についてはこちら。'SampleCode\GCCDeveloperLite'フォルダにはAPIの基本的な使い方を紹介したサンプルが同梱されます。ポート・ボーレート・ID等は使用する環境に合わせて適宜修正して使用します。DLLの静的リンク静的にDLLを使用する場合は以下の手順でDLLをリンクする指定を行った上でコンパイルします。32bit環境を前提とします。新規に追加された空の行をクリックし'dx2lib_x32.dll'と入力OKを押して設定を反映DLLの動的リンク動的にDLLを使用する場合はDLL自体をコンパイラオプションへ追記する必要はありません。その代わりにソース中でdx2lib.hをインクルードする前に_DYNAMICLOADマクロを定義しておきます。"dx2lib.h"これによりヘッダファイル内の諸定義が切り替わり、DLLのロード及びアンロードを行うLoadDLLとUnloadDLLが利用できるようになります。ExpressでDLLの静的なリンク方法のみ紹介します。LabVIEW'SampleCode\LabVIEW2011'フォルダにサンプルが同梱されます。ポート・ボーレート・ID等は使用する環境に合わせて適宜修正して使用します。LabVIEWには外部のDLLへアクセスする手段が提供されています。DX2LIBそのままの定義ではLabVIEWからは使いづらいため、サンプルプログラムではサブviでラッピングしてDX2LIB.llbにまとめて提供しています。DELPHI'SampleCode\DELPHI'フォルダにサンプルが同梱されます。ポート・ボーレート・ID等は使用する環境に合わせて適宜修正して使用します。DELPHIはPASCAL言語によるPC向け開発ツールであり、外部のDLLへ容易にアクセスする事が出来ます。Libraryの各APIへ簡便にアクセスできます。VB'SampleCode\EXCEL'フォルダにサンプルが同梱されます。OfficeのVBAを使用し、マクロの標準モジュールにDX2LIBHEADという名称でDLLに含まれるいくつかのAPIが定義してあります。Module1にPingTestとMotorTestというマクロが記述されていますので、ワークシートから適宜マクロを呼び出して実行してください。結果がシート上に反映されます。Ruby'SampleCode\Ruby'フォルダにサンプルが同梱されます。ポート・ボーレート・ID等は使用する環境に合わせて適宜修正して使用します。Rubyはオープンソースの動的なプログラミング言語で、外部のDLLへ簡易にアクセスすることが出来ます。)Python'SampleCode\Python'フォルダにサンプルが同梱されます。ポート・ボーレート・ID等は使用する環境に合わせて適宜修正して使用します。Pythonはオープンソースの動的なプログラミング言語で、外部のDLLへ簡易にアクセスすることが出来ます。各APIのPython用の宣言を定義したdx2lib.pyをimportするだけで済みます。MATLABMATLABからの使用例を紹介します。ポート・ボーレート・ID等は使用する環境に合わせて適宜修正して下さい。mex-setupにてCコンパイラを選択しておく必要があります。事前準備まずはMATLAB起動後、「ファイル(F)」→「パス設定(H)」でdx2lib_x32.dll(MATALBが64bitの場合はdx2lib_x64.dll)とdx2lib_matlab.hの格納されたパスを指定します。dx2lib.hはMATLABでは解釈できない記述が多いため使用しないでください。DLLのロードloadlibrary('dx2lib_x32.dll','dx2lib_matlab.h','alias','dx2lib')ポートのオープンロードされたdx2libのDX2_OpenPortを呼出します。関数名の後はポートとボーレートです。calllib('dx2lib','DX2_OpenPort','\\.\COM3',1000000)TErrorCodeの取得TErrorCodeはポインタで引き渡しているため、事前に型宣言をしておきます。値はErr.Valueで取得可能です。必要なければ0を指定しても構いません。Err.Value);ポートのクローズDX2_OpenPortを行ったので、DX2_ClosePortを使用してポートを閉じます。calllib('dx2lib','DX2_ClosePort',devid)DLLのアンロードunloadlibrary('dx2lib')LinuxLinux上でのdx2libのコンパイル方法を紹介します。dx2lib.so.2.3ユーザプログラムとのリンク生成したライブラリファイルと自身のソースをリンクする。ポート・ボーレート等は使用する環境に合わせて適宜追加・修正する。ライブラリは必要に合わせて追加する。sampleなお、コンパイルや実行にあたってI/Fやカーネル・ディストリビューションに依存するのがLinuxですので、そのまま使用できない場合は適宜ソースを修正下さい。Libraryではシリアル通信を直接意識するコードを記述せずに、対象IDのデバイスのコントロールテーブルへの読み書き行うAPIを用意しています。C言語のソースにdx2lib.hをインクルードすれば、APIを使用するのに必要なプロトタイプとマクロの定義がなされます。DX2_OpenPortライブラリの内部情報を初期化すると同時に指定されたCOMポートをオープンし、DX2_SetBaudrateを使用して通信速度を設定した後、ユニークなTDeviceIDを返す。以後はこのTDeviceIDを使用して各APIを使用する。複数のCOMポートを使用する場合は使用するポート毎にDX2_OpenPortを行い、各々のポートに対してTDeviceIDを取得しなくてはならない。Linuxにおけるボーレートの指定に関しては、DX2_SetBaudrateの解説に注意の事。*nameインターフェースが提供するCOMポート名。Windowsの場合の記述方法はこちらの情報に従う。baudインターフェースとデバイス間の通信速度[bps]。戻り値TDeviceIDオープンに成功した場合は0以外の値、失敗した場合は0を返す。9600);DX2_ClosePortDX2_OpenPortで開いたCOMポートを閉じる。DX2_ClosePortが実行された以後はTDeviceIDは使用できなくなる。dvidDX2_OpenPortで開いた際のTDeviceID。戻り値boolクローズに成功した場合はtrue、失敗した場合はfalseを返す。(dev);}DX2_SetBaudrate既にオープンされているTDeviceIDの通信速度の変更を行う。実行すると強制的に受信バッファがクリアされる。4000000)であればtcsetattrを使用して処理するが、これらの値に当てはまらない場合はioctrlを使用する。その際I/Fがこれらのボーレートに対応していなかったり、ioctrlをサポートしない場合、本APIは失敗する。dvidDX2_OpenPortで開いた際のTDeviceID。baud新しい通信速度[bps]。戻り値bool通信速度の変更が成功するとtrue、失敗するとfalseを返す。(dev);}DX2_Active指定されたTDeviceIDのポートが開かれており、使用可能であるかを確認する。USB接続等によりインターフェース自体が取り外し可能な場合に、実際に使用可能であるかを判断するために使用するが、状況によっては正確に判断できない場合もある。dvidDX2_OpenPortで開いた際のTDeviceID。戻り値bool指定されたdvidが使用可能な場合はtrue、使用不可の場合はfalseを返す。(dev);}DX2_SetTimeOutOffsetI/FやOSの都合で生じるであろうタイムラグを予め設定する。内部で算出している受信タイムアウト時間とタイムアウトオフセット時間を加算した時間を超えた場合に、タイムアウトエラーとして処理する。デフォルトは20[ms]。dvidDX2_OpenPortで開いた際のTDeviceID。offsettimeタイムアウトオフセット時間[ms]戻り値bool指定されたdvidが使用可能な場合はtrue、使用不可の場合はfalseを返す。DX2_PingPINGインストラクションを使用して対象IDからの応答を確認する。dvidDX2_OpenPortで開いた際のTDeviceID。*errエラーコード。戻り値bool正常な応答が得られた場合はtrue、それ以外はfalseを返す。IDを指定して不特定の対象の応答を確認する。IDを指定した場合の応答時間はデバイスによって差があるため、異なるデバイスが混在している環境では正確な情報を取得できない場合がある。dvidDX2_OpenPortで開いた際のTDeviceID。*num検索する最大数及び検索で見つかったデバイス数の保存先。*AlarmStatus検索で見つかったデバイス情報の保存先。少なくともnumで指定したサイズ分の領域を確保しておく必要がある。*errエラーコード。戻り値bool1台以上のデバイスからの応答が得られた場合はtrue、それ以外はfalseを返す。(dev);}DX2_ResetRESETインストラクションを使用して対象IDを出荷時の状態に初期化する。dvidDX2_OpenPortで開いた際のTDeviceID。*errエラーコード。戻り値bool正常な応答が得られた場合はtrue、それ以外はfalseを返す。(dev);}DX2_RebootREBOOTインストラクションを使用して対象IDを再起動する。dvidDX2_OpenPortで開いた際のTDeviceID。*errエラーコード。戻り値bool正常な応答が得られた場合はtrue、それ以外はfalseを返す。(dev);}DX2_ReadByteData対象IDのコントロールテーブルから1バイトのデータを読み出す。dvidDX2_OpenPortで開いた際のTDeviceID。adrコントロールテーブルのアドレス。*rdata読み出した値の保存先。*errエラーコード。戻り値bool正常な応答が得られた場合はtrue、それ以外はfalseを返す。(dev);}DX2_WriteByteData対象IDのコントロールテーブルへ1バイトのデータを書き込む。dvidDX2_OpenPortで開いた際のTDeviceID。adrコントロールテーブルのアドレス。*errエラーコード。戻り値bool正常な応答が得られた場合はtrue、それ以外はfalseを返す。IDを指定した場合は応答待ちを行わない。(dev);}DX2_ReadWordData対象IDのコントロールテーブルから1ワード(2バイト)のデータを読み出す。dvidDX2_OpenPortで開いた際のTDeviceID。adrコントロールテーブルのアドレス。*rdata読み出した値の保存先。*errエラーコード。戻り値bool正常な応答が得られた場合はtrue、それ以外はfalseを返す。(dev);}DX2_WriteWordData対象IDのコントロールテーブルへ1ワード(2バイト)のデータを書き込む。dvidDX2_OpenPortで開いた際のTDeviceID。adrコントロールテーブルのアドレス。*errcodeエラーコード。戻り値bool正常な応答が得られた場合はtrue、それ以外はfalseを返す。IDを指定した場合は応答待ちを行わない。(dev);}DX2_ReadLongData対象IDのコントロールテーブルからロング(4バイト)のデータを読み出す。dvidDX2_OpenPortで開いた際のTDeviceID。adrコントロールテーブルのアドレス。*rdata読み出した値の保存先。*errエラーコード。戻り値bool正常な応答が得られた場合はtrue、それ以外はfalseを返す。(dev);}DX2_WriteLongData対象IDのコントロールテーブルへロング(4バイト)のデータを書き込む。dvidDX2_OpenPortで開いた際のTDeviceID。adrコントロールテーブルのアドレス。*errcodeエラーコード。戻り値bool正常な応答が得られた場合はtrue、それ以外はfalseを返す。IDを指定した場合は応答待ちを行わない。(dev);}DX2_ReadBlockData対象IDのコントロールテーブルから指定サイズのデータを読み出す。dvidDX2_OpenPortで開いた際のTDeviceID。adrコントロールテーブルのアドレス。*rdata読み出したデータの保存先。len読み出すデータのサイズ。*errエラーコード。戻り値bool正常な応答が得られた場合はtrue、それ以外はfalseを返す。(dev);}DX2_WriteBlockData対象IDのコントロールテーブルへ指定サイズのデータを書き込む。dvidDX2_OpenPortで開いた際のTDeviceID。adrコントロールテーブルのアドレス。*dat書き込むデータの保存先。len書き込むデータのサイズ。*errエラーコード。戻り値bool正常な応答が得られた場合はtrue、それ以外はfalseを返す。IDを指定した場合は応答待ちを行わない。READインストラクションを使用して複数IDからブロック読み出しを行う。読み出されるデータの1軸分の構造は[ID(8bit)][ERR(16bit)][DATA1(8bit)]...[D​ATAn(8bit)]となり、複数軸の場合は本データが軸数分だけスタックする。dvidDX2_OpenPortで開いた際のTDeviceID。*paramパラメータデータを指定。*num読み出すデバイス数を指定。dat取得データの保存先。num)バイト以上を確保の事。*errエラーコード。戻り値bool指定したデバイス数が応答したらtrue、それ以外はfalseを返す。(dev);};DX2_WriteSyncDataSYNCインストラクションを使用して複数IDへブロック書き込みを行う。書き込まれるデータの構成はユーザに委ねられる。dvidDX2_OpenPortで開いた際のTDeviceID。*dat書き込むパラメータの保存先。sizeパラメータのサイズ。*errエラーコード。戻り値boolインターフェースより送信が行われた場合はtrue、それ以外はfalseを返す。READインストラクションを使用して複数IDの指定アドレス・サイズでブロック読み出しを行う。読み出されるデータの1軸分の構造は[SIZE(16bit)][ID(8bit)][ERR(16bit)][DATA​1(8bit)]...[DATAn(8bit)]とし、DATAの前にSIZE(SIZEを含む1軸分のデータ長)・ID・ERRの計5バイトが付与される。複数軸の場合はSIZEから始まる本データが軸数分連続して取得される。dvidDX2_OpenPortで開いた際のTDeviceID。*paramパラメータデータを指定。*num読み出すデバイス数を指定。dat取得データの保存先。十分な領域を確保の事。TBulkReadResultを介して解析すると便利。*errエラーコード。戻り値bool指定したデバイス数が応答したらtrue、それ以外はfalseを返す。(dev);};DX2_WriteBulkDataBULKインストラクションを使用して複数の個別なID・アドレス・データサイズで書き込みを行う。dvidDX2_OpenPortで開いた際のTDeviceID。*dat書き込むパラメータの保存先。sizeパラメータのサイズ。*errエラーコード。戻り値boolインターフェースより送信が行われた場合はtrue、それ以外はfalseを返す。(dev);};DX2_TxPacket任意のインストラクションパケットを送信する。dvidDX2_OpenPortで開いた際のTDeviceID。inst使用するインストラクション。*param送信するパラメータの保存先。len送信するパラメータのサイズ。*errエラーコード。戻り値インターフェースより送信が行われた場合はtrue、それ以外はfalseを返す。(dev);};DX2_RxPacketステータスパケットを受信する。基本的にDX2_TxPacketとペアで使用する。ステータスパケットが得られない状況で使用するとタイムアウトするまで返らない。本APIはDX2_SetTimeOutOffsetで設定されたオフセット値は使用せず、引数で指定された受信タイムアウトのみが適用される。dvidDX2_OpenPortで開いた際のTDeviceID。*rdata受信バッファ。ステータスパケットを受信するのに十分なサイズを確保しておく必要がある。readsizerdataのサイズ。*rlen実際に受信されたステータスパケットのサイズ。timeout受信タイムアウト[ms]。*errエラーコード。受信成功時はtrue、それ以外はfalseを返す。(dev);};DX2LIBのオリジナルな定義TDeviceID(uint32_t|uint64_t)DX2_OpenPortにて自動的に生成されるユニークな値。TInstruction(uint8_t)DX2_TxPacketにてインストラクションパケットを送信する場合に使用される。使用可能なマクロは以下の通り。Status;}idとTErrorCodeを対にした構造体でアライメントは1バイト。DX2_Ping2で使用される。idsをまとめた構造体でアライメントは1バイト。DX2_ReadSyncDataで使用される。lengthをまとめた構造体でアライメントは1バイト。DX2_ReadBulkDataで使用される。datをまとめた構造体でアライメントは1バイト。DX2_ReadBulkDataで読み出されたデータのアクセスに使用される。TErrorCode(uint16_t)API内で検出される16ビットのエラーコード。上位8ビットはAPI内部で検出したエラー、下位8ビットはステータスパケットに含まれるエラーフラグが割り当てられている。パケットの処理や数値範囲に関するエラー543210追加API使用するDynamixelの情報を予めライブラリ内に保持させておき、位置や角速度等の指令およびフィードバック値は物理値を扱い、各々の区別はIDのみで行うAPIです。これAPIによりDynamixelのモデルごとに異なるコントロールテーブルや煩雑な運転方法の違いを意識する事なく、少ないコードで目的の挙動を実現できます。従来通りコントロールテーブルへの直接アクセスを制限するものではありませんが、その場合は本機能が想定する状況と一致しなくなる事があります。※以下の使用例はDX2LIBを前提としています。Dynamixelが持つ固有の情報を予め記憶させておくことで、それ以後の操作はIDのみを指定し、どのモデルであっても使用頻度が高いアイテムはコントロールテーブルを意識する事無く同じAPIで同様の動作ができます。DXL_ScanDevicesID0~252のデバイスを順次検索し、サポートするDynamixelであればライブラリ内のリストに登録する。リストに登録されていないデバイスのIDに対しては存在しないものとして通信を行わないため、DXL_ScanDevicesかDXL_GetModelInfoを用いて予めリストに登録しておく必要がある。dvidDX?_OpenPortで開いた際のTDeviceID。*ids見つかったデバイスのID一覧を必要に応じて取得する配列の保存先。最小でも253バイトを確保すること。戻り値int見つかったデバイスの数。}}DXL_GetModelInfo指定IDのモデル情報の取得し、サポートするDynamixelであればライブラリ内のリストに登録する。リストに登録されていないデバイスのIDに対しては存在しないものとして通信を行わないため、DXL_ScanDevicesかDXL_GetModelInfoを用いて予めリストに登録しておく必要がある。dvidDX?_OpenPortで開いた際のTDeviceID。戻り値PDXL_ModelInfo登録されたIDと一致するTDXL_ModelInfoのアドレス。(dev);}DXL_PrintDevicesListライブラリ内のリストに登録された全てのデバイスの情報をコンソールに出力する。ID・モデル名・モデル番号の順に出力される。...)printf等の書式化文字列出力ルーチンのポインタ。戻り値bool処理が正常終了したらtrue、それ以外はfalseを返す。(dev);}DXL_InitDevicesListライブラリ内に保持されたデバイスのリストをクリアする。(void);エラーDXL_GetErrorCode追加APIの処理の中で最後に取得したエラーを返す。本API自体は通信を行わない。dvidDX?_OpenPortで開いた際のTDeviceID。戻り値TErrorCodeエラーコード。DXL_GetHWErrorCode対象IDのコントロールテーブルにハードウェアエラーが備わっている場合にのみ取得する。dvidDX?_OpenPortで開いた際のTDeviceID。*hwerr取得されたハードウェアエラーの保存先。戻り値bool処理が正常終了したらtrue、それ以外はfalseを返す。X・PRO+シリーズが最も沢山の動作モードをサポートしています。概ねこの動作モードによって動作の大別が行われるため、他のモデルにおいてもこの動作モードの番号を踏襲することとします。DXL_SetOperatingMode対象IDの動作モードを変更する。指定されたモードと現在のモードが異なる場合にのみトルクをOFFにし動作モードを更新する。対称IDがライブラリ内のリストに登録されている必要がある。dvidDX?_OpenPortで開いた際のTDeviceID。plusシリーズではmodeの値をそのまま適用、それ以外では近似した動作モードを適用。Control戻り値bool処理が正常終了したらtrue、それ以外はfalseを返す。(dev);}DXL_SetOperatingModesEquival複数IDの動作モードを一括変更する。指定されたモードと現在のモードが異なる場合にのみトルクをOFFにし動作モードを更新する。ライブラリ内のリストに登録されていないIDは無視される。dvidDX?_OpenPortで開いた際のTDeviceID。*ids対象とするID一覧を保持する配列の保存先。Xシリーズの動作モードを想定し、それに完全対応しないデバイスに対しては近似値もしくは失敗を返す。Control戻り値bool処理が正常終了したらtrue、それ以外はfalseを返す。(dev);}DXL_GetOperatingMode対象IDの動作モードを取得する。dvidDX?_OpenPortで開いた際のTDeviceID。*mode取得した動作モードの保存先。戻り値bool処理が正常終了したらtrue、それ以外はfalseを返す。LEDDynamixelに備わっているLEDは全てのモデルにおいてコントロールテーブル上の同じアドレスに割り当てがなされている訳では無いため、デバッグに有用なLEDを一つのAPIで使用できます。DXL_SetLED対象IDのLEDを明滅させる。dvidDX?_OpenPortで開いた際のTDeviceID。entrueで点灯、falseで消灯。戻り値bool処理が正常終了したらtrue、それ以外はfalseを返す。制御ON/OFFコントロールテーブル上でトルクイネーブルと称しているアイテムは、LED同様にモデルによってアドレスが異なります。制御の開始と停止を司るため、こちらも同じAPIで運用できます。DXL_SetTorqueEnable対象IDの制御を開始ないし停止させる。プロトコルV2のDynamixelは明示的に制御を開始しない限りモータの制御を行わない。dvidDX?_OpenPortで開いた際のTDeviceID。entrueで開始、falseで停止。戻り値bool処理が正常終了したらtrue、それ以外はfalseを返す。(dev);}DXL_SetTorqueEnables複数IDの制御を個別に開始ないし停止させる。ライブラリ内のリストに登録されていないIDは無視される。プロトコルV2のDynamixelは明示的に制御を開始しない限りモータの制御を行わない。dvidDX?_OpenPortで開いた際のTDeviceID。*ids対象とするID一覧を保持する配列の保存先。*ensidsで指定されたID順にtrueで開始、falseで停止を保持する配列の保存先。戻り値bool処理が正常終了したらtrue、それ以外はfalseを返す。DXL_SetTorqueEnablesEquival複数IDの制御を一括で開始ないし停止させる。ライブラリ内のリストに登録されていないIDは無視される。プロトコルV2のDynamixelは明示的に制御を開始しない限りモータの制御を行わない。dvidDX?_OpenPortで開いた際のTDeviceID。*ids対象とするID一覧を保持する配列の保存先。entrueで開始、falseで停止。戻り値bool処理が正常終了したらtrue、それ以外はfalseを返す。(dev);}DXL_GetTorqueEnable対象IDのトルクイネーブル状態を取得する。dvidDX?_OpenPortで開いた際のTDeviceID。*en取得したトルクイネーブルの保存先。戻り値bool処理が正常終了したらtrue、それ以外はfalseを返す。DXL_GetTorqueEnables複数IDのトルクイネーブル状態を取得する。ライブラリ内のリストに登録されていないIDは無視される。dvidDX?_OpenPortで開いた際のTDeviceID。*ids対象とするID一覧を保持する配列の保存先。*enidsで指定されたID順に取得したトルクイネーブルを保持する配列の保存先。戻り値bool処理が正常終了したらtrue、それ以外はfalseを返す。角度DynamixelのコントロールテーブルではPositionと称しているユニークな単位系を持つアイテムは、モデルによって動作角度や分解能が大きく異なります。異なるモデルを混在して運用する場合は非常に不便なため、物理値の角度[deg]を用いてアクセスします。DXL_SetGoalAngle指定IDへ目標角度を指令する。Controlである事と、プロトコルV2のDynamixelは明示的に制御を開始しない限りモータの制御を行わない。dvidDX?_OpenPortで開いた際のTDeviceID。angle目標角度[deg]。中立位置を0[deg]とする。戻り値bool処理が正常終了したらtrue、それ以外はfalseを返す。(dev);}DXL_SetGoalAngles複数IDへ個別の目標角度を指令する。ライブラリ内のリストに登録されていないIDは無視される。Controlである事と、プロトコルV2のDynamixelは明示的に制御を開始しない限りモータの制御を行わない。dvidDX?_OpenPortで開いた際のTDeviceID。*ids対象とするID一覧を保持する配列の保存先。*anglesidsで指定されたID順に目標角度[deg]を保持する配列の保存先。戻り値bool処理が正常終了したらtrue、それ以外はfalseを返す。(dev);}DXL_GetPresentAngle対象IDの現在角度を取得する。dvidDX?_OpenPortで開いた際のTDeviceID。*angle取得した現在角度[deg]の保存先。戻り値bool処理が正常終了したらtrue、それ以外はfalseを返す。(dev);}DXL_GetPresentAngles複数IDの現在角度を取得する。ライブラリ内のリストに登録されていないIDは無視される。dvidDX?_OpenPortで開いた際のTDeviceID。*ids対象とするID一覧を保持する配列の保存先。*anglesidsで指定されたID順に取得した現在角度[deg]を保持する配列の保存先。戻り値bool処理が正常終了したらtrue、それ以外はfalseを返す。制御をOFFにする事で制御が停止するのと合わせて脱力状態になります。それでは現在の角度を保持しつつ止めることができないため、指令されたタイミングの角度を取得してその値をそのまま角度指令し直す機能を設けています。DXL_StandStillAngle指定IDを現在角度で停止させる。Controlである事。dvidDX?_OpenPortで開いた際のTDeviceID。戻り値bool処理が正常終了したらtrue、それ以外はfalseを返す。DXL_StandStillAngles複数IDを現在角度で停止させる。ライブラリ内のリストに登録されていないIDは無視される。Controlである事。dvidDX?_OpenPortで開いた際のTDeviceID。*ids対象とするID一覧を保持する配列の保存先。戻り値bool処理が正常終了したらtrue、それ以外はfalseを返す。角速度DynamixelのコントロールテーブルではVelocityと称しているユニークな単位系を持つアイテムは、モデルによってレンジや分解能が異なります。異なるモデルを混在して運用する場合は非常に不便なため、物理値の角速度[deg/sec]を用いてアクセスします。DXL_SetGoalVelocity指定IDへ目標角速度を指令する。Controlである事と、プロトコルV2のDynamixelは明示的に制御を開始しない限りモータの制御を行わない。dvidDX?_OpenPortで開いた際のTDeviceID。velocity目標角速度[deg/s]。戻り値bool処理が正常終了したらtrue、それ以外はfalseを返す。(dev);}DXL_SetGoalVelocities複数IDへ個別の目標角速度を指令する。ライブラリ内のリストに登録されていないIDは無視される。Controlである事と、プロトコルV2のDynamixelは明示的に制御を開始しない限りモータの制御を行わない。dvidDX?_OpenPortで開いた際のTDeviceID。*ids対象とするID一覧を保持する配列の保存先。*velocitiesidsで指定されたID順に目標角速度[deg/s]を保持する配列の保存先。戻り値bool処理が正常終了したらtrue、それ以外はfalseを返す。DXL_GetPresentVelocity対象IDの現在角速度を取得する。dvidDX?_OpenPortで開いた際のTDeviceID。*velocity取得した現在角速度[deg/s]の保存先。戻り値bool処理が正常終了したらtrue、それ以外はfalseを返す。DXL_GetPresentVelocities複数IDの現在角速度を取得する。ライブラリ内のリストに登録されていないIDは無視される。dvidDX?_OpenPortで開いた際のTDeviceID。*ids対象とするID一覧を保持する配列の保存先。*velocitiesidsで指定されたID順に取得した現在角速度[deg/s]を保持する配列の保存先。戻り値bool処理が正常終了したらtrue、それ以外はfalseを返す。角度と合わせて角速度を同時に指令することで、指定角度へゆっくり動かすと行った動作を行わせる事ができます。Dynamixelの角速度制御の分解能はさほど大きくないため、角速度が低い場合は誤差が大きくなります。DXL_SetGoalAngleAndVelocity指定IDへ目標角度と目標角速度を指令する。Controlである事と、プロトコルV2のDynamixelは明示的に制御を開始しない限りモータの制御を行わない。dvidDX?_OpenPortで開いた際のTDeviceID。angle目標角度[deg]。velocity目標角速度[deg/s]。戻り値bool処理が正常終了したらtrue、それ以外はfalseを返す。(dev);}DXL_SetGoalAnglesAndVelocities複数IDへ個別の目標角度と目標角速度を指令する。ライブラリ内のリストに登録されていないIDは無視される。Controlである事と、プロトコルV2のDynamixelは明示的に制御を開始しない限りモータの制御を行わない。dvidDX?_OpenPortで開いた際のTDeviceID。*ids対象とするID一覧を保持する配列の保存先。anglevelocityidsで指定されたID順に目標角度[deg]と目標角速度[deg/s]を保持する構造体の配列の保存先。戻り値bool処理が正常終了したらtrue、それ以外はfalseを返す。角度と合わせて時間を同時に指令します。ライブラリ内では時間を角速度(=(目標角度-現在角度)/移動時間)に変換して指令します。Dynamixelの角速度制御の分解能はさほど大きくないため、移動速度が長い場合は誤差が大きくなります。DXL_SetGoalAngleAndTime指定IDへ目標角度と現在角度から目標角度までの移動時間を指令する。Controlである事と、プロトコルV2のDynamixelは明示的に制御を開始しない限りモータの制御を行わない。dvidDX?_OpenPortで開いた際のTDeviceID。angle目標角度[deg]。sec移動時間[sec]。戻り値bool処理が正常終了したらtrue、それ以外はfalseを返す。(dev);}DXL_SetGoalAnglesAndTime複数IDへ個別の目標角度と現在角度から目標角度までの移動時間を指令する。ライブラリ内のリストに登録されていないIDは無視される。Controlである事と、プロトコルV2のDynamixelは明示的に制御を開始しない限りモータの制御を行わない。dvidDX?_OpenPortで開いた際のTDeviceID。*ids対象とするID一覧を保持する配列の保存先。*anglesidsで指定されたID順に目標角度[deg]を保持する配列の保存先。sec目標移動時間[sec]。戻り値bool処理が正常終了したらtrue、それ以外はfalseを返す。電流XシリーズないしPROシリーズのみで使用でき、モデルが異なっていてもできる限り同じ運用ができるよう物理値の電流[mA]を用いてアクセスします。DXL_SetGoalCurrent指定IDへ目標電流を指令する。プロトコルV2のDynamixelは明示的に制御を開始しない限りモータの制御を行わない。dvidDX?_OpenPortで開いた際のTDeviceID。current目標電流[mA]。戻り値bool処理が正常終了したらtrue、それ以外はfalseを返す。(dev);}DXL_SetGoalCurrents複数IDへ個別の目標電流を指令する。ライブラリ内のリストに登録されていないIDは無視される。プロトコルV2のDynamixelは明示的に制御を開始しない限りモータの制御を行わない。dvidDX?_OpenPortで開いた際のTDeviceID。*ids対象とするID一覧を保持する配列の保存先。*currentsidsで指定されたID順に目標電流[mA]を保持する配列の保存先。戻り値bool処理が正常終了したらtrue、それ以外はfalseを返す。DXL_GetPresentCurrent指定IDの現在電流を取得する。dvidDX?_OpenPortで開いた際のTDeviceID。*current取得した現在電流[mA]の保存先。戻り値bool処理が正常終了したらtrue、それ以外はfalseを返す。DXL_GetPresentCurrents複数IDの現在電流を取得する。ライブラリ内のリストに登録されていないIDは無視される。dvidDX?_OpenPortで開いた際のTDeviceID。*ids対象とするID一覧を保持する配列の保存先。*currentsidsで指定されたID順に取得した現在電流[mA]を保持する配列の保存先。戻り値bool処理が正常終了したらtrue、それ以外はfalseを返す。PWM現時点でXシリーズのみで使用でき、モデルが異なっていてもできる限り同じ運用ができるよう物理値のデューティー比[%]を用いてアクセスします。DXL_SetGoalPWM指定IDへ目標PWMを指令する。Controlである事と、プロトコルV2のDynamixelは明示的に制御を開始しない限りモータの制御を行わない。dvidDX?_OpenPortで開いた際のTDeviceID。pwm目標PWM[%]。戻り値bool処理が正常終了したらtrue、それ以外はfalseを返す。(dev);}DXL_SetGoalPWMs複数IDへ個別の目標PWMを指令する。ライブラリ内のリストに登録されていないIDは無視される。Controlである事と、プロトコルV2のDynamixelは明示的に制御を開始しない限りモータの制御を行わない。dvidDX?_OpenPortで開いた際のTDeviceID。*ids対象とするID一覧を保持する配列の保存先。*pwmsidsで指定されたID順に目標PWM[%]を保持する配列の保存先。戻り値bool処理が正常終了したらtrue、それ以外はfalseを返す。DXL_GetPresentPWM指定IDの現在PWMを取得する。dvidDX?_OpenPortで開いた際のTDeviceID。*pwm取得した現在PWM[%]の保存先。戻り値bool処理が正常終了したらtrue、それ以外はfalseを返す。DXL_GetPresentPWMs複数IDの現在PWMを取得する。ライブラリ内のリストに登録されていないIDは無視される。dvidDX?_OpenPortで開いた際のTDeviceID。*ids対象とするID一覧を保持する配列の保存先。*pwmsidsで指定されたID順に取得した現在PWM[%]を保持する配列の保存先。devtX}デバイスのグループ分け。Dynamixelはこのグループで概ねの機能が大別される。[%]}Dynamixel固有の情報(モデル名や本APIで使用する各制御値の物理値変換係数等)をまとめた構造体でアライメントは1バイト。velocity;}角度と各速度のペア。