1: 2017-12-17 (日) 21:42:25 takaboo | 2: 2017-12-17 (日) 22:23:31 takaboo | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | DXLIBないしDX2LIBのAPIはデバイスのコントロールテーブルにアクセスすることを目的としているため、Dynamixelシリーズの各モデルの差異はユーザプログラムに委ねられています。~ | ||
+ | ここで紹介するAPIは具体的なアドレスやコントロールテーブル上のアイテムが扱う数値範囲といったものを一切排除し、Dynamixelの基本的な操作に注力できるように物理値を元に制御することを目的としています。IDとボーレートさえ明確になっていればモデルの差異はAPI内でほとんど吸収しますので、使用するモデルが変わったとしても大抵の場合プログラムの改変すら必要無くなります。 | ||
+ | |||
***DXL_ScanDevices [#o2bbf83a] | ***DXL_ScanDevices [#o2bbf83a] | ||
全IDのレンジでデバイスをスキャンし内部のテーブルに反映する。プレフィクスにDXL_SetないしDXL_Getが付与される関数を使用するには内部のテーブルを完成させておく必要があるが、本APIかDXL_GetModelInfoを使用する事でテーブルが更新される。~ | 全IDのレンジでデバイスをスキャンし内部のテーブルに反映する。プレフィクスにDXL_SetないしDXL_Getが付与される関数を使用するには内部のテーブルを完成させておく必要があるが、本APIかDXL_GetModelInfoを使用する事でテーブルが更新される。~ | ||
- | なお全IDをスキャンし終えるまでには時間がかかる。 | + | なお全IDをスキャンし終えるまでには時間がかかるため、IDがわかっている場合はDXL_GetModelInfoの使用を推奨する。 |
int DXL_ScanDevices(TDeviceID dvid); | int DXL_ScanDevices(TDeviceID dvid); | ||
Line 9: | Line 12: | ||
***DXL_PrintDevicesList [#s3fd9115] | ***DXL_PrintDevicesList [#s3fd9115] | ||
- | 内部のテーブルに反映された存在するデバイスの全リストをコンソールに出力する。 | + | 内部のテーブルに反映された存在するデバイスの全リストをコンソールに出力する。デバッグ用。 |
bool DXL_PrintDevicesList(int *pf(const char *, ...)); | bool DXL_PrintDevicesList(int *pf(const char *, ...)); | ||
***DXL_GetErrorCode [#l99bda3b] | ***DXL_GetErrorCode [#l99bda3b] | ||
+ | Xシリーズなどのコントロールテーブル上にハードウェアエラーの情報がある場合に限りその値を取得する。 | ||
TErrorCode DXL_GetErrorCode(TDeviceID dvid, uint8_t id); | TErrorCode DXL_GetErrorCode(TDeviceID dvid, uint8_t id); | ||
+ | |||
***DXL_SetTorqueEnable [#qcf1eee1] | ***DXL_SetTorqueEnable [#qcf1eee1] | ||
+ | トルクイネーブルを指令する。モデルによっては角度指令をすると自動的にトルクイネーブルが1になるものもある。 | ||
bool DXL_SetTorqueEnable(TDeviceID dvid, uint8_t id, bool en); | bool DXL_SetTorqueEnable(TDeviceID dvid, uint8_t id, bool en); | ||
+ | |||
***DXL_SetLED [#kfc7a7c3] | ***DXL_SetLED [#kfc7a7c3] | ||
+ | LEDの明滅を指令する。輝度や色の制御は対象外。 | ||
bool DXL_SetLED(TDeviceID dvid, uint8_t id, bool en); | bool DXL_SetLED(TDeviceID dvid, uint8_t id, bool en); | ||
+ | |||
***DXL_SetGoalAngle [#zde96bae] | ***DXL_SetGoalAngle [#zde96bae] | ||
+ | 位置決め制御時の角度(deg)を指令する。0degは動作範囲の中央とする。 | ||
bool DXL_SetGoalAngle(TDeviceID dvid, uint8_t id, double angle); | bool DXL_SetGoalAngle(TDeviceID dvid, uint8_t id, double angle); | ||
+ | |||
***DXL_SetGoalAngles [#h7eadf0c] | ***DXL_SetGoalAngles [#h7eadf0c] | ||
+ | 複数軸に対して位置決め制御時の角度(deg)を指令する。 | ||
bool DXL_SetGoalAngles(TDeviceID dvid, const uint8_t *ids, double *angles, int num); | bool DXL_SetGoalAngles(TDeviceID dvid, const uint8_t *ids, double *angles, int num); | ||
+ | |||
***DXL_GetPresentAngle [#o12b1958] | ***DXL_GetPresentAngle [#o12b1958] | ||
+ | 現在の角度(deg)を取得する。0degは動作範囲の中央とする。 | ||
bool DXL_GetPresentAngle(TDeviceID dvid, uint8_t id, double *angle); | bool DXL_GetPresentAngle(TDeviceID dvid, uint8_t id, double *angle); | ||
+ | |||
***DXL_GetPresentAngles [#b48cfc6a] | ***DXL_GetPresentAngles [#b48cfc6a] | ||
+ | 複数軸の現在の角度(deg)を取得する。0degは動作範囲の中央とする。なお、制御モードやモデルによって取得される数値範囲に差がある。 | ||
bool DXL_GetPresentAngles(TDeviceID dvid, const uint8_t *ids, double *angles, int num); | bool DXL_GetPresentAngles(TDeviceID dvid, const uint8_t *ids, double *angles, int num); | ||
+ | |||
***DXL_SetGoalRPM [#xe33092b] | ***DXL_SetGoalRPM [#xe33092b] | ||
+ | 速度制御時の回転速度(rpm)を指令する。モデルによっては位置決め制御時の回転速度制限を司るアイテムが同じ場合があるので注意が必要。 | ||
bool DXL_SetGoalRPM(TDeviceID dvid, uint8_t id, double rpm); | bool DXL_SetGoalRPM(TDeviceID dvid, uint8_t id, double rpm); | ||
+ | |||
***DXL_SetGoalRPMs [#td88fd42] | ***DXL_SetGoalRPMs [#td88fd42] | ||
+ | 複数軸に対して速度制御時の回転速度(rpm)を指令する。 | ||
bool DXL_SetGoalRPMs(TDeviceID dvid, const uint8_t *ids, double *rpms, int num); | bool DXL_SetGoalRPMs(TDeviceID dvid, const uint8_t *ids, double *rpms, int num); | ||
+ | |||
***DXL_GetPresentRPM [#ibd89474] | ***DXL_GetPresentRPM [#ibd89474] | ||
bool DXL_GetPresentRPM(TDeviceID dvid, uint8_t id, double *rpm); | bool DXL_GetPresentRPM(TDeviceID dvid, uint8_t id, double *rpm); |