DXLIBないしDX2LIBのAPIはデバイスのコントロールテーブルにアクセスすることを目的としているため、Dynamixelシリーズの各モデルの差異はユーザプログラムに委ねられています。~ ここで紹介するAPIは具体的なアドレスやコントロールテーブル上のアイテムが扱う数値範囲といったものを一切排除し、Dynamixelの基本的な操作に注力できるように物理値を元に制御することを目的としています。IDとボーレートさえ明確になっていればモデルの差異はAPI内でほとんど吸収しますので、使用するモデルが変わったとしても大抵の場合プログラムの改変すら必要無くなります。 ***DXL_ScanDevices [#o2bbf83a] 全IDのレンジでデバイスをスキャンし内部のテーブルに反映する。プレフィクスにDXL_SetないしDXL_Getが付与される関数を使用するには内部のテーブルを完成させておく必要があるが、本APIかDXL_GetModelInfoを使用する事でテーブルが更新される。~ なお全IDをスキャンし終えるまでには時間がかかるため、IDがわかっている場合はDXL_GetModelInfoの使用を推奨する。 int DXL_ScanDevices(TDeviceID dvid); ***DXL_GetModelInfo [#j50f584f] 指定IDのデバイスをスキャンし内部のテーブルに反映し、その情報を取得する。プレフィクスにDXL_SetないしDXL_Getが付与される関数を使用するには内部のテーブルを完成させておく必要があるが、本APIかDXL_ScanDevicesを使用する事でテーブルが更新される。 TDXL_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] トルクイネーブルを指令する。モデルによっては角度指令をすると自動的にトルクイネーブルが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)を指令する。0degは動作範囲の中央とする。 bool DXL_SetGoalAngle(TDeviceID dvid, uint8_t id, double angle); ***DXL_SetGoalAngles [#h7eadf0c] 複数軸に対して位置決め制御時の角度(deg)を指令する。 bool DXL_SetGoalAngles(TDeviceID dvid, const uint8_t *ids, double *angles, int num); ***DXL_GetPresentAngle [#o12b1958] 現在の角度(deg)を取得する。0degは動作範囲の中央とする。 bool DXL_GetPresentAngle(TDeviceID dvid, uint8_t id, double *angle); ***DXL_GetPresentAngles [#b48cfc6a] 複数軸の現在の角度(deg)を取得する。0degは動作範囲の中央とする。なお、制御モードやモデルによって取得される数値範囲に差がある。 bool DXL_GetPresentAngles(TDeviceID dvid, const uint8_t *ids, double *angles, int num); ***DXL_SetGoalRPM [#xe33092b] 速度制御時の回転速度(rpm)を指令する。モデルによっては位置決め制御時の回転速度制限を司るアイテムが同じ場合があるので注意が必要。 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] 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] 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] 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] 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);
(This host) = https://www.besttechnology.co.jp