DXLIBないしDX2LIBのAPIはデバイスのコントロールテーブルにアクセスすることを目的としているため、Dynamixelシリーズの各モデルの差異はユーザプログラムに委ねられています。~ ここで紹介するAPIは具体的なアドレスやコントロールテーブル上のアイテムが扱う数値範囲といったものを一切排除し、Dynamixelの基本的な操作に注力できるように物理値を元に制御することを目的としています。IDとボーレートさえ明確になっていればモデルの差異はAPI内でほとんど吸収しますので、使用するモデルが変わったとしても大抵の場合プログラムの改変すら必要無くなります。 ***DXL_ScanDevices [#o2bbf83a] 全IDのレンジでデバイスをスキャンし、成功したIDのみライブラリ内のテーブルにその情報が反映され、以後プレフィクスにDXL_SetないしDXL_Getが付与されるAPIが使用できるようになる。~ ライブラリ内のテーブルが更新されないまま存在しているIDに対してDXL_Set~やDXL_Get~のAPIを使用すると、何の処理も行わずに即時復帰する。~ また全IDをスキャンし終えるまでには時間がかかるため、IDが明確にわかっている場合はDXL_GetModelInfoの使用を推奨する。 int DXL_ScanDevices(TDeviceID dvid); ***DXL_GetModelInfo [#j50f584f] 指定IDのデバイス情報の読み出しに成功するとライブラリ内のテーブルにその情報が反映され、以後プレフィクスにDXL_SetないしDXL_Getが付与されるAPIが使用できるようになる。~ ライブラリ内のテーブルが更新されないまま存在しているIDに対してDXL_Set~やDXL_Get~のAPIを使用すると、何の処理も行わずに即時復帰する。 PDXL_ModelInfo DXL_GetModelInfo(TDeviceID dvid, uint8_t id); ***DXL_PrintDevicesList [#s3fd9115] 内部のテーブルに反映された存在するデバイスの全リストをコンソールに出力する。デバッグ用。 bool DXL_PrintDevicesList(int *pf(const char *, ...)); ***DXL_GetErrorCode [#l99bda3b] Xシリーズなどのコントロールテーブル上にハードウェアエラーの情報がある場合に限りその値を取得する。 TErrorCode DXL_GetErrorCode(TDeviceID dvid, uint8_t id); ***DXL_SetTorqueEnable [#qcf1eee1] トルクイネーブルを指令する。~ なおプロトコルV1搭載モデルに角度や回転数を指令すると、本APIに関わらず自動的にトルクイネーブルが1になる。 bool DXL_SetTorqueEnable(TDeviceID dvid, uint8_t id, bool en); ***DXL_SetLED [#kfc7a7c3] LEDの明滅を指令する。輝度や色の制御は対象外。 bool DXL_SetLED(TDeviceID dvid, uint8_t id, bool en); ***DXL_SetGoalAngle [#zde96bae] 位置決め制御時の角度(deg)を指定IDへ指令する。~ 0degは動作範囲の中央とし、実際の精度は対象のデバイスに依存する。 bool DXL_SetGoalAngle(TDeviceID dvid, uint8_t id, double angle); ***DXL_SetGoalAngles [#h7eadf0c] 複数軸に対して位置決め制御時の角度(deg)を指令する。~ ライブラリ内ではSYNCやBULKインストラクションを使用しているため、実際のデバイスに指令が到達しているかの判断は行わない。 bool DXL_SetGoalAngles(TDeviceID dvid, const uint8_t *ids, double *angles, int num); ***DXL_GetPresentAngle [#o12b1958] 指定IDの現在の角度(deg)を取得する。~ 0degは動作範囲の中央とし、実際の精度は対象のデバイスに依存する。また、制御モードやモデルによって取得される数値範囲に差がある。 bool DXL_GetPresentAngle(TDeviceID dvid, uint8_t id, double *angle); ***DXL_GetPresentAngles [#b48cfc6a] 複数軸の現在の角度(deg)を取得する。 bool DXL_GetPresentAngles(TDeviceID dvid, const uint8_t *ids, double *angles, int num); ***DXL_SetGoalRPM [#xe33092b] 速度制御時の回転速度(rpm)を指定IDへ指令する。~ モデルによっては位置決め制御時と速度制御時のアイテが同じなため、動作モードを切り替えながら運用すると、以前指令された回転速度値を引き継いで動作してしまう場合がある。 bool DXL_SetGoalRPM(TDeviceID dvid, uint8_t id, double rpm); ***DXL_SetGoalRPMs [#td88fd42] 複数軸に対して速度制御時の回転速度(rpm)を指令する。 bool DXL_SetGoalRPMs(TDeviceID dvid, const uint8_t *ids, double *rpms, int num); ***DXL_GetPresentRPM [#ibd89474] 指定IDの現在の回転速度(rpm)を取得する。 bool DXL_GetPresentRPM(TDeviceID dvid, uint8_t id, double *rpm); ***DXL_GetPresentRPMs [#ge163793] bool DXL_GetPresentRPMs(TDeviceID dvid, const uint8_t *ids, double *rpms, int num); ***DXL_SetGoalCurrent [#q16b45cf] 電流制御時の電流(mA)を指定IDへ指令する。 bool DXL_SetGoalCurrent(TDeviceID dvid, uint8_t id, double current); ***DXL_SetGoalCurrents [#w2e089b0] bool DXL_SetGoalCurrents(TDeviceID dvid, const uint8_t *ids, double *currents, int num); ***DXL_GetPresentCurrent [#g697b4d6] 現在の電流(mA)を取得する。~ 電流計測をサポートしないデバイスの場合は負荷を取得し、仕様上のストール電流を乗じたものとなる。 bool DXL_GetPresentCurrent(TDeviceID dvid, uint8_t id, double *current); ***DXL_GetPresentCurrents [#z78b8dd7] bool DXL_GetPresentCurrents(TDeviceID dvid, const uint8_t *ids, double *current, int num); ***DXL_SetGoalAngleAndRPM [#g075e425] 位置制御時の角度(deg)と回転速度(rpm)を指定IDへ指令する。 bool DXL_SetGoalAngleAndRPM(TDeviceID dvid, uint8_t id, double angle, double rpm); ***DXL_SetGoalAngleAndRPMs [#qd594eb3] bool DXL_SetGoalAngleAndRPMs(TDeviceID dvid, PAngleRPM anglerpm, int num); ***DXL_SetOperatingMode [#r5844545] 動作モードを設定する。設定時にトルクがディスエーブルされる。また、デバイスがサポートしないモードを指定した場合はエラーとなるため、必ず戻り値を取得して可否を判断すること。 bool DXL_SetOperatingMode(TDeviceID dvid, uint8_t id, uint8_t mode); |CENTER:|LEFT:|LEFT:|c |Value|CENTER:Mode|CENTER:Description|h |0|Current Control Mode|電流制御。位置及び速度制御は行わない。| |1|Velocity Control Mode|速度制御。位置及び電流制御は行わない。| |3|Position Control Mode|位置制御。| |4|Extended Position Control Mode|拡張位置制御。マルチターンを許容。| |5|Current-Base Position Control Mode|電流制限付き位置制御。マルチターンを許容。| |16|PWM Control Mode|PWMのデューティー比を制御。|
(This host) = https://www.besttechnology.co.jp