|
一覧
検索
最新
ページへ戻る
履歴
DXLIB_abstract
のバックアップソース(No.7)
knowledge
:
DXLIB_abstract
のバックアップソース(No.7)
差分
を表示
現在との差分
を表示
DXLIB_abstract
へ行く。
« Prev
Next »
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, uint8_t *ids); -パラメータ --TDeviceID '''dvid''' ~オープン済のDeviceIDを指定。~ --uint8_t *'''ids''' ~検索された全IDをストアする配列のポインタ。不要ならNULLを指定。~ -戻り値 --bool~ ~検出されたデバイスの数を返す。~ -使用例 TDeviceID dev; uint8_t ids[255], num = 0; // COM10を57600bpsでオープン dev = DX_OpenPort ("\\\\.\\COM10", 9600); // デバイスをスキャン num = DXL_ScanDevices (dev, &ids); ***DXL_GetModelInfo [#j50f584f] 指定IDのデバイス情報の読み出しに成功すると、ライブラリ内のIDテーブルに現在の動作モードとモデルを記憶し、デバイスのReturn Delay Timeが0でなければトルクディスエーブルした後に0を書き込む。以後プレフィクスに「DXL_Set」ないし「DXL_Get」が付与された物理値の指令ないし取得等を行うAPIは、指定されたIDが実態を持つものとして処理される。~ ライブラリ内のテーブルを更新しない場合、実際に存在しているIDに対してDXL_Set~やDXL_Get~のAPIを使用すると、何の処理も行わずに即時復帰する。 TDXL_ModelInfo *DXL_GetModelInfo(TDeviceID dvid, uint8_t id); -パラメータ --TDeviceID '''dvid''' ~オープン済のDeviceIDを指定。~ --uint8_t '''id''' ~検索対象のIDを指定。~ -戻り値 --[[TDXL_ModelInfo>#TDXL_ModelInfo]] *~ ~内部のDynamixelの情報と一致するテーブルのポインタを返す。~ -使用例 TDeviceID dev; dev = DX_OpenPort ("/dev/ttyUSB0", 57600); // ID=1のデバイス情報から内部テーブルを更新し、かつモデル名を取得 printf("%s", DXL_GetModelInfo (dev, 1).name); ***DXL_PrintDevicesList [#s3fd9115] DXL_ScanDevicesかDXL_GetModelInfoでAPI内のIDテーブルに反映されたデバイスの全リストをコンソールに出力する。デバッグ用。 bool DXL_PrintDevicesList(int *pf(const char *, ...)); ***DXL_GetErrorCode [#l99bda3b] API内で通信を行っている間に取得された最後のエラーコードを取り出す。~ DXL_ScanDevicesかDXL_GetModelInfoでAPI内のIDテーブルを更新しておく必要がある。 TErrorCode DXL_GetErrorCode(TDeviceID dvid, uint8_t id); -パラメータ --TDeviceID '''dvid''' ~オープン済のDeviceIDを指定。~ --uint8_t '''id''' ~検索対象のIDを指定。~ -戻り値 --TErrorCode ~未検索のIDを指定すると0xFFFFを返す。~ -使用例 ***DXL_SetOperatingMode [#r5844545] 動作モードを指定IDへ指令する。~ デバイスの動作モードと指令値が異なる場合はトルクをディスエーブルした後に指令値に更新される。また、デバイスがサポートしないモードを指定した場合はエラーとなるため、必ず戻り値を取得して可否を判断すること。~ 予めDXL_ScanDevicesかDXL_GetModelInfoでAPI内のIDテーブルを更新しておく必要がある。 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のデューティー比を制御。| ***DXL_GetOperatingMode [#x7567d67] 指定IDの動作モードを取得する。~ 予めDXL_ScanDevicesかDXL_GetModelInfoでAPI内のIDテーブルを更新しておく必要がある。 bool DXL_GetOperatingMode(TDeviceID dvid, uint8_t id, uint8_t *mode); ***DXL_SetTorqueEnable [#qcf1eee1] トルクイネーブルを指定IDへ指令する。~ なおプロトコルV1搭載モデルに角度や回転数を指令すると、本APIに関わらず自動的にトルクイネーブルが1になる。~ 予めDXL_ScanDevicesかDXL_GetModelInfoでAPI内のIDテーブルを更新しておく必要がある。 bool DXL_SetTorqueEnable(TDeviceID dvid, uint8_t id, bool en); -パラメータ --TDeviceID '''dvid''' ~オープン済のDeviceIDを指定。~ --uint8_t '''id''' ~検索対象のIDを指定。~ -戻り値 --bool~ ~成功するとTure、失敗するとFalseを返す。~ -使用例 ***DXL_GetTorqueEnable [#x3459343] 指定IDのトルクイネーブルを取得する。~ 予めDXL_ScanDevicesかDXL_GetModelInfoでAPI内のIDテーブルを更新しておく必要がある。 bool DXL_SetTorqueEnable(TDeviceID dvid, uint8_t id, bool *en); -パラメータ --TDeviceID '''dvid''' ~オープン済のDeviceIDを指定。~ --uint8_t '''id''' ~検索対象のIDを指定。~ -戻り値 --bool~ ~成功するとTure、失敗するとFalseを返す。~ -使用例 ***DXL_SetLED [#kfc7a7c3] LEDの明滅を指定IDへ指令する。輝度や色の制御は対象外。~ 予めDXL_ScanDevicesかDXL_GetModelInfoでAPI内のIDテーブルを更新しておく必要がある。 bool DXL_SetLED(TDeviceID dvid, uint8_t id, bool en); -パラメータ --TDeviceID '''dvid''' ~オープン済のDeviceIDを指定。~ --uint8_t '''id''' ~検索対象のIDを指定。~ -戻り値 --bool~ ~成功するとTure、失敗するとFalseを返す。~ -使用例 ***DXL_SetGoalAngle [#zde96bae] 位置決め制御時の角度(deg)を指定IDへ指令する。~ 0degは動作範囲の中央とし、実際の精度は対象のデバイスに依存する。~ 予めDXL_ScanDevicesかDXL_GetModelInfoでAPI内のIDテーブルを更新しておく必要がある。 bool DXL_SetGoalAngle(TDeviceID dvid, uint8_t id, double angle); -パラメータ --TDeviceID '''dvid''' ~オープン済のDeviceIDを指定。~ --uint8_t '''id''' ~検索対象のIDを指定。~ -戻り値 --bool~ ~成功するとTure、失敗するとFalseを返す。~ -使用例 ***DXL_SetGoalAngles [#h7eadf0c] 複数軸に対して位置決め制御時の角度(deg)を指令する。~ ライブラリ内ではSYNCやBULKインストラクションを使用しているため、実際のデバイスに指令が到達しているかの判断は行わない。~ 予めDXL_ScanDevicesかDXL_GetModelInfoでAPI内のIDテーブルを更新しておく必要がある。 bool DXL_SetGoalAngles(TDeviceID dvid, const uint8_t *ids, double *angles, int num); -パラメータ --TDeviceID '''dvid''' ~オープン済のDeviceIDを指定。~ --uint8_t '''id''' ~検索対象のIDを指定。~ -戻り値 --bool~ ~成功するとTure、失敗するとFalseを返す。~ -使用例 ***DXL_GetPresentAngle [#o12b1958] 指定IDの現在の角度(deg)を取得する。~ 0degは動作範囲の中央とし、実際の精度は対象のデバイスに依存する。また、制御モードやモデルによって取得される数値範囲に差がある。 bool DXL_GetPresentAngle(TDeviceID dvid, uint8_t id, double *angle); -パラメータ --TDeviceID '''dvid''' ~オープン済のDeviceIDを指定。~ --uint8_t '''id''' ~検索対象のIDを指定。~ -戻り値 --bool~ ~成功するとTure、失敗するとFalseを返す。~ -使用例 ***DXL_GetPresentAngles [#b48cfc6a] 複数軸の現在の角度(deg)を取得する。 bool DXL_GetPresentAngles(TDeviceID dvid, const uint8_t *ids, double *angles, int num); -パラメータ --TDeviceID '''dvid''' ~オープン済のDeviceIDを指定。~ --uint8_t '''id''' ~検索対象のIDを指定。~ -戻り値 --bool~ ~成功するとTure、失敗するとFalseを返す。~ -使用例 ***DXL_SetGoalRPM [#xe33092b] 速度制御時の回転速度(rpm)を指定IDへ指令する。~ モデルによっては位置決め制御時と速度制御時のアイテが同じなため、動作モードを切り替えながら運用すると、以前指令された回転速度値を引き継いで動作してしまう場合がある。 bool DXL_SetGoalRPM(TDeviceID dvid, uint8_t id, double rpm); -パラメータ --TDeviceID '''dvid''' ~オープン済のDeviceIDを指定。~ --uint8_t '''id''' ~検索対象のIDを指定。~ -戻り値 --bool~ ~成功するとTure、失敗するとFalseを返す。~ -使用例 ***DXL_SetGoalRPMs [#td88fd42] 複数軸に対して速度制御時の回転速度(rpm)を指令する。 bool DXL_SetGoalRPMs(TDeviceID dvid, const uint8_t *ids, double *rpms, int num); -パラメータ --TDeviceID '''dvid''' ~オープン済のDeviceIDを指定。~ --uint8_t '''id''' ~検索対象のIDを指定。~ -戻り値 --bool~ ~成功するとTure、失敗するとFalseを返す。~ -使用例 ***DXL_GetPresentRPM [#ibd89474] 指定IDの現在の回転速度(rpm)を取得する。 bool DXL_GetPresentRPM(TDeviceID dvid, uint8_t id, double *rpm); -パラメータ --TDeviceID '''dvid''' ~オープン済のDeviceIDを指定。~ --uint8_t '''id''' ~検索対象のIDを指定。~ -戻り値 --bool~ ~成功するとTure、失敗するとFalseを返す。~ -使用例 ***DXL_GetPresentRPMs [#ge163793] bool DXL_GetPresentRPMs(TDeviceID dvid, const uint8_t *ids, double *rpms, int num); -パラメータ --TDeviceID '''dvid''' ~オープン済のDeviceIDを指定。~ --uint8_t '''id''' ~検索対象のIDを指定。~ -戻り値 --bool~ ~成功するとTure、失敗するとFalseを返す。~ -使用例 ***DXL_SetGoalCurrent [#q16b45cf] 電流制御時の電流(mA)を指定IDへ指令する。 bool DXL_SetGoalCurrent(TDeviceID dvid, uint8_t id, double current); -パラメータ --TDeviceID '''dvid''' ~オープン済のDeviceIDを指定。~ --uint8_t '''id''' ~検索対象のIDを指定。~ -戻り値 --bool~ ~成功するとTure、失敗するとFalseを返す。~ -使用例 ***DXL_SetGoalCurrents [#w2e089b0] bool DXL_SetGoalCurrents(TDeviceID dvid, const uint8_t *ids, double *currents, int num); -パラメータ --TDeviceID '''dvid''' ~オープン済のDeviceIDを指定。~ --uint8_t '''id''' ~検索対象のIDを指定。~ -戻り値 --bool~ ~成功するとTure、失敗するとFalseを返す。~ -使用例 ***DXL_GetPresentCurrent [#g697b4d6] 現在の電流(mA)を取得する。~ 電流計測をサポートしないデバイスの場合は負荷を取得し、仕様上のストール電流を乗じたものとなる。 bool DXL_GetPresentCurrent(TDeviceID dvid, uint8_t id, double *current); -パラメータ --TDeviceID '''dvid''' ~オープン済のDeviceIDを指定。~ --uint8_t '''id''' ~検索対象のIDを指定。~ -戻り値 --bool~ ~成功するとTure、失敗するとFalseを返す。~ -使用例 ***DXL_GetPresentCurrents [#z78b8dd7] bool DXL_GetPresentCurrents(TDeviceID dvid, const uint8_t *ids, double *current, int num); -パラメータ --TDeviceID '''dvid''' ~オープン済のDeviceIDを指定。~ --uint8_t '''id''' ~検索対象のIDを指定。~ -戻り値 --bool~ ~成功するとTure、失敗するとFalseを返す。~ -使用例 ***DXL_SetGoalAngleAndRPM [#g075e425] 位置制御時の角度(deg)と回転速度(rpm)を指定IDへ指令する。 bool DXL_SetGoalAngleAndRPM(TDeviceID dvid, uint8_t id, double angle, double rpm); -パラメータ --TDeviceID '''dvid''' ~オープン済のDeviceIDを指定。~ --uint8_t '''id''' ~検索対象のIDを指定。~ -戻り値 --bool~ ~成功するとTure、失敗するとFalseを返す。~ -使用例 ***DXL_SetGoalAngleAndRPMs [#qd594eb3] bool DXL_SetGoalAngleAndRPMs(TDeviceID dvid, PAngleRPM anglerpm, int num); -パラメータ --TDeviceID '''dvid''' ~オープン済のDeviceIDを指定。~ --uint8_t '''id''' ~検索対象のIDを指定。~ -戻り値 --bool~ ~成功するとTure、失敗するとFalseを返す。~ -使用例 ***オリジナルな定義 [#x4875c27] &aname(TDXL_ModelInfo); :TDXL_ModelInfo | struct {&br; uint16_t modelno; // デバイス固有のモデル番号&br; char name[15];&br; TDXL_DevType devtype; // デバイスのグループ&br; struct { // 位置の範囲&br; int32_t max;&br; int32_t min;&br; } positionlimit;&br; struct { // 速度の範囲&br; int32_t max;&br; int32_t min;&br; } velocitylimit;&br; double offsetangle; // 中点 0[deg]&br; double angleratio; // 角度変換係数 [deg]&br; double rpmratio; // 速度変換係数 [rpm]&br; double currentratio; // 電流変換係数 [mA]&br;}
« Prev
Next »
DXLIB_abstract のバックアップ一覧
DXLIB_abstract のバックアップソース(No. All)
1: 2017-12-17 (日) 21:42:25
takaboo
2: 2017-12-17 (日) 22:23:31
takaboo
3: 2017-12-18 (月) 21:13:18
takaboo
4: 2017-12-21 (木) 00:34:44
takaboo
5: 2017-12-22 (金) 00:34:28
takaboo
6: 2017-12-23 (土) 11:36:42
takaboo
7: 2017-12-25 (月) 02:05:53
takaboo
8: 2018-05-14 (月) 16:54:58
takaboo
現: 2018-06-11 (月) 19:17:14
takaboo
Copyright© 1989,2024 BestTechnology Co.,Ltd.
メニュー
トップ
ニュース
お知らせ
新商品情報
更新情報
マニュアル類
技術情報
チュートリアル
FAQ
お問合せ
技術的なお問合せ
その他お問合せ
お見積り
ブログ
会社案内
ショッピング
ご利用案内
検索
カテゴリ 一覧
ロボットキット
Dynamixelシリーズ
マイコンボード
相撲ロボット
センサ
通信機器
お客様ページ