• カテゴリ FDjr.III活用法 の最新配信
  • RSS
  • RDF
  • ATOM

ブログ - FDjr.III活用法カテゴリのエントリ

ついでと言っては失礼だが、双葉電子工業株式会社製のRSシリーズも新しいFDIIIライブラリを使う事で扱えるという事で、ID=1に位置を指令してさらに現在位置を取得するプログラム。
位置情報に符号があるのが特徴。 
#include <fd.h>
void main (void) {
int16_t now = -1500, p;
// ポートオープン
RS_ChangeBaudrate (230400);
// モータON
fd_RSEnableControl (1, true);
while (!fd_GetPB ()) {
// 位置指令
RS_WriteWordData (1, RS_ADDRESS_GOAL_POSITION, now, 10, NULL);
// 位置取得
RS_ReadWordData (1, RS_ADDRESS_PRESENT_POSITION, &p, 10, NULL);
fd_printf("goal pos=%5d, present pos=%5d\r",now, p);
now += 5;
if (now > 1500) now = -1500;
fd_Wait (10);
}
// モータOFF
fd_RSEnableControl (1, false);
}
もうちょっとで公開です。
先にお知らせした内容の問い合わせをいただいたので、ちょっと出し。

ICS3.0ないし3.5の近藤科学社製モータであればOK。残念ながらボーレートの誤差が抑え切れない都合から、最大通信速度が115.2kまでの対応。
ICS対応のサーボモータは制御する上での情報がメモリマップとして提供されていないため、FDIIIライブラリ内に以下の様な仮想メモリマップを構成し、それらに対してAPIからアクセスするといった方式を採用。
仮想アドレス データ サイズ
 0 モータフリー 1 byte
 1 指令位置 2 byte
 3 現在位置 2 byte
 5 電流 1 byte
 6 温度 1 byte
サーボモータのEEPROM領域の割り当ては無い。

主なAPIを以下に抜粋。
  • ホストボーレート変更
    bool KRS_ChangeBaudrate (uint32_t baudrate)
  • バイト書き込み
    bool KRS_WriteByteData (uint8_t id, uint8_t adr, uint8_t data, uint32_t timeout, uint16_t *errcode)
  • ワード書き込み
    bool KRS_WriteWordData (uint8_t id, uint8_t adr, uint16_t data, uint32_t timeout, uint16_t *errcode)
  • バイト読み出し
    bool KRS_ReadByteData (uint8_t id, uint8_t adr, uint8_t *data, uint32_t timeout, uint16_t *errcode)
  • ワード書き込み
    bool KRS_ReadWordData (uint8_t id, uint8_t adr, uint16_t *data, uint32_t timeout, uint16_t *errcode)
  • 同期書き込み
    bool KRS_WriteSyncData (uint8_t *data, uint8_t size, uint16_t *errcode)

IDと仮想アドレスを指定して各APIを呼べば、適宜ICSのプロトコルに変換してサーボモータとおしゃべりしてくれる。

例としてID=0のサーボモータに位置を指令してさらに現在位置を取得する事を繰り返すプログラムを作ってみた。少しだけ紹介していないAPIも使っているが、そこそこシンプルでしょう。

#include <fd.h>
void main (void) {
uint16_t now = 0, p;
// ポートオープン
KRS_ChangeBaudrate (115200);
while (!fd_GetPB ()) {
// 位置指令
KRS_WriteWordData (0, KRS_ADDRESS_GOAL_POSITION, now, 5, NULL);
// 位置取得
KRS_ReadWordData (0, KRS_ADDRESS_PRESENT_POSITION, &p, 5, NULL);
fd_printf("goal pos=%5d, present pos=%5d\r", now, p);
now += 10;
if (now > 16383) now = 0;
fd_Wait (10);
}
// モータOFF
fd_KRSEnableControl (0, false);
}

FREEDOM jr.IIIの新しいサンプルプログラムを公開しました。
ワイヤレスコントローラを使ったメニュー操作だけで、一通りの機能を扱うことができます。

FREEDOMjr.III Operation Sample Programページ

メニュー操作画面をムービーで少し紹介。


トップメニューの構成は以下の通り。

  • Control Mode : ワイヤレスコントローラのボタンに割り当てたモーションを再生したり、歩行したりします。
  • Motion Editor : モーションを作成、保存します。
  • Walk Adjust : 歩行パラメータを調整します。
  • HomePos Adjust : ホームポジションを調整します。
  • Chaeck Servo : Dynamixelとの通信やエラーを確認します。
  • Reboot : ブートローダに移行します。