6: 2017-12-23 (土) 11:36:42 takaboo | 7: 2017-12-25 (月) 02:05:53 takaboo | ||
---|---|---|---|
Line 24: | Line 24: | ||
***DXL_GetModelInfo [#j50f584f] | ***DXL_GetModelInfo [#j50f584f] | ||
- | 指定IDのデバイス情報の読み出しに成功するとライブラリ内のテーブルにその情報が反映され、以後プレフィクスに「DXL_Set」ないし「DXL_Get」が付与されるAPIが使用できるようになる。~ | + | 指定IDのデバイス情報の読み出しに成功すると、ライブラリ内のIDテーブルに現在の動作モードとモデルを記憶し、デバイスのReturn Delay Timeが0でなければトルクディスエーブルした後に0を書き込む。以後プレフィクスに「DXL_Set」ないし「DXL_Get」が付与された物理値の指令ないし取得等を行うAPIは、指定されたIDが実態を持つものとして処理される。~ |
- | ライブラリ内のテーブルが更新されないまま存在しているIDに対してDXL_Set~やDXL_Get~のAPIを使用すると、何の処理も行わずに即時復帰する。 | + | ライブラリ内のテーブルを更新しない場合、実際に存在しているIDに対してDXL_Set~やDXL_Get~のAPIを使用すると、何の処理も行わずに即時復帰する。 |
TDXL_ModelInfo *DXL_GetModelInfo(TDeviceID dvid, uint8_t id); | TDXL_ModelInfo *DXL_GetModelInfo(TDeviceID dvid, uint8_t id); | ||
- | |||
-パラメータ | -パラメータ | ||
--TDeviceID '''dvid''' | --TDeviceID '''dvid''' | ||
Line 39: | Line 38: | ||
TDeviceID dev; | TDeviceID dev; | ||
dev = DX_OpenPort ("/dev/ttyUSB0", 57600); | dev = DX_OpenPort ("/dev/ttyUSB0", 57600); | ||
- | // ID=1のデバイス情報を取得 | + | // ID=1のデバイス情報から内部テーブルを更新し、かつモデル名を取得 |
- | DXL_GetModelInfo (dev, 1); | + | printf("%s", DXL_GetModelInfo (dev, 1).name); |
***DXL_PrintDevicesList [#s3fd9115] | ***DXL_PrintDevicesList [#s3fd9115] | ||
- | 内部のテーブルに反映された存在するデバイスの全リストをコンソールに出力する。デバッグ用。 | + | DXL_ScanDevicesかDXL_GetModelInfoでAPI内のIDテーブルに反映されたデバイスの全リストをコンソールに出力する。デバッグ用。 |
bool DXL_PrintDevicesList(int *pf(const char *, ...)); | bool DXL_PrintDevicesList(int *pf(const char *, ...)); | ||
***DXL_GetErrorCode [#l99bda3b] | ***DXL_GetErrorCode [#l99bda3b] | ||
- | Xシリーズなどのコントロールテーブル上にハードウェアエラーの情報がある場合に限りその値を取得する。 | + | API内で通信を行っている間に取得された最後のエラーコードを取り出す。~ |
+ | DXL_ScanDevicesかDXL_GetModelInfoでAPI内のIDテーブルを更新しておく必要がある。 | ||
TErrorCode DXL_GetErrorCode(TDeviceID dvid, uint8_t id); | TErrorCode DXL_GetErrorCode(TDeviceID dvid, uint8_t id); | ||
-パラメータ | -パラメータ | ||
Line 55: | Line 55: | ||
~検索対象のIDを指定。~ | ~検索対象のIDを指定。~ | ||
-戻り値 | -戻り値 | ||
- | --bool~ | + | --TErrorCode |
- | ~成功するとTure、失敗するとFalseを返す。~ | + | ~未検索のIDを指定すると0xFFFFを返す。~ |
-使用例 | -使用例 | ||
***DXL_SetOperatingMode [#r5844545] | ***DXL_SetOperatingMode [#r5844545] | ||
動作モードを指定IDへ指令する。~ | 動作モードを指定IDへ指令する。~ | ||
- | デバイスの動作モードと指令値が異なる場合はトルクをディスエーブルした後に指令値に更新される。また、デバイスがサポートしないモードを指定した場合はエラーとなるため、必ず戻り値を取得して可否を判断すること。 | + | デバイスの動作モードと指令値が異なる場合はトルクをディスエーブルした後に指令値に更新される。また、デバイスがサポートしないモードを指定した場合はエラーとなるため、必ず戻り値を取得して可否を判断すること。~ |
+ | 予めDXL_ScanDevicesかDXL_GetModelInfoでAPI内のIDテーブルを更新しておく必要がある。 | ||
bool DXL_SetOperatingMode(TDeviceID dvid, uint8_t id, uint8_t mode); | bool DXL_SetOperatingMode(TDeviceID dvid, uint8_t id, uint8_t mode); | ||
Line 75: | Line 76: | ||
***DXL_GetOperatingMode [#x7567d67] | ***DXL_GetOperatingMode [#x7567d67] | ||
指定IDの動作モードを取得する。~ | 指定IDの動作モードを取得する。~ | ||
+ | 予めDXL_ScanDevicesかDXL_GetModelInfoでAPI内のIDテーブルを更新しておく必要がある。 | ||
bool DXL_GetOperatingMode(TDeviceID dvid, uint8_t id, uint8_t *mode); | bool DXL_GetOperatingMode(TDeviceID dvid, uint8_t id, uint8_t *mode); | ||
***DXL_SetTorqueEnable [#qcf1eee1] | ***DXL_SetTorqueEnable [#qcf1eee1] | ||
トルクイネーブルを指定IDへ指令する。~ | トルクイネーブルを指定IDへ指令する。~ | ||
- | なおプロトコルV1搭載モデルに角度や回転数を指令すると、本APIに関わらず自動的にトルクイネーブルが1になる。 | + | なおプロトコルV1搭載モデルに角度や回転数を指令すると、本APIに関わらず自動的にトルクイネーブルが1になる。~ |
+ | 予めDXL_ScanDevicesかDXL_GetModelInfoでAPI内のIDテーブルを更新しておく必要がある。 | ||
bool DXL_SetTorqueEnable(TDeviceID dvid, uint8_t id, bool en); | bool DXL_SetTorqueEnable(TDeviceID dvid, uint8_t id, bool en); | ||
-パラメータ | -パラメータ | ||
Line 93: | Line 96: | ||
***DXL_GetTorqueEnable [#x3459343] | ***DXL_GetTorqueEnable [#x3459343] | ||
指定IDのトルクイネーブルを取得する。~ | 指定IDのトルクイネーブルを取得する。~ | ||
+ | 予めDXL_ScanDevicesかDXL_GetModelInfoでAPI内のIDテーブルを更新しておく必要がある。 | ||
bool DXL_SetTorqueEnable(TDeviceID dvid, uint8_t id, bool *en); | bool DXL_SetTorqueEnable(TDeviceID dvid, uint8_t id, bool *en); | ||
-パラメータ | -パラメータ | ||
Line 105: | Line 109: | ||
***DXL_SetLED [#kfc7a7c3] | ***DXL_SetLED [#kfc7a7c3] | ||
- | LEDの明滅を指定IDへ指令する。輝度や色の制御は対象外。 | + | LEDの明滅を指定IDへ指令する。輝度や色の制御は対象外。~ |
+ | 予めDXL_ScanDevicesかDXL_GetModelInfoでAPI内のIDテーブルを更新しておく必要がある。 | ||
bool DXL_SetLED(TDeviceID dvid, uint8_t id, bool en); | bool DXL_SetLED(TDeviceID dvid, uint8_t id, bool en); | ||
-パラメータ | -パラメータ | ||
Line 119: | Line 124: | ||
***DXL_SetGoalAngle [#zde96bae] | ***DXL_SetGoalAngle [#zde96bae] | ||
位置決め制御時の角度(deg)を指定IDへ指令する。~ | 位置決め制御時の角度(deg)を指定IDへ指令する。~ | ||
- | 0degは動作範囲の中央とし、実際の精度は対象のデバイスに依存する。 | + | 0degは動作範囲の中央とし、実際の精度は対象のデバイスに依存する。~ |
+ | 予めDXL_ScanDevicesかDXL_GetModelInfoでAPI内のIDテーブルを更新しておく必要がある。 | ||
bool DXL_SetGoalAngle(TDeviceID dvid, uint8_t id, double angle); | bool DXL_SetGoalAngle(TDeviceID dvid, uint8_t id, double angle); | ||
-パラメータ | -パラメータ | ||
Line 133: | Line 139: | ||
***DXL_SetGoalAngles [#h7eadf0c] | ***DXL_SetGoalAngles [#h7eadf0c] | ||
複数軸に対して位置決め制御時の角度(deg)を指令する。~ | 複数軸に対して位置決め制御時の角度(deg)を指令する。~ | ||
- | ライブラリ内ではSYNCやBULKインストラクションを使用しているため、実際のデバイスに指令が到達しているかの判断は行わない。 | + | ライブラリ内ではSYNCやBULKインストラクションを使用しているため、実際のデバイスに指令が到達しているかの判断は行わない。~ |
+ | 予めDXL_ScanDevicesかDXL_GetModelInfoでAPI内のIDテーブルを更新しておく必要がある。 | ||
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); | ||
-パラメータ | -パラメータ |