3: 2017-12-18 (月) 21:13:18 takaboo ソース 4: 2017-12-21 (木) 00:34:44 takaboo ソース
Line 3: Line 3:
***DXL_ScanDevices [#o2bbf83a] ***DXL_ScanDevices [#o2bbf83a]
-全IDのレンジでデバイスをスキャンし内部のテーブルに反映する。プレフィクスにDXL_SetないしDXL_Getが付与される関数を使用するには内部のテーブルを完成させておく必要があるが、本APIかDXL_GetModelInfoを使用する事でテーブルが更新される。+全IDのレンジでデバイスをスキャンし、成功したIDのみライブラリ内のテーブルにその情報が反映され、以後プレフィクスにDXL_SetないしDXL_Getが付与されるAPIが使用できるようになる。
-なお全IDをスキャンし終えるまでには時間がかかるため、IDがわかっている場合はDXL_GetModelInfoの使用を推奨する。+ライブラリ内のテーブルが更新されないまま存在しているIDに対してDXL_Set~やDXL_Get~のAPIを使用すると、何の処理も行わずに即時復帰する。~ 
 +また全IDをスキャンし終えるまでには時間がかかるため、IDが明確にわかっている場合はDXL_GetModelInfoの使用を推奨する。
 int DXL_ScanDevices(TDeviceID dvid);  int DXL_ScanDevices(TDeviceID dvid);
***DXL_GetModelInfo [#j50f584f] ***DXL_GetModelInfo [#j50f584f]
-指定IDのデバイスをスキャンし内部のテーブルに反映し、その情報を取得する。プレフィクスにDXL_SetないしDXL_Getが付与される関数を使用するには内部のテーブルを完成させておく必要があるが、本APIかDXL_ScanDevicesを使用する事でテーブルが更新される。 +指定IDのデバイス情報の読み出しに成功するとライブラリ内のテーブルにその情報が反映され、以後プレフィクスにDXL_SetないしDXL_Getが付与されるAPIが使用できるようになる。~ 
- TDXL_ModelInfo DXL_GetModelInfo(TDeviceID dvid, uint8_t id);+ライブラリ内のテーブルが更新されないまま存在しているIDに対してDXL_Set~やDXL_Get~のAPIを使用すると、何の処理も行わずに即時復帰する。 
 + PDXL_ModelInfo DXL_GetModelInfo(TDeviceID dvid, uint8_t id);
***DXL_PrintDevicesList [#s3fd9115] ***DXL_PrintDevicesList [#s3fd9115]
Line 20: Line 22:
***DXL_SetTorqueEnable [#qcf1eee1] ***DXL_SetTorqueEnable [#qcf1eee1]
-トルクイネーブルを指令する。モデルによっては角度指令をすると自動的にトルクイネーブルが1になるものもある。+トルクイネーブルを指令する。~ 
 +なおプロトコルV1搭載モデルに角度や回転数を指令すると、本APIに関わらず自動的にトルクイネーブルが1になる。
 bool DXL_SetTorqueEnable(TDeviceID dvid, uint8_t id, bool en);  bool DXL_SetTorqueEnable(TDeviceID dvid, uint8_t id, bool en);
Line 28: Line 31:
***DXL_SetGoalAngle [#zde96bae] ***DXL_SetGoalAngle [#zde96bae]
-位置決め制御時の角度(deg)を指令する。0degは動作範囲の中央とする。+位置決め制御時の角度(deg)を指定IDへ指令する。~ 
 +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)を指令する。+複数軸に対して位置決め制御時の角度(deg)を指令する。
 +ライブラリ内ではSYNCやBULKインストラクションを使用しているため、実際のデバイスに指令が到達しているかの判断は行わない。
 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は動作範囲の中央とする。+指定IDの現在の角度(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は動作範囲の中央とする。なお、制御モードやモデルによって取得される数値範囲に差がある。+複数軸の現在の角度(deg)を取得する。
 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)を指令する。モデルによっては位置決め制御時の回転速度制限を司るアイテムが同じ場合があるので注意が必要。+速度制御時の回転速度(rpm)を指定IDへ指令する。~ 
 +モデルによっては位置決め制御時と速度制御時のアイテが同じなため、動作モードを切り替えながら運用すると、以前指令された回転速度値を引き継いで動作してしまう場合がある。
 bool DXL_SetGoalRPM(TDeviceID dvid, uint8_t id, double rpm);  bool DXL_SetGoalRPM(TDeviceID dvid, uint8_t id, double rpm);
Line 52: Line 59:
***DXL_GetPresentRPM [#ibd89474] ***DXL_GetPresentRPM [#ibd89474]
-現在の回転速度(rpm)を取得する。+指定IDの現在の回転速度(rpm)を取得する。
 bool DXL_GetPresentRPM(TDeviceID dvid, uint8_t id, double *rpm);  bool DXL_GetPresentRPM(TDeviceID dvid, uint8_t id, double *rpm);
Line 58: Line 65:
 bool DXL_GetPresentRPMs(TDeviceID dvid, const uint8_t *ids, double *rpms, int num);  bool DXL_GetPresentRPMs(TDeviceID dvid, const uint8_t *ids, double *rpms, int num);
***DXL_SetGoalCurrent [#q16b45cf] ***DXL_SetGoalCurrent [#q16b45cf]
 +電流制御時の電流(mA)を指定IDへ指令する。
 bool DXL_SetGoalCurrent(TDeviceID dvid, uint8_t id, double current);  bool DXL_SetGoalCurrent(TDeviceID dvid, uint8_t id, double current);
Line 63: Line 71:
 bool DXL_SetGoalCurrents(TDeviceID dvid, const uint8_t *ids, double *currents, int num);  bool DXL_SetGoalCurrents(TDeviceID dvid, const uint8_t *ids, double *currents, int num);
***DXL_GetPresentCurrent [#g697b4d6] ***DXL_GetPresentCurrent [#g697b4d6]
-現在の電流(mA)を取得する。電流計測をサポートしないデバイスの場合は負荷を取得し、仕様上のストール電流を乗じたものとなる。+現在の電流(mA)を取得する。~ 
 +電流計測をサポートしないデバイスの場合は負荷を取得し、仕様上のストール電流を乗じたものとなる。
 bool DXL_GetPresentCurrent(TDeviceID dvid, uint8_t id, double *current);  bool DXL_GetPresentCurrent(TDeviceID dvid, uint8_t id, double *current);
Line 69: Line 78:
 bool DXL_GetPresentCurrents(TDeviceID dvid, const uint8_t *ids, double *current, int num);  bool DXL_GetPresentCurrents(TDeviceID dvid, const uint8_t *ids, double *current, int num);
***DXL_SetGoalAngleAndRPM [#g075e425] ***DXL_SetGoalAngleAndRPM [#g075e425]
 +位置制御時の角度(deg)と回転速度(rpm)を指定IDへ指令する。
 bool DXL_SetGoalAngleAndRPM(TDeviceID dvid, uint8_t id, double angle, double rpm);  bool DXL_SetGoalAngleAndRPM(TDeviceID dvid, uint8_t id, double angle, double rpm);
 +
***DXL_SetGoalAngleAndRPMs [#qd594eb3] ***DXL_SetGoalAngleAndRPMs [#qd594eb3]
 bool DXL_SetGoalAngleAndRPMs(TDeviceID dvid, PAngleRPM anglerpm, int num);  bool DXL_SetGoalAngleAndRPMs(TDeviceID dvid, PAngleRPM anglerpm, int num);
Line 79: Line 90:
|Value|CENTER:Mode|CENTER:Description|h |Value|CENTER:Mode|CENTER:Description|h
|0|Current Control Mode|電流制御。位置及び速度制御は行わない。| |0|Current Control Mode|電流制御。位置及び速度制御は行わない。|
-|1|Velocity Control Mode|速度制御。位置及びトルク制御は行わない。|+|1|Velocity Control Mode|速度制御。位置及び電流制御は行わない。|
|3|Position Control Mode|位置制御。| |3|Position Control Mode|位置制御。|
|4|Extended Position Control Mode|拡張位置制御。マルチターンを許容。| |4|Extended Position Control Mode|拡張位置制御。マルチターンを許容。|
|5|Current-Base Position Control Mode|電流制限付き位置制御。マルチターンを許容。| |5|Current-Base Position Control Mode|電流制限付き位置制御。マルチターンを許容。|
|16|PWM Control Mode|PWMのデューティー比を制御。| |16|PWM Control Mode|PWMのデューティー比を制御。|


トップ   差分 リロード印刷に適した表示   全ページ一覧 単語検索 最新ページの一覧   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom