DX-117読み取り
#define PING 1 #define READ 2 #define WRITE 3 #define REGWRITE 4 #define ACTION 5 #define RESET 6 #define SYNCWRITE 0x83 typedef struct{ //EEPROM領域 short model_nuber; //モデル番号、リードのみ char firm_ver; //ファームウェアバージョン char ID; //ID char baud_rate; //ボー・レート char r_deray; //応答遅延時間 short CW_limit; //CW方向の限界角度 short CCW_limit; //CCW方向の限界角度 char temp; //温度 char low_limit_volt; //最低限界電圧 char high_limit_volt; //最高限界電圧 short max_torque; //最高トルク char status; //応答レベル char alerm_LED; //アラームLED機能ON、OFF char alerm_shutdown; //アラームシャットダウン機能 //ここからRAM領域 char torque_EN; //トルクON、OFF char LED; //LEDのON、OFF char CW_comp_margin; char CCW_comp_margin; char CW_comp_slope; char CCW_comp_slope; short Goal_pos; //目標位置 short speed; //目標速度 short torque_limit; //トルク限界値 short pos; //現在位置 short Load; //現在荷重値 char volt; //現在電圧 char reg_inst; //インストラクションの登録、未登録 char moving; //動きの有無 char Lock; //EEPROMのロック short Punch; //パ }dx117ctrl_table
とりあえずヘッダファイルにまるまるコントロールテーブルの構造体を作ってみた。
エディアンは考えてないので、間違ってるかもしれん。
dynamixelって一斉同時操作コマンド(SYNCWRITE)があったんだ。
形式は
ID 0XFE Length (L+1) X N + 4 (L:RX-28別Data Length、N:RX-28の数) Instruction 0X83 Parameter1 Dataを書き込もうとする位置の開始Address Parameter2 書き込もうとするDataの長さ(L) 1番目RX-28に関するData Parameter3 1番目RX-28のID Parameter4 1番目RX-28の1番目Data Parameter5 1番目RX-28の2番目Data … Parameter L+3 1番目RX-28のL番目Data Parameter L+4 2番目RX-28のID Parameter L+5 2番目RX-28の1番目Data 2番目RX-28に関するData Parameter L+6 2番目RX-28の2番目Data … Parameter 2L+4 2番目RX-28のL番目Data
って感じで
実際だと
IDが0のRX-28 : 0x010の位置に速度0x150で移動 IDが1のRX-28 : 0x220の位置に速度0x360で移動 IDが2のRX-28 : 0x030の位置に速度0x170で移動 IDが3のRX-28 : 0x220の位置に速度0x380で移動 パケット 0XFF 0XFF 0XFE 0X18 0X83 0X1E 0X04 0X00 0X10 0X00 0X50 0X01 0X01 0X20 0X02 0X60 0X03 0X02 0X30 0X00 0X70 0X01 0X03 0X20 0X02 0X80 0X03 0X12`
ってかんじになるらしい。