RecentHistoryDXL_intuitiveknowledge:DXL_intuitive使用する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;}角度と各速度のペア。