概要 anchor.png

FREEDOM IIIライブラリVer.4.5は、FDIII-HCとDynamixelシリーズで構成されたアプリケーションを効率的に運用するためのライブラリです。
アクチュエータのIDやアクチュエータの位置を角度に変換するパラメータを元に、各アクチュエータを連動して動かしたり、アクチュエータの持つ情報を取得するといったアプリケーションレベルにおいて最低限必要な機能を本ライブラリでカバーします。
なお、本ライブラリはその外のライブラリ(SAM7S, SAM7S_TOPPERS等)を静的に使用していますので、ベンダーから提供されるGCC Developer Liteをインストールする際は、各コンポーネントを手動で選択することなくフルインストールした環境で使用して下さい。また、全てのソースもインストールと同時に展開されますので、必要に応じて参照できます。
本ライブラリで提供されるAPIのプロトタイプ宣言や特殊な構造体はfd.hに集約されています。このヘッダファイルに宣言が無いAPIは使用しないで下さい。

Page Top

API anchor.png

機能別にAPIの詳細を解説します。主なコンテンツを以下に紹介します。

旧来に比べかなりのボリュームになっていますが、実際には全てを使うわけではありません。必要に応じてAPIを使用してユーザアプリケーションを構成します。まずはFDIII-HCのサンプルプログラムを一通り実行して、動作を確認する事を推奨します。

Page Top

OS関連 anchor.png

FREEDOM IIIライブラリはToppersに依存しており、予め予約されたリソースのうちユーザに解放しているものであれば自由に使用できます。主な恩恵は複数のタスクが使用できることにあります。
各タスクで利用できるスタックはカーネルのコンフィギュレーションで2kバイトに固定されています。大きなメモリを必要とする処理(変数の宣言やネストが深い関数の呼び出し)を行うと容易にスタックがフローします。
TASK5はライブラリ内で使用済みとなりますので、ユーザプログラムから制御してはなりません。その他のリソースについてもライブラリ内で使用済みなものがいつくか存在しますので、詳細はライブラリのソースにて確認してください。
なお、ToppersのAPIに関してはここでは触れませんので、具体的な使い方等についてはサンプルプログラムで確認してください。

Page Top

fd_ElapsedTime anchor.png

起動からの経過時間を1ms単位で取得する。

uint32_t fd_ElapsedTime (void);
  • パラメータ

    なし

  • 戻り値

    0~: 経過時間[ms]

  • 使用例
    #include <fd.h>
    
    int main (void) {
      while (!fd_rx_buff ()) {
        int ms = fd_ElapsedTime ();
        int s = (ms / 1000) % 60;
        int m = (ms / 60000) % 60;
        int h = (ms / 360000) % 24;
        fd_printf ("\r %02d:%02d:%02d.%02d", h, m, s, (ms % 1000) / 10);
        fd_Wait (10);
      }
    }
    
Page Top

fd_Wait anchor.png

タスク起床待ち状態に移行させる。内部ではtslp_tskに置き換えられるため、tslp_tskをそのまま使っても同等の処理となる。
なお、プリエンプティブ・マルチタスクを活性化する機能(fd_EnableAutoRotateReadyQueue)はデフォルトでONとなっているため、本APIを時間がかかる処理やループ内に適宜挿入して意図的にディスパッチを促す必要はないが、OFFの場合は他のタスク(ライブラリで使用しているTASK5も含む)の期待する動作が阻害される場合がある。

ER fd_Wait (TMO tmout);
  • パラメータ
    • TMO tmout

      タイムアウト[ms]指定なら正の値
      他、TMO_POL TMO_FEVR

  • 戻り値

    E_OK: 正常終了
    E_PAR: パラメータエラー
    E_RLWAI: 待ち状態の強制解除
    E_TMOUT: ポーリング失敗もしくはタイムアウト

Page Top

fd_SoftReset anchor.png

実行中のアプリケーションプログラムを強制終了し、ブートローダへ移行する。なお、mainから抜けると同様の処理が行われる。

void fd_SoftReset (void);
  • パラメータ

    なし

  • 戻り値

    なし

Page Top

fd_GetShutdownState anchor.png

fd_SoftResetないしmainからリターンした事による終了を検出する。

bool fd_GetShutdownState (void);
  • パラメータ

    なし

  • 戻り値

    true: 終了処理中

Page Top

fd_EnableAutoRotateReadyQueue anchor.png

1ms単位で励起されるレディーキューの強制自動回転を許可する。許可されるとプリエンプティブ・マルチタスクなOSとして利用できる。

void fd_EnableAutoRotateReadyQueue (bool en);
  • パラメータ
    • bool en

      true: 許可
      false: 禁止 (デフォルト)

  • 戻り値

    なし

Page Top

main anchor.png

mainタスクから呼ばれるユーザ用に解放されたコールバック関数。mainタスクでライブラリ内で必要となる最低限の初期化処理が行われた後、本main関数が呼ばれる。main関数の宣言が無いと即時終了するプログラムとなる。

int main (void);
  • 使用例
    #include <fd.h>
    
    void main (void) {
      while (!fd_GetPB ()) {
        fd_Wait (10);
      }
    }
    
Page Top

USER_TASK1 anchor.png

TASK1から呼ばれるユーザ用関数。実質TASK1として扱って構わない。

void USER_TASK1 (void);
  • 使用例
    #include <fd.h>
    
    void USER_TASK1 (void) {
      static bool led = false;
      while (!fd_GetShutdownState ()) {
        fd_SetLed ((led = !led));
        fd_Wait (300);
      }
    }
    
    void main (void) {
      act_tsk (TASK1);
      while (!fd_GetPB ()) {
        fd_Wait (10);
      }
    }
    
Page Top

USER_TASK2 anchor.png

TASK2から呼ばれるユーザ用関数。実質TASK2として扱って構わない。

void USER_TASK2 (void);
  • 使用例
    #include <fd.h>
    
    void USER_TASK2 (void) {
      static bool led = false;
      while (!fd_GetShutdownState ()) {
        fd_PlayMusic (false, "L9o4c9");
        fd_Wait (1000);
      }
    }
    
    void main (void) {
      act_tsk (TASK2);
      while (!fd_GetPB ()) {
        fd_Wait (10);
      }
    }
    
Page Top

USER_TASK3 anchor.png

TASK3から呼ばれるユーザ用関数。実質TASK3として扱って構わない。

void USER_TASK3 (void);
  • 使用例
    #include <fd.h>
    
    void USER_TASK3 (void) {
      while (!fd_GetShutdownState ()) {
        fd_putc ('.');
        fd_Wait (200);
      }
    }
    
    void main (void) {
      act_tsk (TASK3);
      while (!fd_GetPB ()) {
        fd_Wait (10);
      }
    }
    
Page Top

USER_TASK4 anchor.png

TASK4から呼ばれるユーザ用関数。実質TASK4として扱って構わない。

void USER_TASK4 (void);
  • 使用例
    #include <fd.h>
    
    void USER_TASK4 (void) {
      int c;
      while (!fd_GetShutdownState ()) {
        rcv_dtq (DTQ1, (VP_INT*)&c);
        fd_putc (c);
        if (c == '\33') break;
      }
      fd_SoftReset ();
    }
    
    void main (void) {
      char c;
      act_tsk (TASK4);
      fd_puts ("\nSMPL3 START\n");
      while (!fd_GetShutdownState ()) {
        if (fd_rx_buff ()) {
          while (fd_rx_buff ()) {
            c = fd_getc ();
            snd_dtq (DTQ1, c);
          }
        }
        fd_Wait (10);
      }
    }
    
Page Top

システム共通 anchor.png

本ライブラリを使用するにあって必須の初期化処理、各種パラメータの設定、モーションの実行等を行うAPIです。

Page Top

fd_SetSpec anchor.png

モーションの再生等に使用されるホームポジション値及びネットワークに接続されるデバイスの諸元(ID・動作範囲・各種リミッタ等)の設定を行う。本API を実行しなければモーション等は再生できない。 fd_GetInitalizedSpecにてパラメータの初期化が既に行われているかの判断ができる。
なお、諸元データ内にアクチュエータのパラメータが記述されておりfd_SetUVThresholdで指定された電圧を超えていれば、本APIにて各アクチュエータと通信を行い、それらパラメータの設定が行われる。また、それに伴いアクチュエータの出力軸が現在の位置にロックされる。また、モーションが停止するまで待つため、fd_StopMotionで該当モーションを停止させてから呼び出すことを推奨する。

void fd_SetSpec (const PHomePosition hp, const TSpec *svp, int size);
  • パラメータ
    • const PHomePosition hp

      ホームポジションを保持したTHomePosition構造体の変数のアドレス
      ホームポジションは全ての動作の基準となるアクチュエータの初期位置(0~1023 の値)であり角度ではない

    • const TSpec *svp

      使用する全アクチュエータに関する情報を保持したTSpec構造体の変数のアドレス

    • int size

      psvで指定したTSpecの配列の個数
      fd_SpecSizeマクロを使用すると簡便に算出できる

  • 戻り値

    なし

  • 使用例
    #include <fd.h>
    // 諸元
    const TSpec Spec[] = {
      // id  device    offset         gain   min   max    speed trq.   comp.
      {   1, DEV_RX28, fd_AxisOfs(0), +341, {    0, 1023},   0, 1023, { 1, 1,  32,  32} },
      {   2, DEV_RX28, fd_AxisOfs(1), +341, {    0, 1023},   0, 1023, { 1, 1,  32,  32} },
      {   3, DEV_RX28, fd_AxisOfs(2), +331, {    0, 1023},   0, 1023, { 1, 1,  32,  32} },
    };
    
    // ホームポジションデータ
    THomePosition HomePosition = { 512, 512, 512};
    
    void main (void) {
      fd_SetSpec (&HomePosition, Spec, fd_SpecSize (Spec));
    }
    
Page Top

fd_GetInitalizedSpec anchor.png

fd_SetSpecによって必要な初期化がなされているかの状態を取得する。

bool fd_GetInitalizedSpec (void);
  • パラメータ

    なし

  • 戻り値

    true: fd_SetSpecによって初期化済み
    false: 未初期化

Page Top

fd_SetHomePosition anchor.png

ホームポジションを再設定する。

void fd_SetHomePosition (const PHomePosition hp);
  • パラメータ
    • const PHomePosition hp

      ホームポジションを保持したTHomePosition構造体の変数のアドレス
      ホームポジションは全ての動作の基準となるアクチュエータの初期位置(0~1023ないし0~4095の値)を定義したものであり角度ではない

  • 戻り値

    なし

Page Top

fd_SetBeepCondition anchor.png

ビープを発音する条件をORで設定する。0の指定ないしデフォルトでは各条件が発生しても無音となる。

void fd_SetBeepCondition (uint8_t beep);
  • パラメータ
    • uint8_t beep

      ビープ発音条件
      各ビットの割り当ては以下の通り

      #define FD_BEEP_BOOTUP     (1 << 0)   // 起動直後
      #define FD_BEEP_LOWVOLTAGE (1 << 1)   // 低電圧検出
      #define FD_BEEP_PACKETERR  (1 << 2)   // パケットエラーないしアラーム
      #define FD_BEEP_MMI        (1 << 3)   // DIP/PB操作時
  • 戻り値

    なし

  • 使用例
    #include <fd.h>
    
    void main (void) {
      // 全部入り
      fd_SetBeepCondition (FD_BEEP_MMI | FD_BEEP_PACKETERR | FD_BEEP_LOWVOLTAGE | FD_BEEP_BOOTUP);
      fd_SetUVThreshold (7.4);
    }
    
Page Top

fd_SetUVThreshold anchor.png

FDIII-HCに印加される電源の電圧低下を検出する際の閾値を設定する。電圧低下を検出するとfd_SetBeepConditionにてFD_BEEP_LOWVOLTAGEが指定されている際にアラーム音が発生する他、デバイスとの通信を伴う一部のAPIが実際の処理を行わずに呼び出し元に戻る。

void fd_SetUVThreshold (float PilotVoltage);
  • パラメータ
    • float PilotVoltage

      電圧[V]を実数で指定
      デフォルトは0

  • 戻り値

    なし

Page Top

fd_GetPresentVoltage anchor.png

FDIII-HCに供給されている電源の電圧を取得する。

uint32_t fd_GetPresentVoltage (void);
  • パラメータ

    なし

  • 戻り値

    電圧[V]の10倍値

Page Top

fd_SetLed anchor.png

FDIII-HCに搭載されたLED2(橙色)を点灯・消灯する。

void fd_SetLed (bool On);
  • パラメータ
    • bool On

      true: LED点灯
      false: LED消灯

  • 戻り値

    なし

  • 使用例
    #include <fd.h>
    
    void main (void) {
      bool led = false;
      while (!fd_rx_buff ()) {
        // LED点滅
        fd_SetLed (led = !led);
        // PB1の押下で'.'を送信
        if (fd_GetPB ()) fd_putc ('.');
        // DIPスイッチの値でウェイトを変更
        fd_Wait ((fd_GetDIP () + 1) * 50);
      }
    }
    
Page Top

fd_GetPB anchor.png

FDIII-HCに搭載されたプッシュボタン(PB1)の状態を取得する。

bool fd_GetPB (void);
  • パラメータ

    なし

  • 戻り値

    true: DOWN
    false: UP

Page Top

fd_GetDIP anchor.png

FDIII-HCに搭載されたディップスイッチ(DIP1)の状態を取得する。

uint8_t fd_GetDIP (void);
  • パラメータ

    なし

  • 戻り値

    0~15

Page Top

fd_GetAcceleration anchor.png

FDIII-HCに搭載された3軸加速度センサの値を取得する。
なお、取得する値には個体差が含まれるため、使用状況に応じて適宜補正する事を推奨する。

void fd_GetAcceleration (uint16_t *v);
  • パラメータ
    • uint16_t *v

      取得した値を保存する3要素の配列のアドレスを指定し、[0]にx軸、[1]にy 軸、[2]にz軸の値が保存される
      各軸とも図の矢印方向を重力方向と平行に位置した場合約511、重力方向と一致させた場合約613(1g≒102)の値が得られる
      最大3g程度まで計測可能

      fdiii-hc_acceldir.png
  • 戻り値

    なし

  • 使用例
    #include <fd.h>
    
    void main (void) {
      uint16_t acc[3];
      while (!fd_rx_buff ()) {
        fd_GetAcceleration (acc);
        fd_printf ("\r %3d %3d %3d\33[K", acc[0], acc[1], acc[2]);
        fd_Wait (100);
      }
    }
    
Page Top

fd_ExtractMaxAngleDiffByDeg anchor.png

現在の相対角度と指定ポーズの最大角度差を抽出する。

int fd_ExtractMaxAngleDiffByDeg (const PPose Pose, PApplyPart pap);
  • パラメータ
    • const PPose Pose

      1つのポーズを保持したTPose構造体の変数のアドレス

    • PApplyPart pap

      適用する部位を指定したTApplyPart構造体の変数のアドレス

  • 戻り値

    角度(deg)の10倍値

  • 使用例
    #include <fd.h>
    
    // 諸元
    TSpec Spec[] = {{   1, DEV_RX28, fd_AxisOfs(0), +341, {    0, 1023},   0, 1023, { 1, 1,  32,  32} },};
    // 適用部位
    TApplyPart mypart = { Priority: 1, PartNum:  1, Part:{ fd_AxisOfs(0), }};
    // ホームポジション
    THomePosition HomePosition = { 512 };
    // ホームポジションへ移行するモーション
    TPose GoHome[] = { { Structure: { 0}, ADJ_SACC_SDECEL, Div:1000 }};
    
    void main (void) {
      int Maxdiff;
      DX_ChangeBaudrate (1000000);
      // 諸元設定
      fd_SetSpec (&HomePosition, Spec, fd_SpecSize (Spec));
      // 目標角度との差を抽出
      Maxdiff = fd_ExtractMaxAngleDiffByDeg (GoHome, &mypart);
      // 差を適当に時間換算
      GoHome[0].Div = Maxdiff * 2;
      // モーションの再生
      if (fd_PlayMotion (GoHome, 1, fd_MSize (GoHome), 100, &mypart)) {
        // 再生中なら待つ
        while (fd_GetMotionStat (&mypart) && !fd_rx_buff ()) fd_Wait (10);
      }
      // モーション再生を停止
      fd_StopMotion (&mypart);
    }
    
Page Top

fd_PlayMotion anchor.png

複数のポーズで構成されたモーションを指定された部位で再生し、即時復帰する。モーションは紙芝居を動きのあるアニメーション化するのと似ており、ポーズ間をスムーズにつなぐ処理を自動的に行う。また最初のポーズへ移行する際は現在の姿勢が基準となる。

fdiii-hc_motion.png

実際のポーズ間の補間は指定される遷移時間内に数ms程度の間隔で位置の指令を小刻みに行う事で実現しているため、その周期で若干のトルクリプルが生じる場合がある。また、指令にはSYNCインストラクションを使用しており、アクチュエータへ指令が確実に伝わったかどうかの判定は行っていない。
なお、予めfd_SetSpecでホームポジションと使用するアクチュエータの情報を設定しておく必要がある。
fd_SetUVThresholdで指定された電圧を下回ると、その間の補間データの送信は行われない。

bool fd_PlayMotion (PPose Motion, short StartPoint, short EndPoint, uint16_t Speed, PApplyPart ApplyPart);
  • パラメータ
    • PPose Motion

      再生するモーションデータが保存されたTPose構造体の変数のアドレス
      サポートするポーズ数は最大20

    • short StartPoint

      1~n: モーションデータの再生開始ポーズ位置

    • short EndPoint

      1~n: モーションデータの再生終了ポーズ位置

    • uint16_t Speed

      モーションの再生スピードを%で指定
      100でTPoseのDivに設定された時間、50でDivに設定された半分の時間(Div = 1000なら0.5秒)で再生
      200でDivに設定された2倍の時間(Div = 1000なら2秒)で再生

    • PApplyPart ApplyPart

      モーションを適用する部位を指定したTApplyPart構造体の変数のアドレス
      モーションの動作中はApplyPartが全ての情報を持つ

  • 戻り値

    true: モーションの設定及び再生の開始に成功
    false: 失敗

  • 使用例
Page Top

fd_StopMotion anchor.png

指定部位でモーションが再生中であれば、現在位置で中断させる。何らかの要因で停止が検出できない場合でも、最低1秒間は停止処理を行う。

bool fd_StopMotion (const PApplyPart pap);
  • パラメータ
    • const PApplyPart pap

      モーションを適用する部位を指定したTApplyPart構造体の変数のアドレス

  • 戻り値

    true: 停止成功
    false: 停止失敗(タイムアウト)

Page Top

fd_GetMotionStat anchor.png

指定部位でモーションが再生中かを取得する。

bool fd_GetMotionStat (const PApplyPart pap);
  • パラメータ
    • const PApplyPart pap

      モーションを適用する部位を指定したTApplyPart構造体の変数のアドレス

  • 戻り値

    true: 再生中
    false: 停止中

Page Top

fd_SendMomentMotion anchor.png

1つのポーズを指定された部位で再生し、即時復帰する。fd_PlayMotionとの違いは補間制御を全く行わない事にあり、設定された角度を直接指令する。また、補間方式や遷移時間が必要ないため、TPoseではなくTStructureで指定する。
予めfd_SetSpecでホームポジションと使用するアクチュエータの情報を設定しておく必要がある。
fd_SetUVThresholdで指定された電圧を下回ると、その間のデータ送信は行われない。
また、一度呼び出すとそれ以後は適用した部位にモーション実行中のフラグが立つため、使用後はfd_StopMotionでフラグを落とす事を推奨する。

bool fd_SendMomentMotion (const PStructure sv, PApplyPart pap);
  • パラメータ
    • const PStructure sv

      送信する角度データを保存したTStructure構造体の変数のアドレス

    • PApplyPart pap

      モーションを適用する部位を指定したTApplyPart構造体の変数のアドレス

  • 戻り値

    true: 成功
    false: 失敗

Page Top

fd_AssistMotionEdit anchor.png

軸の角度を都度取得して一連のモーションを作成手法(ティーチング)が採られるケースがある。本APIではモーションデータを動的に作成する場合に、それらの一部の機能を補助する。
実際には他のAPIを併用した上で、モーションエディタとしてプログラムを構成する必要がある。
fd_SetUVThresholdで指定された電圧を下回ると、通信にかかる一部機能が正常に完了しない。

bool fd_AssistMotionEdit (TEdCmd cmd, int *pos, int *page, PPose Pose, PApplyPart pap);
  • パラメータ
    • TEdCmd cmd

      実行する処理

    • int *pos

      0: 空
      1~20: 現在対象としているポーズ位置

    • int *page

      0: 空
      1~20: キャプチャないし指定されたポーズ数(配列要素数)

    • PPose Pose

      作成するモーションデータが保存されたTPose構造体の変数のアドレス
      サポートするポーズ数は最大20

    • PApplyPart pap

      対象の部位を指定したTApplyPart構造体の変数のアドレス

  • 戻り値

    true: 成功
    false: 失敗

Page Top

fd_ConvDeg2Pos anchor.png

TStructureに設定されたホームポジションからの相対角度を絶対位置に変換する。fd_ConvPos2Degの逆。
予めfd_SetSpecでホームポジションと使用するアクチュエータの情報を設定しておく必要がある。

bool fd_ConvDeg2Pos (PStructure deg, PStructure pos, PApplyPart pap, bool limit);
  • パラメータ
    • PStructure deg

      変換元の角度を保存したTStructure構造体の変数のアドレス

    • PStructure pos

      変換先のTStructure構造体の変数のアドレス

    • PApplyPart pap

      変換対象の部位を指定したTApplyPart構造体の変数のアドレス

    • bool limit

      true: 変換後の位置情報をTSpec内のTOpRangeで指定された動作範囲内に収める
      false: 変換後の位置情報をそのまま適用する

  • 戻り値

    true: 成功
    false: 失敗

Page Top

fd_ConvPos2Deg anchor.png

TStructureに設定された絶対位置をホームポジションからの相対角度に変換する。fd_ConvDeg2Posの逆。
予めfd_SetSpecでホームポジションと使用するアクチュエータの情報を設定しておく必要がある。

bool fd_ConvPos2Deg (PStructure pos, PStructure deg, PApplyPart pap);
  • パラメータ
  • 戻り値

    true: 成功
    false: 失敗

Page Top

fd_GetIDbyOffset anchor.png

オフセットアドレスからTSpecに記述されたIDを抽出する。
予めfd_SetSpecでホームポジションと使用するアクチュエータの情報を設定しておく必要がある。

int fd_GetIDbyOffset (short *ofs);
  • パラメータ
    • short *ofs

      オフセットアドレス

  • 戻り値

    -1: 取得失敗
    0~: TSpecで指定されたID

Page Top

fd_GetSpecIndexbyOffset anchor.png

オフセットアドレスからTSpecの配列要素のインデックスを抽出する。
予めfd_SetSpecでホームポジションと使用するアクチュエータの情報を設定しておく必要がある。

int fd_GetSpecIndexbyOffset (short *ofs);
  • パラメータ
    • short *ofs

      オフセットアドレス

  • 戻り値

    -1: 取得失敗
    0~: オフセットが該当するTSpecの配列のインデックス

Page Top

fd_CheckDXAlarmState anchor.png

TSpecで定義されたネットワークに接続される全デバイスのステータスをチェックする。
予めfd_SetSpecでホームポジションと使用するアクチュエータの情報を設定しておく必要がある。

bool fd_CheckDXAlarmState (PAlarmStatus stat, int *num);
  • パラメータ
  • 戻り値

    true: 成功
    false: 失敗

Page Top

fd_LockDXParam anchor.png

指定された部位のアクチュエータのみに対して、EEPROMエリアの書き換え禁止を指令する。一度書き換え禁止を行うと、アクチュエータを再起動しない限りEEPROMエリアの書き換えは行えない。
予めfd_SetSpecでホームポジションと使用するアクチュエータの情報を設定しておく必要がある。
fd_SetUVThresholdで指定された電圧を下回ると、実際の処理を行わない。

bool fd_LockDXParam (PApplyPart pap);
  • パラメータ
  • 戻り値

    true: 成功
    false: 失敗

Page Top

fd_SetDXEnableControl anchor.png

指定された部位のアクチュエータのみに対して、位置決め制御の開始・停止を指令する。
予めfd_SetSpecでホームポジションと使用するアクチュエータの情報を設定しておく必要がある。
fd_SetUVThresholdで指定された電圧を下回ると、実際の処理を行わない。

bool fd_SetDXEnableControl (bool en, PApplyPart pap);
  • パラメータ
    • bool en

      true: 位置決め制御開始 (出力軸が現在位置でロック)
      false: 位置決め制御停止 (出力軸がフリー)

    • PApplyPart pap

      適用する部位を指定したTApplyPart構造体の変数のアドレス

  • 戻り値

    true: 成功
    false: 失敗

Page Top

fd_SetDXTorqueLimit anchor.png

指定された部位のアクチュエータのみに対して、トルクリミッタの制限値を設定する。
予めfd_SetSpecでホームポジションと使用するアクチュエータの情報を設定しておく必要がある。
fd_SetUVThresholdで指定された電圧を下回ると、実際の処理を行わない。

bool fd_SetDXTorqueLimit (uint16_t t, PApplyPart pap);
  • パラメータ
    • uint16_t t

      0~1023: トルクリミッタの制限値

    • PApplyPart pap

      適用する部位を指定したTApplyPart構造体の変数のアドレス

  • 戻り値

    true: 成功
    false: 失敗

Page Top

fd_GetDXCurrentAngleByPos anchor.png

指定された部位の現在の絶対位置を取得する。ホームポジションからの相対角度で取得する場合はfd_GetDXCurrentAngleByDegを使用する。
予めfd_SetSpecでホームポジションと使用するアクチュエータの情報を設定しておく必要がある。
fd_SetUVThresholdで指定された電圧を下回ると、実際の処理を行わない。

bool fd_GetDXCurrentAngleByPos (PStructure angle, PApplyPart pap);
  • パラメータ
  • 戻り値

    true: 成功
    false: 失敗

  • 使用例
    #include <fd.h>
    
    // 諸元
    const TSpec Spec[] = {
      // id  device    offset                      gain   min   max
      {   1, DEV_RX28, fd_AxisOfs(0), +341, {    0, 1023}},
      {   2, DEV_RX28, fd_AxisOfs(1), +341, {    0, 1023}},
    };
    // 適用部位
    TApplyPart mypart = {
      Priority: 1,
      PartNum:  2,
      Part:{
         fd_AxisOfs(0),
         fd_AxisOfs(1),
      }
    };
    // ホームポジション
    THomePosition hp = { 512, 512};
    
    void main (void) {
      DX_ChangeBaudrate (1000000);
      fd_SetSpec (&hp, Spec, fd_SpecSize (Spec));
    
      // 現在位置を取得しその値でホームポジションを更新
      if (fd_GetDXCurrentAngleByPos (&hp, &mypart)) fd_SetHomePosition (&hp);
    }
    
Page Top

fd_GetDXCurrentAngleByDeg anchor.png

指定された部位のホームポジションからの相対角度を取得する。絶対位置で取得する場合はfd_GetDXCurrentAngleByPosを使用する。
予めfd_SetSpecでホームポジションと使用するアクチュエータの情報を設定しておく必要がある。
fd_SetUVThresholdで指定された電圧を下回ると、実際の処理を行わない。

bool fd_GetDXCurrentAngleByDeg (PStructure angle, PApplyPart pap);
  • パラメータ
  • 戻り値

    true: 成功
    false: 失敗

Page Top

サウンド anchor.png

FDIII-HCのブザーを使用して任意の音階の発音やメロディーを奏でることが出来ます。
なお、再生中であってもfd_SetBeepConditionで設定された条件が優先されて、再生が中断する場合があります。

Page Top

fd_PlayMusic anchor.png

独自のMML(Music Macro Language)もどきで譜面ライクに音楽を記述し、再生させ即時復帰する。再生がMMLの最終命令を経過すると再生終了となる。

void fd_PlayMusic (bool force, const char *MML);
  • パラメータ
    • bool force

      true: 既に再生中であれば停止した後に再生
      false: 既に再生中であれば再生しない

    • const char *MML

      音階: Cx,Dx,Ex,Fx,Gx,Ax,Bx (xは0-9の音長指定もしくは+,-,#)
      休符: Rx (xは音長)
      音長指定: Lx (xは音長)
      シャープ: #,+
      フラット: -
      テンポ: Tx (x:0-9)
      オクターブ: Ox (x:0-5)
      1オクターブUP: <
      1オクターブDOWN: >

      [音長]
      0: 1(全音符)
      1: 2分音符
      2: 3分音符
      3: 4分音符
      4: 6分音符
      5: 8分音符
      6: 12分音符
      7: 16分音符
      8: 24分音符
      9: 32分音符

  • 戻り値

    なし

  • 使用例
    #include <fd.h>
    
    void main (void) {
      fd_PlayMusic (
        false,
        "o1t3 c7<c7>>a7<a7>b-7<b-7r5r3 c7<c7>>a7<a7>b-7<b-7r5r3"
        ">f7<f7>d7<d7>e-7<e-7r5r3 >f7<f7>d7<d7>e-7<e-7r5r5 e-8d8d-8"
        "c7r7e-7r7d7r7>a-7r7g7r7<d-7r7 c8g-8f8e8b-8a8a-8r8e-8r8>b8"
        "r8b-8r8a8r8a-8r8"
      );
      while (fd_GetMusicStat ()) fd_Wait (10);
    }
    
Page Top

fd_GetMusicStat anchor.png

MMLが再生されているかを取得する。

bool fd_GetMusicStat (void);
  • パラメータ

    なし

  • 戻り値

    ture: 再生中
    false: 停止中

Page Top

fd_ToneOn anchor.png

指定の音階を連続的に発音する。MMLが再生中の場合は無視される。

void fd_ToneOn (int Oct, int Tone);
  • パラメータ
    • int Oct

      0~5: オクターブ

    • int Tone

      0~11: C,C#,D,D#,E,F,F#,G,G#,A,A#,Bの音階に相当

  • 戻り値

    なし

  • 使用例
    #include <fd.h>
    
    void main (void) {
      int i;
      for (i = 0; i < 72; i++) {
        fd_ToneOn (i / 12, i % 12);
        fd_Wait (50);
      }
      fd_ToneOff ();
    }
    
Page Top

fd_ToneOff anchor.png

fd_ToneOnにより発音中であれば停止する。

void fd_ToneOff (void);
  • パラメータ

    なし

  • 戻り値

    なし

Page Top

コンソール anchor.png

FDIII-HCでは主にUSBを介したシリアル通信を使用してプログラムの転送や実行中のプログラムのモニタ等を行うため、簡便に文字や文字列の送受信を行うためのAPIを用意しています。USBの他にBluetoothのSPP及びDBGU(TTLレベル)によるシリアル通信も使用できます。
なお、コンソールAPIでは各コンソール系I/Fを個別に取り扱う事ができません。

Page Top

fd_AssignUARTToConsole anchor.png

FDIII-HCのCN14をコンソールとして初期化する。FDIII-DISPLAYを接続した際は、115200bpsを指定して初期化する。
なお、指定されたボーレートと実際にライブラリ内で適用されるボーレートは誤差が生じるので、戻り値を確認して使用可能なボーレートであるかを判断する必要がある。
また、内部の送受信バッファは各々100バイトである。

uint32_t fd_AssignUARTToConsole (uint32_t dbgu_baud);
  • パラメータ
    • uint32_t dbgu_baud

      ボーレート[bps]

  • 戻り値

    0: 失敗
    1~: 近似された実ボーレート

Page Top

fd_DeassignUART anchor.png

UARTに割り当てた機能を無効化する。

void fd_DeassignUART (void);
  • パラメータ

    なし

  • 戻り値

    なし

Page Top

fd_AssignBTToConsole anchor.png

FDIII-HCのBluetoothをコンソールとして初期化する。
なお、Bluetoothの動作自体はFDIII-HCのブートローダで設定されたBluetoothの接続モードに依存する。
また、内部の送受信バッファは各々200バイトである。

void fd_AssignBTToConsole (void);
  • パラメータ

    なし

  • 戻り値

    なし

Page Top

fd_DeassignBT anchor.png

Bluetoothに割り当てた機能(コンソール・SIXAXIS・RC-100B)を無効化する。

void fd_DeassignBT (void);
  • パラメータ

    なし

  • 戻り値

    なし

Page Top

fd_rx_buff anchor.png

受信バッファにあるデータ数を取得する。受信バッファからデータを取り出すにはfd_getcを使用する。
なお、複数のI/Fをコンソールとしてアサインしている場合は、最後に入力があったI/Fの受信バッファに保存されているデータ数となる。

int fd_rx_buff (void);
  • パラメータ

    なし

  • 戻り値

    バッファに保存された受信データのバイト数

  • 使用例
    #include <fd.h>
     
    void main (void) {
      int i, n = 0;
      char c, s[20];
      // DBGUをコンソールに
      fd_AssignUARTToConsole (115200);
      // Bluetoothをコンソールに
      fd_AssignBTToConsole ();
      // PB1が押されるまでループ
      while (!fd_GetPB ()) {
        // 受信バッファにデータがあるまでループ
        while (fd_rx_buff ()) {
          // 1バイト取り出して送信
          fd_putc (c = fd_getc ());
          switch (c) {
            // 文字列送信
            case '0': fd_puts ("\nHELLO!\n"); break;
            // 書式付文字列送信
            case '1': fd_printf ("\nn++=%d\n", n++); break;
            // 文字列受信
            case '2': fd_puts ("\ns<-"); fd_gets (s, 19); fd_puts ("\n"); fd_puts (s); break;
            // 書式付文字列入力
            case '3': fd_puts ("\ni<-"); fd_scanf ("%d", &i); fd_printf ("\nd=%d\n", i); break;
          }
        }
        fd_Wait (10);
      }
    }
    
Page Top

fd_rx_purge anchor.png

受信バッファにあるデータを消去する。

void fd_rx_purge (void);
  • パラメータ

    なし

  • 戻り値

    なし

Page Top

fd_putc anchor.png

指定された1バイトのデータを送信する。

void fd_putc (const char c);
  • パラメータ
    • const char c

      1バイトの送信する文字

  • 戻り値

    なし

Page Top

fd_getc anchor.png

受信バッファから1バイト取得する。受信バッファが空の場合は1バイト受信するまで返らない。

char fd_getc (void);
  • パラメータ

    なし

  • 戻り値 受信バッファに保存された一番古い1バイトのデータ
Page Top

fd_puts anchor.png

指定された文字列を送信する。

void fd_puts (const char *s);
  • パラメータ
    • const char *s

      送信文する字列のアドレス

  • 戻り値

    なし

Page Top

fd_gets anchor.png

指定された文字数以下の文字列を指定バッファに受信する。改行でそれ以前に入力された文字列を指定バッファにコピーし入力文字数を返す。エスケープで処理をキャンセルし0を返す。
バイナリデータの受信には使用できない。

int fd_gets (char *s, int len);
  • パラメータ
    • char *s

      受信した文字列を保存するバッファのアドレス

    • int len

      最大受信文字数

  • 戻り値

    受信した文字のバイト数

Page Top

fd_printf anchor.png

指定された書式付きの文字列を送信する。

int fd_printf (const char *, ...);
  • パラメータ
  • 戻り値
Page Top

fd_scanf anchor.png

書式付入力を行う。コンソールからの入力を、指定された書式に従って変数へ読み込む。

int fd_scanf (const char * fmt, ...);
  • パラメータ
  • 戻り値
Page Top

fd_cls anchor.png

コンソールとして使用しているターミナル上のテキストを全消去する。

void fd_cls (void);
  • パラメータ

    なし

  • 戻り値

    なし

Page Top

fd_locate anchor.png

コンソールとして使用しているターミナル上のカーソル座標を指定する。
SIMPLE TERMとLCDの座標系が異なるため、直接エスケープシーケンスで座標を指定せずに本APIで代用する事を推奨する。

void fd_locate (int x, int y);
  • パラメータ
    • int x

      1~80: 画面左上を1としたX座標

    • int y

      1~24: 画面左上を1としたY座標

  • 戻り値

    なし

Page Top

LCD描画 anchor.png

オプションのLCDを対象としたAPIで、主にグラフィックの描画を行います。
解像度は内部固定で、左上が(0,0)、右下が(319,239)の座標を持ちます。基本的にこの座標の範囲外の値を指定した場合は描画処理を行いません。

Page Top

fd_LCDExists anchor.png

LCDが接続されているかを検出する。検出に成功した場合でも、処理に少なくとも数十msかかる。
予めfd_AssignUARTToConsoleを使用してCN14を115200[bps]の通信速度で初期化しておく必要がある。

bool fd_LCDExists (void);
  • パラメータ

    なし

  • 戻り値

    true: 検出成功
    false: 検出失敗

Page Top

fd_LCDSetFontSize anchor.png

LCDのテキストプレーンの解像度を変更する。
予めfd_AssignUARTToConsoleを使用してCN14を115200[bps]の通信速度で初期化しておく必要がある。

void fd_LCDSetFontSize (uint8_t sz);
  • パラメータ
    • uint8_t sz

      0: 文字サイズ小 (最大80x30文字)
      1: 文字サイズ中 (最大64x20文字) デフォルト
      2: 文字サイズ大 (最大40x15文字)

  • 戻り値

    なし

Page Top

fd_LCDSelectPictureBuff anchor.png

LCDに備わった4枚のグラフィックバッファのうち、指定されたバッファを表示する。
予めfd_AssignUARTToConsoleを使用してCN14を115200[bps]の通信速度で初期化しておく必要がある。

void fd_LCDSelectPictureBuff (uint8_t plane);
  • パラメータ
    • uint8_t plane

      0~3: バッファ番号

  • 戻り値

    なし

Page Top

fd_LCDSetBGColor anchor.png

LCDの指定されたグラフィックバッファを表示対象とし、背景色を設定する。
予めfd_AssignUARTToConsoleを使用してCN14を115200[bps]の通信速度で初期化しておく必要がある。

void fd_LCDSetBGColor (TColor color, uint8_t plane);
  • パラメータ
    • TColor color

      背景色

    • uint8_t plane

      0~3: バッファ番号

  • 戻り値

    なし

Page Top

fd_LCDDrawPixel anchor.png

指定された座標のドットをLCDに描画する。
LCDモジュールのファームウェアに依存し、初期バージョンのファームウェアでは描画されない。
予めfd_AssignUARTToConsoleを使用してCN14を115200[bps]の通信速度で初期化しておく必要がある。

void fd_LCDDrawPixel (uint16_t X, uint16_t Y, TColor color, uint8_t plane);
  • パラメータ
    • uint16_t X

      0~319: X座標

    • uint16_t Y

      0~239: Y座標

    • TColor (*func)(int x, int y)

      指定座標の色を返すコールバック関数のアドレス

    • uint8_t plane

      0~3: バッファ番号

  • 戻り値

    なし

Page Top

fd_LCDDrawLine anchor.png

指定された(X0,Y0)と(X1,Y1)の座標を結ぶ直線をLCDに描画する。
予めfd_AssignUARTToConsoleを使用してCN14を115200[bps]の通信速度で初期化しておく必要がある。

void fd_LCDDrawLine (uint16_t X0, uint16_t Y0, uint16_t X1, uint16_t Y1, TColor color, uint8_t plane);
  • パラメータ
    • uint16_t X0

      0~319: 始点のX座標

    • uint16_t Y0

      0~239: 始点のY座標

    • uint16_t X1

      0~319: 終点のX座標

    • uint16_t Y1

      0~239: 終点のY座標

    • TColor color

    • uint8_t plane

      0~3: バッファ番号

  • 戻り値

    なし

Page Top

fd_LCDDrawSquare anchor.png

指定された(X0,Y0)と(X1,Y1)の座標を対角に持つ矩形をLCDに描画する。
LCDモジュールのファームウェアに依存し、初期バージョンのファームウェアでは「塗りつぶしなし」が描画されない。
予めfd_AssignUARTToConsoleを使用してCN14を115200[bps]の通信速度で初期化しておく必要がある。

void fd_LCDDrawSquare (uint16_t X0, uint16_t Y0, uint16_t X1, uint16_t Y1, bool fill, TColor color, uint8_t plane);
  • パラメータ
    • uint16_t X0

      0~319: 始点のX座標

    • uint16_t Y0

      0~239: 始点のY座標

    • uint16_t X1

      0~319: 終点のX座標

    • uint16_t Y1

      0~239: 終点のY座標

    • bool fill

      true: 塗りつぶしあり
      false: 塗りつぶしなし

    • TColor color

    • uint8_t plane

      0~3: バッファ番号

  • 戻り値

    なし

Page Top

fd_LCDDrawElipse anchor.png

指定された(X,Y)を中心とした楕円をLCDに描画する。
LCDモジュールのファームウェアに依存し、初期バージョンのファームウェアでは描画されない。
予めfd_AssignUARTToConsoleを使用してCN14を115200[bps]の通信速度で初期化しておく必要がある。

void fd_LCDDrawElipse (uint16_t X, uint16_t Y, uint16_t hRadius, uint16_t vRadiuse, bool fill, TColor color, uint8_t plane);
  • パラメータ
    • uint16_t X

      0~319: 中心のX座標

    • uint16_t Y

      0~239: 中心のY座標

    • uint16_t hRadius

      1~319: 水平方向の半径

    • uint16_t vRadiuse

      1~239: 垂直方向の半径

    • bool fill

      true: 塗りつぶしあり
      false: 塗りつぶしなし

    • TColor color

    • uint8_t plane

      0~3: バッファ番号

  • 戻り値

    なし

Page Top

fd_LCDDrawPicture anchor.png

指定された矩形領域に任意の画像をLCDに描画する。ピクセル単位で描画を行うため、処理に時間を要する。
予めfd_AssignUARTToConsoleを使用してCN14を115200[bps]の通信速度で初期化しておく必要がある。

bool fd_LCDDrawPicture (uint16_t X, uint16_t Y, uint16_t width, uint16_t height, TColor (*func)(int x, int y), uint8_t plane);
  • パラメータ
    • uint16_t X

      0~319: 描画領域左上のX座標

    • uint16_t Y

      0~239: 描画領域左上のY座標

    • uint16_t width

      0~319: 描画領域の幅 X+widthが319以下になるよう指定する

    • uint16_t height

      0~239: 描画領域の高さ Y+heightが239以下になるよう指定する

    • TColor (*func)(int x, int y)

      指定座標の色を返すコールバック関数のアドレス

    • uint8_t plane

      0~3: バッファ番号

  • 戻り値

    true: 描画処理対象
    false: 描画処理対象外

  • 使用例
    #include <fd.h>
    #include <math.h>
    
    const TColor
      black   = {R: 0, G: 0, B: 0},
      yellow  = {R:31, G:31, B: 0};
    
    void elipse (uint16_t X, uint16_t Y, uint16_t hRadius, uint16_t vRadius, TColor color, uint8_t plane) {
      int hDia = hRadius << 1, vDia = vRadius << 1;
    
      TColor mydraw (int x, int y) {
        if (fd_GetShutdownState ()) return (TColor)(uint16_t)0xffff;
        if (x < hRadius && y < vRadius) {
          if (y < vRadius + sqrt (pow (vRadius, 2.0) - pow ((x - hRadius), 2.0) * pow (vRadius, 2.0) / pow (hRadius, 2.0)) && x < hRadius - sqrt (pow (hRadius, 2.0) - pow ((y - vRadius), 2.0) * pow (hRadius, 2.0) / pow (vRadius, 2.0))) return (TColor){t:1};
          else return color;
        } else {
          if (y < vRadius + sqrt (pow (vRadius, 2.0) - pow ((x - hRadius), 2.0) * pow (vRadius, 2.0) / pow (hRadius, 2.0)) && x < hRadius + sqrt (pow (hRadius, 2.0) - pow ((y - vRadius), 2.0) * pow (hRadius, 2.0) / pow (vRadius, 2.0))) return color;
          else return (TColor){t:1};
        }
      }
      if ((plane > 3) || (hDia <= 0) || (vDia <= 0)) return;
      fd_LCDDrawPicture (X - hRadius, Y - vRadius, hDia, vDia, &mydraw, plane);
    }
    
    void main (void) {
      fd_AssignUARTToConsole (115200);
      fd_LCDSelectPictureBuff (0);
      fd_LCDSetBGColor (black, 0);
      elipse (160, 120, 100, 100, yellow, 0);
    }
    
Page Top

RC-100B anchor.png

FDIII-HCとRC-100B(FREEDOM Jr.III Wireless Controller)をBluetoothで接続し、使い慣れたゲーム用ジョイスティックライクなコントローラを利用した簡易的な操縦系や、FDIII-HCでは不足している外部からの入力系の補助としてとして使用できます。
なお、予めFDIII-HCのブートローダでBluetoothをSLAVEモードにし、RC-100Bとペアリングしておく必要があります。

Page Top

fd_AssignBTToRC100 anchor.png

BluetoothをRC-100Bとの接続専用に初期化する。以下に示すRC-100B用APIを使用する前に1度だけ実行する必要がある。
以後RC-100B用API以外の使用目的(コンソールやSIXAXIS)でBluetoothを利用する事はできない。

uint32_t fd_AssignBTToRC100 (void);
  • パラメータ

    なし

  • 戻り値

    ボーレート[bps]

Page Top

fd_ClearRC100Buff anchor.png

受信バッファをクリアする。

void fd_ClearRC100Buff (void);
  • パラメータ

    なし

  • 戻り値

    なし

Page Top

fd_GetRC100Buff anchor.png

受信バッファにあるデータ数を取得する。RC-100Bに備わったボタンの状態が変化すると、その都度バッファにその状態が蓄えられる。

uint16_t fd_GetRC100Buff (void);
  • パラメータ

    なし

  • 戻り値

    データ数

Page Top

fd_GetRC100Data anchor.png

受信バッファから最も古い1データを取得する。受信バッファが空の場合はボタンの変化があるまで返らない。

void fd_GetRC100Data (Prc100Stat c);
  • パラメータ
  • 戻り値

    なし

Page Top

fd_GetRC100Current anchor.png

受信バッファから最新の1データを取得する。受信待ちは行わない。

void fd_GetRC100Current (Prc100Stat c);
  • パラメータ
  • 戻り値

    なし

Page Top

SIXAXIS anchor.png

FDIII-HCのBluetoothにはPlayStation®3用のワイヤレスコントローラであるSIXAXISないしDUALSHOCK®3との接続機能が備わっています。RC-100Bにはないアナログスティックや加速度センサが内蔵されており、それらの信号も取り込むことが可能です。
使い慣れたゲーム用コントローラを利用した簡易的な操縦系や、FDIII-HCでは不足している外部からの入力系の補助としてとして使用してください。
なお、予めFDIII-HCのブートローダでBluetoothをSIXAXISモードにし、更にSIXAXIS自体にFDIII-HCのMACアドレスを登録しておく必要があります。

Page Top

fd_AssignBTToSIXAXIS anchor.png

BluetoothをSIXAXISないしDUALSHOCK3との接続専用に初期化する。以下に示すSIXAXIS用APIを使用する前に1度だけ実行する必要がある。
以後SIXAXIS用API以外の使用目的(コンソールやRC-100B)でBluetoothを利用する事はできない。

uint32_t fd_AssignBTToSIXAXIS (void);
  • パラメータ

    なし

  • 戻り値

    端末速度[bps]

  • 使用例
    #include <fd.h>
     
    void main (void) {
      // ボタンデータの取得用変数の定義
      static TsixaxisStat rc;
      // BluetoothをSIXAXISの受信に使用
      fd_AssignBTToSIXAXIS ();
      // コンソールの入力がない間ループ
      while (!fd_rx_buff ()) {
        // SIXAXISの受信バッファがある間ループ
        while (fd_GetSIXAXISBuff ()) {
          fd_GetSIXAXISData (&rc);
          fd_printf (
            "\x1b[1;1%d %d %d %d\33[K\n",
            rc[_SIXAXIS_BTN_U].down,
            rc[_SIXAXIS_BTN_D].down,
            rc[_SIXAXIS_BTN_L].down,
            rc[_SIXAXIS_BTN_R].down
          );
        }
        // アナログ値の取得
        fd_printf (
          "\x1b[2;1H %4d %4d %4d %4d\33[K",
          fd_GetSIXAXISAnalog (_SIXAXIS_ANA_LANAH),
          fd_GetSIXAXISAnalog (_SIXAXIS_ANA_LANAV),
          fd_GetSIXAXISAnalog (_SIXAXIS_ANA_RANAH),
          fd_GetSIXAXISAnalog (_SIXAXIS_ANA_RANAV)
        );
        fd_Wait(50);
      }
    }
    
Page Top

fd_ClearSIXAXISBuff anchor.png

受信バッファをクリアする。

void fd_ClearSIXAXISBuff (void);
  • パラメータ

    なし

  • 戻り値

    なし

Page Top

fd_GetSIXAXISBuff anchor.png

受信バッファにあるデータ数を取得する。SIXAXISに備わったボタンの状態が変化すると、その都度バッファにその状態が蓄えられる。

uint16_t fd_GetSIXAXISBuff (void);
  • パラメータ

    なし

  • 戻り値

    データ数

Page Top

fd_GetSIXAXISData anchor.png

受信バッファから最も古い1データを取得する。受信バッファが空の場合はボタンの変化があるまで返らない。

void fd_GetSIXAXISData (PsixaxisStat c);
Page Top

fd_GetSIXAXISCurrent anchor.png

受信バッファから最新の1データを取得する。受信待ちは行わない。

void fd_GetSIXAXISCurrent (PsixaxisStat c);
Page Top

fd_GetSIXAXISAnalog anchor.png

ボタンの押し圧やアナログスティック、加速度センサ等の最新アナログ値を取得する。取得に当たり受信バッファを監視する必要はない。

short fd_GetSIXAXISAnalog (int ch);
  • パラメータ
    • int ch

      _SIXAXIS_ANA_LANAH: 右アナログスティック横
      _SIXAXIS_ANA_LANAV: 右アナログスティック縦
      _SIXAXIS_ANA_RANAH: 左アナログスティック横
      _SIXAXIS_ANA_RANAV: 左アナログスティック縦
      _SIXAXIS_ANA_U: 上ボタン
      _SIXAXIS_ANA_R: 右ボタン
      _SIXAXIS_ANA_D: 下ボタン
      _SIXAXIS_ANA_L: 左ボタン
      _SIXAXIS_ANA_L2: L2ボタン
      _SIXAXIS_ANA_R2: R2ボタン
      _SIXAXIS_ANA_L1: L1ボタン
      _SIXAXIS_ANA_R1: R1ボタン
      _SIXAXIS_ANA_TRIANGLE: △ボタン
      _SIXAXIS_ANA_CIRCLE: ○ボタン
      _SIXAXIS_ANA_CROSS: ×ボタン
      _SIXAXIS_ANA_SQUARE: □ボタン
      _SIXAXIS_ANA_ACCX: x軸加速度
      _SIXAXIS_ANA_ACCY: y軸加速度
      _SIXAXIS_ANA_ACCZ: z軸加速度
      _SIXAXIS_ANA_GYROZ: z軸ジャイロ

  • 戻り値

    指定チャネルに応じた値

Page Top

ホームポジション・モーションファイル管理 anchor.png

ソースコード中にホームポジションやモーションを固定データとして記述してしまうと、それらを調整や編集してもソースプログラムに反映させるのは手動操作となり、反映させるには再度コンパイルしてプログラムをダウンロードし直さなくてはなりません。
本ライブラリではそれらのデータをFDIII-HCに装備したSDカード上のファイルとして扱う事ができるため、データのコピーやバックアップ等がPC等でも行えます。

Page Top

fd_MMSD_Search anchor.png

指定された名前でSDカードに保存されたモーションファイルを検索し、必要に応じてそのデータを取得する。

bool fd_MMSD_Search (const char *Name, PPose Motion, int *page);
  • パラメータ
    • const char *Name

      モーション名 (最大8文字)

    • PPose Motion

      読み出されたモーションデータを保存するTPose構造体の変数のアドレスもしくはNULL

    • int *page

      読み出されたモーションデータのポーズ数を取得するint型の変数のアドレスもしくはNULL

  • 戻り値

    true: 指定モーションファイルが見つかった
    false: 指定モーションファイルが見つからない

Page Top

fd_MMSD_SearchAndPlayMotion anchor.png

指定された名前でSDカードに保存されたモーションファイルを検索し、見つかったら再生する。再生スピードや始点・終点の指示はできない。

bool fd_MMSD_SearchAndPlayMotion (const char *Name, PPose Motion, int *page, const PApplyPart pap);
  • パラメータ
    • const char *Name

      モーション名 (最大8文字)

    • PPose Motion

      読み出されたモーションデータを保存するTPose構造体の変数のアドレス

    • int *page

      読み出されたモーションデータのポーズ数を取得するint型の変数のアドレス

    • const PApplyPart pap

      モーションを適用する部位を指定したTApplyPart構造体の変数のアドレス
      モーションの動作中はApplyPartが全ての情報を持つ

  • 戻り値

    true: 指定モーションファイルが見つかり、再生に成功
    false: 指定モーションファイルが見つからない、もしくは再生に失敗

Page Top

fd_MMSD_Add anchor.png

モーションデータに名前を付けてSDカードに保存する。同名のモーションファイルでの上書き保存はできない。

bool fd_MMSD_Add (const char *Name, PPose Motion, int page);
  • パラメータ
    • const char *Name

      モーション名 (最大8文字)

    • PPose Motion

      書き込むモーションデータが保存されたTPose構造体の変数のアドレス

    • int page

      書き込むモーションデータのポーズ数

  • 戻り値

    ture: 成功
    false: 失敗 (既存モーションファイルとの競合も含む)

Page Top

fd_MMSD_Del anchor.png

指定された名前でSDカードに保存されたモーションファイルを検索し、存在すれば削除する。

bool fd_MMSD_Del (const char *Name);
  • パラメータ

    削除するモーション名 (最大8文字)

  • 戻り値

    ture: 成功
    false: 失敗

Page Top

fd_MMSD_FindFirst anchor.png

SDカード内のモーションファイルの一覧を取得する際の、初期処理及びルートディレクトリへの移動を行う。実際のファイルの一覧取得はfd_MMSD_FindNextが担う。

bool fd_MMSD_FindFirst(void);
  • パラメータ

    なし

  • 戻り値

    true: 検索成功
    false: 検索失敗

  • 使用例
    #include <fd.h>
    
    void main (void) {
      char name[10];
      fd_Wait (2000);
      if (fd_MMSD_FindFirst ()) {
        int page;
        while (fd_MMSD_FindNext (name, NULL, &page)) {
          fd_printf ("[%s,%2d]", name, page);
        }
      }
    }
    
Page Top

fd_MMSD_FindNext anchor.png

モーションファイルの一覧を取得する際の、次のファイルを見つける。モーションファイル名の取得と合わせて、モーションデータの読み込みも同時に行える。
先にfd_MMSD_FindFirstを実行しておく必要がある。

bool fd_MMSD_FindNext (char *Name, PPose Motion, int *page);
  • パラメータ
    • char *Name

      見つかったモーション名を保存するchar *型の変数のアドレス

    • PPose Motion

      見つかったモーションデータを読み込むTPose構造体の変数のアドレス
      もしくはNULL

    • int *page

      見つかったモーションデータのポーズ数を取得するint型の変数のアドレス
      もしくはNULL

  • 戻り値

    true: 取得成功
    false: 取得失敗

Page Top

fd_MMSD_ChangeMotionName anchor.png

指定された名前でSDカードに保存されたモーションファイルを検索し、存在すればモーション名を変更する。

bool fd_MMSD_ChangeMotionName (const char *OldName, const char *NewName);
  • パラメータ
    • const char *OldName
    • const char *NewName
  • 戻り値

    true: 成功
    false: 失敗

Page Top

fd_MMSD_ReadHomePosition anchor.png

SDカードに保存されたホームポジションファイルを検索し、存在すればデータを取得する。

bool fd_MMSD_ReadHomePosition (PHomePosition hp);
  • パラメータ
    • PHomePosition hp

      ホームポジションを保持したTHomePosition構造体の変数のアドレス

  • 戻り値

    true: 成功
    false: 失敗

Page Top

fd_MMSD_WriteHomePosition anchor.png

SDカードにホームポジションデータを保存(上書きも含む)する。

bool fd_MMSD_WriteHomePosition (const PHomePosition hp);
  • パラメータ
    • const PHomePosition hp

      ホームポジションを保持したTHomePosition構造体の変数のアドレス

  • 戻り値

    true: 成功
    false: 失敗

Page Top

Dynamixelプロトコル anchor.png

SpecやApplyPartによるモーションの管理APIでは用意されていないネットワーク上のデバイスの機能を、Dynamixelプロトコルを使用して直接扱うAPIです。
モーションの再生中であっても、センサからのフィードバックを検出したり、特殊なアイテムのデータを読み書きするといった事が可能です。

Page Top

DX_ChangeBaudrate anchor.png

ボーレートを変更する。ここで設定されるボーレートがネットワーク共通の通信速度となり、全てのAPIはこのボーレートを基準にして動作する。
なお、ライブラリ内では静的に1M[bps]で初期化されているため、そのままで支障がなければ特に変更の必要はないが、異なるボーレートのデバイスを使用する場合はfd_SetSpecで諸元を設定するよりも前にボーレートを変更しておく事。

bool DX_ChangeBaudrate (uint32_t baud);
  • パラメータ
    • uint32_t baud

      ネットワークの装置とFDIII-HC間の通信速度[bps]

  • 戻り値

    true: 成功
    false: 失敗 (誤差率が2%を超える、もしくは設定可能範囲外)

Page Top

DX_CalcTimeout anchor.png

ボーレートとステータスパケットのパラメータサイズを元にタイムアウト時間を算定する。

uint32_t DX_CalcTimeout (int num);
  • パラメータ
    • int num

      バイト数

  • 戻り値

    タイムアウト時間[ms]

Page Top

DX_WriteByteData anchor.png

指定されたIDを持つデバイスを対象に、指定アドレスのアイテムに指定された1バイトのデータを書き込む。

bool DX_WriteByteData (uint8_t id, uint8_t adr, uint8_t dat, uint32_t timeout, PDXAlarm errcode);
  • パラメータ
    • uint8_t id

      0~254: 対象デバイスのID

    • uint8_t adr

      0~254: 対象アドレス

    • uint8_t dat

      0~255: 送信データ

    • uint32_t timeout

      0~500: 受信タイムアウト時間[ms]

    • PDXAlarm errcode

      デバイスおよびライブラリのエラーコードを取得するTDXAlarm型の変数のアドレス、もしくはNULL

  • 戻り値

    true: 成功
    false: 失敗

Page Top

DX_WriteWordData anchor.png

指定されたIDを持つデバイスを対象に、指定アドレスのアイテムに指定された1ワード(2バイト)のデータを書き込む。

bool DX_WriteWordData (uint8_t id, uint8_t adr, uint16_t dat, uint32_t timeout, PDXAlarm errcode);
  • パラメータ
    • uint8_t id

      0~254: 対象デバイスのID

    • uint8_t adr

      0~254: 対象アドレス

    • uint16_t dat

      0~65535: 送信データ

    • uint32_t timeout

      0~500: 受信タイムアウト時間[ms]

    • PDXAlarm errcode

      デバイスおよびライブラリのエラーコードを取得するTDXAlarm型の変数のアドレス、もしくはNULL

  • 戻り値

    true: 成功
    false: 失敗

Page Top

DX_WriteBlockData anchor.png

指定されたIDを持つデバイスを対象に、指定アドレスのアイテムを起点に指定されたサイズの連続したデータを書き込む。

bool DX_WriteBlockData (uint8_t id, uint8_t adr, const uint8_t *dat, uint8_t len, uint32_t timeout, PDXAlarm errcode);
  • パラメータ
    • uint8_t id

      0~254: 対象デバイスのID

    • uint8_t adr

      0~254: 対象アドレス

    • const uint8_t *dat

      書き込むデータを保存したuint8_t型の配列のアドレス

    • uint8_t len

      datのバイト数

    • uint32_t timeout

      0~500: 受信タイムアウト時間[ms]

    • PDXAlarm errcode

      デバイスおよびライブラリのエラーコードを取得するTDXAlarm型の変数のアドレス、もしくはNULL

  • 戻り値

    true: 成功
    false: 失敗

Page Top

DX_ReadByteData anchor.png

指定されたIDを持つデバイスを対象に、指定アドレスのアイテムから1バイトのデータを読み出す。

bool DX_ReadByteData (uint8_t id, uint8_t adr, uint8_t *result, uint32_t timeout, PDXAlarm errcode);
  • パラメータ
    • uint8_t id

      0~253: 対象デバイスのID

    • uint8_t adr

      0~254: 対象アドレス

    • uint8_t *result

      読み出したデータを保存するuint8_t型の変数のアドレス

    • uint32_t timeout

      0~500: 受信タイムアウト時間[ms]

    • PDXAlarm errcode

      デバイスおよびライブラリのエラーコードを取得するTDXAlarm型の変数のアドレス、もしくはNULL

  • 戻り値

    true: 成功
    false: 失敗

Page Top

DX_ReadWordData anchor.png

指定されたIDを持つデバイスを対象に、指定アドレスのアイテムから1ワード(2バイト)のデータを読み出す。

bool DX_ReadWordData (uint8_t id, uint8_t adr, uint16_t *result, uint32_t timeout, PDXAlarm errcode);
  • パラメータ
    • uint8_t id

      0~253: 対象デバイスのID

    • uint8_t adr

      0~254: 対象アドレス

    • uint16_t *result

      読み出したデータを保存するuint16_t型の変数のアドレス

    • uint32_t timeout

      0~500: 受信タイムアウト時間[ms]

    • PDXAlarm errcode

      デバイスおよびライブラリのエラーコードを取得するTDXAlarm型の変数のアドレス、もしくはNULL

  • 戻り値

    true: 成功
    false: 失敗

Page Top

DX_ReadBlockData anchor.png

指定されたIDを持つデバイスを対象に、指定アドレスのアイテムを起点に指定されたサイズの連続したデータを読み出す。

bool DX_ReadBlockData (uint8_t id, uint8_t adr, uint8_t *result, uint8_t len, uint32_t timeout, PDXAlarm errcode);
  • パラメータ
    • uint8_t id

      0~253: 対象デバイスのID

    • uint8_t adr

      0~254: 対象アドレス

    • uint8_t *result

      読み出したデータを保存するuint8_t型の配列のアドレス

    • uint8_t len

      読み出すバイト数

    • uint32_t timeout

      0~500: 受信タイムアウト時間[ms]

    • PDXAlarm errcode

      デバイスおよびライブラリのエラーコードを取得するTDXAlarm型の変数のアドレス、もしくはNULL

  • 戻り値

    true: 成功
    false: 失敗

Page Top

DX_WriteSyncData anchor.png

SYNCインストラクションを使用して複数のデバイスの同一アイテムに対して各々異なる値を一括送信する。

bool DX_WriteSyncData (const uint8_t *dat, uint8_t size, PDXAlarm errcode);
  • パラメータ
    • const uint8_t *dat

      SYNCインストラクションのパラメータ部分を記述したuint8_t型の配列のアドレス

    • uint8_t size

      datのバイト数

    • PDXAlarm errcode

      ライブラリのエラーコードを取得するTDXAlarm型の変数のアドレス、もしくはNULL

  • 戻り値

    true: 成功
    false: 失敗

Page Top

DX_Ping anchor.png

指定されたIDを持つデバイスを対象に、PINGを発行する。IDがわかっている場合に使用する。

bool DX_Ping (uint8_t id, uint32_t timeout, PDXAlarm errcode);
  • パラメータ
    • uint8_t id

      0~253: 対象デバイスのID

    • uint32_t timeout

      検出タイムアウト時間[ms]

    • PDXAlarm errcode

      デバイスおよびライブラリのエラーコードを取得するTDXAlarm型の変数のアドレス、もしくはNULL

  • 戻り値

    true: 指定IDのデバイスが見つかった
    false: 指定IDのデバイスがタイムアウト時間を超過しても見つからない

Page Top

DX_Ping2 anchor.png

不特定のIDを持つデバイスを対象に、PINGを発行する(ブロードキャストIDを使用してPING)。IDがわからないデバイスに対して使用するため、ネットワーク上に接続されるデバイスは1台のみとする事。
fd_SetUVThresholdで指定された電圧を下回ると、実際の処理を行わない。

bool DX_Ping2 (uint8_t *id, uint32_t timeout, PDXAlarm errcode);
  • パラメータ
    • uint8_t *id

      検出されたデバイスのIDを保存するuint8_t型の変数のアドレス

    • uint32_t timeout

      検出タイムアウト時間[ms]

    • PDXAlarm errcode

      デバイスおよびライブラリのエラーコードを取得するTDXAlarm型の変数のアドレス、もしくはNULL

  • 戻り値

    true: 何らかのデバイスが応答しIDを取得できた
    false: デバイスがタイムアウト時間を超過しても見つからない

Page Top

Dynamixelアクチュエータシリーズ専用 anchor.png

アクチュエータに共通のコントロールテーブルを扱うケースが多いため、Dynamixelプロトコルを直接扱わずに簡便にアクセスするためのAPIが用意されています。
なお、必ず各APIの持つ機能が利用可能なデバイスであるかの判断を行うため、ブロードキャストIDが使用できません。また、若干オーバヘッドが生じます。また、応答のタイムアウト時間は最大の理論値を元に内部で自動的に算出されます。

Page Top

fd_DXGetModelNumber anchor.png

本APIのみデバイスの種別を問わずモデルナンバー取得する。
fd_SetUVThresholdで指定された電圧を下回ると、実際の処理を行わない。

uint16_t fd_DXGetModelNumber (uint8_t id, PDXAlarm errcode);
  • パラメータ
    • uint8_t id

      0~253: 対象デバイスのID

    • PDXAlarm errcode

      デバイスおよびライブラリのエラーコードを取得するTDXAlarm型の変数のアドレス、もしくはNULL

  • 戻り値

    正常に取得されると0以外のデバイスのモデルナンバー

Page Top

fd_DXLockParam anchor.png

指定IDのアクチュエータに対して、EEPROMエリアの書き換え禁止を指令する。一度書き換え禁止を行うと、アクチュエータを再起動しない限りEEPROMエリアの書き換えは行えない。
fd_SetUVThresholdで指定された電圧を下回ると、実際の処理を行わない。

bool fd_DXLockParam (uint8_t id);
  • パラメータ
    • uint8_t id

      0~253: 対象デバイスのID

  • 戻り値

    true: 成功
    false: 失敗

Page Top

fd_DXEnableControl anchor.png

指定IDのアクチュエータに対して、位置決め制御の開始・停止を指令する。
fd_SetUVThresholdで指定された電圧を下回ると、実際の処理を行わない。

bool fd_DXEnableControl (uint8_t id, bool On);
  • パラメータ
    • uint8_t id

      0~253: 対象デバイスのID

    • bool On

      true: 位置決め制御開始 (出力軸が現在位置でロック)
      false: 位置決め制御停止 (出力軸がフリー)

  • 戻り値

    true: 成功
    false: 失敗

Page Top

fd_DXSetPosition anchor.png

指定IDのアクチュエータに対して、指定された位置を指令(アイテムのGOAL POSITIONへの書き込み)する。
fd_SetUVThresholdで指定された電圧を下回ると、実際の処理を行わない。

bool fd_DXSetPosition (uint8_t id, uint16_t Position);
  • パラメータ
    • uint8_t id

      0~253: 対象デバイスのID

    • uint16_t Position

      0~1023: 10bit分解能版
      0~4095: 12bit分解能版

  • 戻り値

    true: 成功
    false: 失敗

Page Top

fd_DXGetPosition anchor.png

指定IDのアクチュエータから、現在の位置を取得(アイテムのPRESENT POSITIONの読み出し)する。
fd_SetUVThresholdで指定された電圧を下回ると、実際の処理を行わない。

bool fd_DXGetPosition (uint8_t id, uint16_t *Position);
    • uint8_t id

      0~253: 対象デバイスのID

    • uint16_t *Position

      取得した値を保存するuint16_t型の変数のアドレス

  • 戻り値

    true: 成功
    false: 失敗

Page Top

fd_DXSetSpeed anchor.png

指定IDのアクチュエータに対して、指定された速度を指令(アイテムのMOVING SPEEDへの書き込み)する。
fd_SetUVThresholdで指定された電圧を下回ると、実際の処理を行わない。

bool fd_DXSetSpeed (uint8_t id, short Speed);
    • uint8_t id

      0~253: 対象デバイスのID

    • short Speed

      -1023~0~1023: 回転方向指示(符号)を含む速度

  • 戻り値

    true: 成功
    false: 失敗

Page Top

fd_DXSetTorqueLimit anchor.png

指定IDのアクチュエータに対して、トルクリミッタの制限値を設定(アイテムのTORQUE LIMITへの書き込み)する。
fd_SetUVThresholdで指定された電圧を下回ると、実際の処理を行わない。

bool fd_DXSetTorqueLimit (uint8_t id, uint16_t Torque);
    • uint8_t id

      0~253: 対象デバイスのID

    • uint16_t Torque

      0~1023: トルクリミッタの制限値

  • 戻り値

    true: 成功
    false: 失敗

Page Top

fd_DXGetLoad anchor.png

指定IDのアクチュエータから、現在の負荷を取得(アイテムのPRESENT LOADの読み出し)する。
fd_SetUVThresholdで指定された電圧を下回ると、実際の処理を行わない。

bool fd_DXGetLoad (uint8_t id, int16_t *Load);
    • uint8_t id

      0~253: 対象デバイスのID

    • int16_t *Load

      取得した値を保存するint16_t型の変数のアドレス

  • 戻り値

    true: 成功
    false: 失敗

Page Top

fd_DXSetCompliance anchor.png

指定IDのアクチュエータに対して、コンプライアンスを設定(アイテムのCW COMPLIANCE MARGINから4バイトへの書き込み)する。
fd_SetUVThresholdで指定された電圧を下回ると、実際の処理を行わない。

bool fd_DXSetCompliance (uint8_t id, uint8_t CWM, uint8_t CCWM, uint8_t CWS, uint8_t CCWS);
    • uint8_t id

      0~253: 対象デバイスのID

    • uint8_t CWM

      0~254: CWマージン

    • uint8_t CCWM

      0~254: CCWマージン

    • uint8_t CWS

      1~254: CWスロープ

    • uint8_t CCWS

      1~254: CCWスロープ

  • 戻り値

    true: 成功
    false: 失敗

Page Top

fd_DXSetPIDGain anchor.png

指定IDのアクチュエータに対して、位置決め制御時のゲインを設定する。
fd_SetUVThresholdで指定された電圧を下回ると、実際の処理を行わない。

bool fd_DXSetPIDGain (uint8_t id, uint8_t PGain, uint8_t IGain, uint8_t DGain);
    • uint8_t id

      0~253: 対象デバイスのID

    • uint8_t PGain

      0~254: Pゲイン

    • uint8_t IGain

      0~254: Iゲイン

    • uint8_t DGain

      0~254: Dゲイン

  • 戻り値

    true: 成功
    false: 失敗

Page Top

fd_DXSetEndlessTurn anchor.png

指定IDのアクチュエータに対して、無限回転・位置決めモードを切り替える。コントロールテーブルのEEPROMエリアの書き換えを伴うため、頻度が高い使用は禁物である。また、EEPROMエリアの書き換え禁止措置が講じられている場合は、モードの切り替えに失敗する。
fd_SetUVThresholdで指定された電圧を下回ると、実際の処理を行わない。

bool fd_DXSetEndlessTurn (uint8_t id, bool f);
    • uint8_t id

      0~253: 対象デバイスのID

    • bool f

      true: 無限回転モードへ切り替え
      false: 位置決めモードへ切り替え

  • 戻り値

    true: 成功
    false: 失敗

Page Top

FUTABA RSアクチュエータシリーズプロトコル及び各アイテム専用 anchor.png

コマンド方式サーボのプロトコルを使用して内蔵メモリマップへのアクセスと、それらを使用せず簡便に各アイテムへアクセスするためのAPIです。

なお、各アイテムへのアクセス専用APIは、各APIの持つ機能が利用可能なデバイスであるかの判断を行うため、ブロードキャストIDが使用できないのと、若干オーバヘッドが生じます。また、応答のタイムアウト時間は最大の理論値を元に内部で自動的に算出されます。

FDIII-HCとサーボモータのケーブルは以下のピンアサインとします。

RSCABLE.png
Page Top

RS_ChangeBaudrate anchor.png

RSシリーズ向けにボーレートを変更する。ここで設定されるボーレートがネットワーク共通の通信速度となり、全てのAPIはこのボーレートを基準にして動作する。
このAPIを使用すると、RSシリーズ以外のアクチュエータとの通信は行う事ができない。また、Dynamixelを前提とした諸元やモーション等を使用するAPIは使用してはならない。

bool RS_ChangeBaudrate (uint32_t baud);
  • パラメータ
    • uint32_t baud

      ネットワークの装置とFDIII-HC間の通信速度[bps]
      誤差率の関係上460800bps以下を推奨

  • 戻り値

    true: 成功
    false: 失敗 (誤差率が2%を超える、もしくは設定可能範囲外)

  • 使用例
    #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, (void *)&p, 10, NULL);
        fd_printf("goal pos=%5d, present pos=%5d\r",now, p);
        if (++now > 1500) now = -1500;
        fd_Wait (1);
      }
      // トルクOFF
      fd_RSEnableControl (1, false);
    }
    
Page Top

RS_CalcTimeout anchor.png

ボーレートとステータスパケットのパラメータサイズを元にタイムアウト時間を算定する。

uint32_t RS_CalcTimeout (int num);
  • パラメータ
    • int num

      バイト数

  • 戻り値

    タイムアウト時間[ms]

Page Top

RS_WriteByteData anchor.png

指定されたIDを持つデバイスを対象に、指定アドレスのアイテムに指定された1バイトのデータを書き込む。

bool RS_WriteByteData (uint8_t id, uint8_t adr, uint8_t dat, uint32_t timeout, PDXAlarm errcode);
  • パラメータ
    • uint8_t id

      1~127, 255: 対象デバイスのIDもしくはブロードキャストID

    • uint8_t adr

      0~: 対象アドレス

    • uint8_t dat

      0~255: 送信データ

    • uint32_t timeout

      0~500: 受信タイムアウト時間[ms]

    • PDXAlarm errcode

      デバイスおよびライブラリのエラーコードを取得するTDXAlarm型の変数のアドレス、もしくはNULL

  • 戻り値

    true: 成功
    false: 失敗

Page Top

RS_WriteWordData anchor.png

指定されたIDを持つデバイスを対象に、指定アドレスのアイテムに指定された1ワード(2バイト)のデータを書き込む。

bool RS_WriteWordData (uint8_t id, uint8_t adr, uint16_t dat, uint32_t timeout, PDXAlarm errcode);
  • パラメータ
    • uint8_t id

      1~127, 255: 対象デバイスのIDもしくはブロードキャストID

    • uint8_t adr

      0~: 対象アドレス

    • uint16_t dat

      0~65535: 送信データ

    • uint32_t timeout

      0~500: 受信タイムアウト時間[ms]

    • PDXAlarm errcode

      デバイスおよびライブラリのエラーコードを取得するTDXAlarm型の変数のアドレス、もしくはNULL

  • 戻り値

    true: 成功
    false: 失敗

Page Top

RS_WriteBlockData anchor.png

指定されたIDを持つデバイスを対象に、指定アドレスのアイテムを起点に指定されたサイズの連続したデータを書き込む。

bool RS_WriteBlockData (uint8_t id, uint8_t adr, const uint8_t *dat, uint8_t len, uint32_t timeout, PDXAlarm errcode);
  • パラメータ
    • uint8_t id

      1~127, 255: 対象デバイスのIDもしくはブロードキャストID

    • uint8_t adr

      0~: 対象アドレス

    • const uint8_t *dat

      書き込むデータを保存したuint8_t型の配列のアドレス

    • uint8_t len

      datのバイト数

    • uint32_t timeout

      0~500: 受信タイムアウト時間[ms]

    • PDXAlarm errcode

      デバイスおよびライブラリのエラーコードを取得するTDXAlarm型の変数のアドレス、もしくはNULL

  • 戻り値

    true: 成功
    false: 失敗

Page Top

RS_ReadByteData anchor.png

指定されたIDを持つデバイスを対象に、指定アドレスのアイテムから1バイトのデータを読み出す。

bool RS_ReadByteData (uint8_t id, uint8_t adr, uint8_t *result, uint32_t timeout, PDXAlarm errcode);
  • パラメータ
    • uint8_t id

      1~127: 対象デバイスのID

    • uint8_t adr

      0~: 対象アドレス

    • uint8_t *result

      読み出したデータを保存するuint8_t型の変数のアドレス

    • uint32_t timeout

      0~500: 受信タイムアウト時間[ms]

    • PDXAlarm errcode

      デバイスおよびライブラリのエラーコードを取得するTDXAlarm型の変数のアドレス、もしくはNULL

  • 戻り値

    true: 成功
    false: 失敗

Page Top

RS_ReadWordData anchor.png

指定されたIDを持つデバイスを対象に、指定アドレスのアイテムから1ワード(2バイト)のデータを読み出す。

bool DX_ReadWordData (uint8_t id, uint8_t adr, uint16_t *result, uint32_t timeout, PDXAlarm errcode);
  • パラメータ
    • uint8_t id

      1~127: 対象デバイスのID

    • uint8_t adr

      0~: 対象アドレス

    • uint16_t *result

      読み出したデータを保存するuint16_t型の変数のアドレス

    • uint32_t timeout

      0~500: 受信タイムアウト時間[ms]

    • PDXAlarm errcode

      デバイスおよびライブラリのエラーコードを取得するTDXAlarm型の変数のアドレス、もしくはNULL

  • 戻り値

    true: 成功
    false: 失敗

Page Top

RS_ReadBlockData anchor.png

指定されたIDを持つデバイスを対象に、指定アドレスのアイテムを起点に指定されたサイズの連続したデータを読み出す。

bool RS_ReadBlockData (uint8_t id, uint8_t adr, uint8_t *result, uint8_t len, uint32_t timeout, PDXAlarm errcode);
  • パラメータ
    • uint8_t id

      1~127: 対象デバイスのID

    • uint8_t adr

      0~: 対象アドレス

    • uint8_t *result

      読み出したデータを保存するuint8_t型の配列のアドレス

    • uint8_t len

      読み出すバイト数

    • uint32_t timeout

      0~500: 受信タイムアウト時間[ms]

    • PDXAlarm errcode

      デバイスおよびライブラリのエラーコードを取得するTDXAlarm型の変数のアドレス、もしくはNULL

  • 戻り値

    true: 成功
    false: 失敗

Page Top

RS_WriteSyncData anchor.png

ロングパケットを使用して複数のデバイスの同一アイテムに対して各々異なる値を一括送信する。

bool RS_WriteSyncData (const uint8_t *dat, uint8_t size, PDXAlarm errcode);
  • パラメータ
    • const uint8_t *dat

      ロングパケットの「Address, Length, Count, VID, DATA, .... , VID, DATA」部分を記述したuint8_t型の配列のアドレス

    • uint8_t size

      datのバイト数

    • PDXAlarm errcode

      ライブラリのエラーコードを取得するTDXAlarm型の変数のアドレス、もしくはNULL

  • 戻り値

    true: 成功
    false: 失敗

Page Top

RS_Ping anchor.png

指定されたIDを持つデバイスを対象に存在確認をする。

bool RS_Ping (uint8_t id, uint32_t timeout, PDXAlarm errcode);
  • パラメータ
    • uint8_t id

      1~127: 対象デバイスのID

    • uint32_t timeout

      検出タイムアウト時間[ms]

    • PDXAlarm errcode

      デバイスおよびライブラリのエラーコードを取得するTDXAlarm型の変数のアドレス、もしくはNULL

  • 戻り値

    true: 指定IDのデバイスが見つかった
    false: 指定IDのデバイスがタイムアウト時間を超過しても見つからない

Page Top

fd_RSGetModelNumber anchor.png

指定IDのデバイスに対して、モデルナンバーを取得する。

uint16_t fd_RSGetModelNumber (uint8_t id, PDXAlarm errcode);
  • パラメータ
    • uint8_t id

      1~127: 対象デバイスのID

    • PDXAlarm errcode

      デバイスおよびライブラリのエラーコードを取得するTDXAlarm型の変数のアドレス、もしくはNULL

  • 戻り値

    正常に取得されると0以外のデバイスのモデルナンバー

Page Top

fd_RSEnableControl anchor.png

指定IDのアクチュエータに対して、位置決め制御の開始・停止(アイテムのTORQUE ENABLE)を指令する。
なお、必ずAPIの持つ機能が利用可能なデバイスであるかの判断を行うため、ブロードキャストIDが使用できない。また、そのために若干オーバヘッドが生じる。
応答のタイムアウト時間は最大の理論値を元に内部で自動的に算出される。

bool fd_RSEnableControl (uint8_t id, bool On);
  • パラメータ
    • uint8_t id

      1~127: 対象デバイスのID

    • bool On

      true: 位置決め制御開始 (出力軸が現在位置でロック)
      false: 位置決め制御停止 (出力軸がフリー)

  • 戻り値

    true: 成功
    false: 失敗

Page Top

fd_RSSetPosition anchor.png

指定IDのアクチュエータに対して、指定された位置を指令(アイテムのGLOBAL POSITIONへの書き込み)する。なお、RSシリーズは予めトルクONを指示しておかないと動作しない。
なお、必ずAPIの持つ機能が利用可能なデバイスであるかの判断を行うため、ブロードキャストIDが使用できない。また、そのために若干オーバヘッドが生じる。
応答のタイムアウト時間は最大の理論値を元に内部で自動的に算出される。

bool fd_RSSetPosition (uint8_t id, int16_t Position);
  • パラメータ
    • uint8_t id

      1~127: 対象デバイスのID

    • int16_t Position

      -1500~+1500: -150.0~+150.0度

  • 戻り値

    true: 成功
    false: 失敗

Page Top

fd_RSGetPosition anchor.png

指定IDのアクチュエータから、現在の位置を取得(アイテムのPRESENT POSITIONの読み出し)する。
なお、必ずAPIの持つ機能が利用可能なデバイスであるかの判断を行うため、ブロードキャストIDが使用できない。また、そのために若干オーバヘッドが生じる。
応答のタイムアウト時間は最大の理論値を元に内部で自動的に算出される。

bool fd_RSGetPosition (uint8_t id, int16_t *Position);
    • uint8_t id

      1~127: 対象デバイスのID

    • int16_t *Position

      取得した値を保存するint16_t型の変数のアドレス

  • 戻り値

    true: 成功
    false: 失敗

Page Top

fd_RSSetTime anchor.png

指定IDのアクチュエータに対して、指定された移動時間(10ms単位)を指令する。
なお、必ずAPIの持つ機能が利用可能なデバイスであるかの判断を行うため、ブロードキャストIDが使用できない。また、そのために若干オーバヘッドが生じる。
応答のタイムアウト時間は最大の理論値を元に内部で自動的に算出される。

bool fd_RSSetTime (uint8_t id, int16_t Times);
    • uint8_t id

      1~127: 対象デバイスのID

    • int16_t Times

      0~65535: 移動時間を10ms単位で指定

  • 戻り値

    true: 成功
    false: 失敗

Page Top

fd_RSSetTorqueLimit anchor.png

指定IDのアクチュエータに対して、トルクリミッタの制限値を設定する。
なお、必ずAPIの持つ機能が利用可能なデバイスであるかの判断を行うため、ブロードキャストIDが使用できない。また、そのために若干オーバヘッドが生じる。
応答のタイムアウト時間は最大の理論値を元に内部で自動的に算出される。

bool fd_RSSetTorqueLimit (uint8_t id, uint16_t Torque);
    • uint8_t id

      1~127: 対象デバイスのID

    • uint16_t Torque

      0~100: トルクリミッタの制限値[%]

  • 戻り値

    true: 成功
    false: 失敗

Page Top

fd_RSSetCompliance anchor.png

指定IDのアクチュエータに対して、コンプライアンスを設定する。
なお、必ずAPIの持つ機能が利用可能なデバイスであるかの判断を行うため、ブロードキャストIDが使用できない。また、そのために若干オーバヘッドが生じる。
応答のタイムアウト時間は最大の理論値を元に内部で自動的に算出される。

bool fd_RSSetCompliance (uint8_t id, uint8_t CWM, uint8_t CCWM, uint8_t CWS, uint8_t CCWS);
    • uint8_t id

      1~127: 対象デバイスのID

    • uint8_t CWM

      0~255: CWマージン

    • uint8_t CCWM

      0~255: CCWマージン

    • uint8_t CWS

      0~255: CWスロープ

    • uint8_t CCWS

      0~255: CCWスロープ

  • 戻り値

    true: 成功
    false: 失敗

Page Top

fd_RSSetPIDGain anchor.png

指定IDのアクチュエータに対して、位置決め制御時のPIDゲインを設定する。
なお、必ずAPIの持つ機能が利用可能なデバイスであるかの判断を行うため、ブロードキャストIDが使用できない。また、そのために若干オーバヘッドが生じる。
応答のタイムアウト時間は最大の理論値を元に内部で自動的に算出される。

bool fd_RSSetPIDGain (uint8_t id, uint8_t Gain, uint8_t dummy1, uint8_t dummy2);
    • uint8_t id

      1~127: 対象デバイスのID

    • uint8_t Gain

      0~255: ゲイン

    • uint8_t dummy1

      0: 未使用

    • uint8_t dummy2

      0: 未使用

  • 戻り値

    true: 成功
    false: 失敗

Page Top

KONDO KRSアクチュエータシリーズプロトコル及び各アイテム専用 anchor.png

ICS3.0/ICS3.5のプロトコルを使用した各アイテムへのアクセスと、それらを使用せず簡便に各アイテムへアクセスするためのAPIです。
なお、KRSシリーズのアクチュエータにおいて指令位置や位置フィードバックといったデータがメモリマップ上に存在しないため、本ライブラリ内にてこれらのデータを仮想メモリマップ上に配置しています。それにより他のアクチュエータ同様のIDとアドレスによるアクセス方法を疑似的に提供します。

仮想メモリマップ構成

AddressData TypeNameRangeI/O
0uint8_tTorque Enable0..1[Off/On]R/W
1uint16_tGoal Position0..16383R/W
3uint16_tPresent Position?R
5int8_tPresent Current?R
6int8_tPresent Temperature?[degC]R

各アイテムは以下のルールを元に変換されます。

  • Torque Enable:

    0:ICSにて舵角を0として送信
    1:ICSにて指定済みのGoal Positionを舵角として送信

  • Goal Position:

    ICSにて舵角として送信する値。サーボモータに設定されたパルスリミットを超えた値が指定された場合の挙動は保証されない。

  • Present Position:

    ICSにて現在の舵角として受信された値。

  • Present Current:

    ICSにて電流値として受信された値を正規化。単位は不明。

  • Present Temperature:

    ICSにて温度値として受信された値を摂氏に正規化。

また、APIにてIDに255を指定した場合、存在の有無に関わらず0~31の全てのIDに対して処理を順次行います。そのため、必要以上の処理時間を要する場合があります。

FDIII-HCとサーボモータのケーブルは以下のピンアサインとします。

KRSCABLE.png
Page Top

KRS_ChangeBaudrate anchor.png

KRSシリーズ向けにボーレートを変更する。ここで設定されるボーレートがネットワーク共通の通信速度となり、全てのAPIはこのボーレートを基準にして動作する。
このAPIを使用すると、KRSシリーズ以外のアクチュエータとの通信は行う事ができない。また、Dynamixelを前提とした諸元やモーション等を使用するAPIは使用してはならない。

bool KRS_ChangeBaudrate (uint32_t baud);
  • パラメータ
    • uint32_t baud

      ネットワークの装置とFDIII-HC間の通信速度[bps]
      誤差率の関係上115200bpsのみを推奨

  • 戻り値

    true: 成功
    false: 失敗 (誤差率が2%を超える、もしくは設定可能範囲外)

  • 使用例
    #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);
        if (++now > 16383) now = 0;
        fd_Wait (1);
      }
      // トルクOFF
      fd_KRSEnableControl (0, false);
    }
    
Page Top

KRS_CalcTimeout anchor.png

ボーレートとステータスパケットのパラメータサイズを元にタイムアウト時間を算定する。

uint32_t KRS_CalcTimeout (int num);
  • パラメータ
    • int num

      バイト数

  • 戻り値

    タイムアウト時間[ms]

Page Top

KRS_WriteByteData anchor.png

指定されたIDを持つデバイスを対象に、指定アドレスのアイテムに指定された1バイトのデータを書き込む。

bool KRS_WriteByteData (uint8_t id, uint8_t adr, uint8_t dat, uint32_t timeout, PDXAlarm errcode);
  • パラメータ
    • uint8_t id

      0~31, 255: 対象デバイスのID

    • uint8_t adr

      0~6: 対象アドレス

    • uint8_t dat

      0~255: 送信データ

    • uint32_t timeout

      0~500: 受信タイムアウト時間[ms]

    • PDXAlarm errcode

      デバイスおよびライブラリのエラーコードを取得するTDXAlarm型の変数のアドレス、もしくはNULL

  • 戻り値

    true: 成功
    false: 失敗

Page Top

KRS_WriteWordData anchor.png

指定されたIDを持つデバイスを対象に、指定アドレスのアイテムに指定された1ワード(2バイト)のデータを書き込む。

bool KRS_WriteWordData (uint8_t id, uint8_t adr, uint16_t dat, uint32_t timeout, PDXAlarm errcode);
  • パラメータ
    • uint8_t id

      0~31, 255: 対象デバイスのID

    • uint8_t adr

      0~5: 対象アドレス

    • uint16_t dat

      0~65535: 送信データ

    • uint32_t timeout

      0~500: 受信タイムアウト時間[ms]

    • PDXAlarm errcode

      デバイスおよびライブラリのエラーコードを取得するTDXAlarm型の変数のアドレス、もしくはNULL

  • 戻り値

    true: 成功
    false: 失敗

Page Top

KRS_WriteBlockData anchor.png

指定されたIDを持つデバイスを対象に、指定アドレスのアイテムを起点に指定されたサイズの連続したデータを書き込む。

bool KRS_WriteBlockData (uint8_t id, uint8_t adr, const uint8_t *dat, uint8_t len, uint32_t timeout, PDXAlarm errcode);
  • パラメータ
    • uint8_t id

      0~31, 255: 対象デバイスのID

    • uint8_t adr

      0~: 対象アドレス

    • const uint8_t *dat

      書き込むデータを保存したuint8_t型の配列のアドレス

    • uint8_t len

      datのバイト数

    • uint32_t timeout

      0~500: 受信タイムアウト時間[ms]

    • PDXAlarm errcode

      デバイスおよびライブラリのエラーコードを取得するTDXAlarm型の変数のアドレス、もしくはNULL

  • 戻り値

    true: 成功
    false: 失敗

Page Top

KRS_ReadByteData anchor.png

指定されたIDを持つデバイスを対象に、指定アドレスのアイテムから1バイトのデータを読み出す。

bool KRS_ReadByteData (uint8_t id, uint8_t adr, uint8_t *result, uint32_t timeout, PDXAlarm errcode);
  • パラメータ
    • uint8_t id

      0~31: 対象デバイスのID

    • uint8_t adr

      0~6: 対象アドレス

    • uint8_t *result

      読み出したデータを保存するuint8_t型の変数のアドレス

    • uint32_t timeout

      0~500: 受信タイムアウト時間[ms]

    • PDXAlarm errcode

      デバイスおよびライブラリのエラーコードを取得するTDXAlarm型の変数のアドレス、もしくはNULL

  • 戻り値

    true: 成功
    false: 失敗

Page Top

KRS_ReadWordData anchor.png

指定されたIDを持つデバイスを対象に、指定アドレスのアイテムから1ワード(2バイト)のデータを読み出す。

bool KDX_ReadWordData (uint8_t id, uint8_t adr, uint16_t *result, uint32_t timeout, PDXAlarm errcode);
  • パラメータ
    • uint8_t id

      0~31: 対象デバイスのID

    • uint8_t adr

      0~5: 対象アドレス

    • uint16_t *result

      読み出したデータを保存するuint16_t型の変数のアドレス

    • uint32_t timeout

      0~500: 受信タイムアウト時間[ms]

    • PDXAlarm errcode

      デバイスおよびライブラリのエラーコードを取得するTDXAlarm型の変数のアドレス、もしくはNULL

  • 戻り値

    true: 成功
    false: 失敗

Page Top

KRS_ReadBlockData anchor.png

指定されたIDを持つデバイスを対象に、指定アドレスのアイテムを起点に指定されたサイズの連続したデータを読み出す。

bool KRS_ReadBlockData (uint8_t id, uint8_t adr, uint8_t *result, uint8_t len, uint32_t timeout, PDXAlarm errcode);
  • パラメータ
    • uint8_t id

      0~31: 対象デバイスのID

    • uint8_t adr

      0~: 対象アドレス

    • uint8_t *result

      読み出したデータを保存するuint8_t型の配列のアドレス

    • uint8_t len

      読み出すバイト数

    • uint32_t timeout

      0~500: 受信タイムアウト時間[ms]

    • PDXAlarm errcode

      デバイスおよびライブラリのエラーコードを取得するTDXAlarm型の変数のアドレス、もしくはNULL

  • 戻り値

    true: 成功
    false: 失敗

Page Top

KRS_WriteSyncData anchor.png

指定されたIDを持つデバイスを対象に、指定アドレスのアイテムを起点に指定されたサイズの連続したデータを書き込む。
なお、ICSでは同期系のパケットを持たないため、実際には個々のIDに順次BlockWriteで処理を行う。

bool KRS_WriteSyncData (const uint8_t *dat, uint8_t size, PDXAlarm errcode);
  • パラメータ
    • const uint8_t *dat

      「Address, Length, ID, DATA, .... , ID, DATA」といったDynamixelのSYNCインストラクションのパラメータと同じ記述をしたuint8_t型の配列のアドレス

    • uint8_t size

      datのバイト数

    • PDXAlarm errcode

      ライブラリのエラーコードを取得するTDXAlarm型の変数のアドレス、もしくはNULL

  • 戻り値

    true: 成功
    false: 失敗

Page Top

KRS_Ping anchor.png

指定されたIDを持つデバイスを対象に存在確認をする。

bool KRS_Ping (uint8_t id, uint32_t timeout, PDXAlarm errcode);
  • パラメータ
    • uint8_t id

      0~31: 対象デバイスのID

    • uint32_t timeout

      検出タイムアウト時間[ms]

    • PDXAlarm errcode

      デバイスおよびライブラリのエラーコードを取得するTDXAlarm型の変数のアドレス、もしくはNULL

  • 戻り値

    true: 指定IDのデバイスが見つかった
    false: 指定IDのデバイスがタイムアウト時間を超過しても見つからない

Page Top

fd_KRSEnableControl anchor.png

指定IDのアクチュエータに対して、位置決め制御の開始・停止を指令する。
応答のタイムアウト時間は最大の理論値を元に内部で自動的に算出される。

bool fd_KRSEnableControl (uint8_t id, bool On);
  • パラメータ
    • uint8_t id

      0~31: 対象デバイスのID

    • bool On

      true: 位置決め制御開始 (出力軸が現在位置でロック)
      false: 位置決め制御停止 (出力軸がフリー)

  • 戻り値

    true: 成功
    false: 失敗

Page Top

fd_KRSSetPosition anchor.png

指定IDのアクチュエータに対して、指定された位置を指令(アイテムのGOAL POSITIONへの書き込み)する。なお、KRSシリーズは本指により自動的にトルクイネーブルがONになる。
応答のタイムアウト時間は最大の理論値を元に内部で自動的に算出される。

bool fd_KRSSetPosition (uint8_t id, uint16_t Position);
  • パラメータ
    • uint8_t id

      0~31: 対象デバイスのID

    • uint16_t Position

      0~16383

  • 戻り値

    true: 成功
    false: 失敗

Page Top

fd_KRSGetPosition anchor.png

指定IDのアクチュエータから、現在の位置を取得(アイテムのPRESENT POSITIONの読み出し)する。
応答のタイムアウト時間は最大の理論値を元に内部で自動的に算出される。

bool fd_KRSGetPosition (uint8_t id, uint16_t *Position);
    • uint8_t id

      0~31: 対象デバイスのID

    • uint16_t *Position

      取得した値を保存するuint16_t型の変数のアドレス

  • 戻り値

    true: 成功
    false: 失敗

Page Top

fd_KRSGetCurrent anchor.png

指定IDのアクチュエータから、現在の電流値を取得(アイテムのPRESENT CURRENTの読み出し)する。
応答のタイムアウト時間は最大の理論値を元に内部で自動的に算出される。

bool fd_KRSGetCurrent (uint8_t id, int16_t *Current);
    • uint8_t id

      0~31: 対象デバイスのID

    • int16_t *Current

      取得した値を保存するint16_t型の変数のアドレス

  • 戻り値

    true: 成功
    false: 失敗

Page Top

fd_KRSGetTemperature anchor.png

指定IDのアクチュエータから、現在の温度[degC]を取得(アイテムのPRESENT TEMPERATUREの読み出し)する。
応答のタイムアウト時間は最大の理論値を元に内部で自動的に算出される。

bool fd_KRSGetTemperature (uint8_t id, int8_t *Temp);
    • uint8_t id

      0~31: 対象デバイスのID

    • int8_t *Temp

      取得した値を保存するint8_t型の変数のアドレス

  • 戻り値

    true: 成功
    false: 失敗

Page Top

SDファイルアクセス anchor.png

SDカードのファイルへアクセスするためのAPIです。アプリケーションで独自のデータを保存したり読み出すといった事が可能です。
なお、対応するファイルシステムはFAT16のみとなり、FDIII-HCには時計機能が装備されない都合から日付・時刻を保存する機能はありません。

Page Top

fd_WriteFile anchor.png

SDカードにファイルを書き込む。既存ファイルの場合は上書きされる。

bool fd_FileWrite (const char *fname, const void *wdata, uint32_t wrsz, uint32_t *sfsz);
  • パラメータ
    • const char *fname

      書込むファイル名

    • const void *wdata

      書込みバッファのアドレス

    • uint32_t wrsz

      書き込むバッファ内のデータサイズ

    • uint32_t *sfsz

      実際に書き込んだサイズを保存するuint32_t型のアドレス

  • 戻り値

    true: ファイルの書込み成功
    false: ファイルの書込み失敗

  • 使用例
    #include "fd.h"
    
    void main (void) {
      uint32_t sz, rsz;
      // 書込みバッファ
      char buff[10] = "1234567890";
      // 読込み内容の保存バッファ
      char rbuff[21];
      fd_Wait (2000);
      // SDカードへTEST.DATを作成
      if (fd_WriteFile ("TEST.DAT", buff, sizeof (buff), &sz)) {
        rsz = sz;
        // TEST.DATへデータを追加
        if (fd_AppendFile ("TEST.DAT", buff, sizeof (buff), &sz)) {
          rsz += sz;
          // TEST.DATの内容を読み込む
          if (fd_ReadFile ("TEST.DAT", rbuff, rsz, &sz)) {
            // 末尾に0を追加することで文字列化
            rbuff[sz] = 0x0;
            fd_printf ("read buff = %s read size=%d\n", rbuff, sz);
            // TEST.DATを削除
            fd_DeleteFile ("TEST.DAT");
          }
        }
      }
    }
    
Page Top

fd_AppendFile anchor.png

指定されたファイルの最後に追加で書込みを行う。

bool fd_AppendFile (const char *fname, const void *wdata, uint32_t wrsz, uint32_t *sfsz);
  • パラメータ
    • const char *fname

      追加書込みを行うファイル名

    • const void *wdata

      書込みバッファのアドレス

    • uint32_t wrsz

      書き込むバッファ内のデータサイズ

    • uint32_t *sfsz

      実際に書き込んだサイズを保存するuint32_t型のアドレス

  • 戻り値

    true: 追加書込み成功
    false: 追加書込み失敗

Page Top

fd_ReadFile anchor.png

指定されたファイルの内容をバッファへ読み込む。

bool fd_ReadFile (const char *fname, void *rdata, uint32_t rdsz, uint32_t *sfsz);
  • パラメータ
    • const char *fname

      読み込むファイル名

    • void *rdata

      読み込んだ内容を保存するバッファのアドレス

    • uint32_t rdsz

      読み込んだ内容を保存するバッファのサイズ

    • uint32_t *sfsz

      実際に読み込んだサイズを保存するuint32_t型のアドレス

  • 戻り値

    true: ファイルの読込み成功
    false: ファイルの読込み失敗

Page Top

fd_DeleteFile anchor.png

指定されたファイル・フォルダをSDカードより削除する。

bool fd_DeleteFile (const char *fname);
  • パラメータ
    • const char *fname

      削除するファイル、又はフォルダ名

  • 戻り値

    true: 削除成功
    false: 削除失敗

Page Top

fd_FindFirst anchor.png

フォルダ内の一覧を取得する際の、最初のファイル、又はフォルダを見つける。

bool fd_FindFirst(const char *foldername);
  • パラメータ
    • const char *foldername

      一覧を取得したいフォルダ名

  • 戻り値

    true: オープン成功
    false: オープン失敗

  • 使用例
    #include "fd.h"
    
    void main (void) {
      char fname[13];
      TFileInfo fi;
      fd_Wait (2000);
      if (fd_SDIsAlive ()) {
        // ルートフォルダを指定
        if (fd_FindFirst("/")) {
          // フォルダ内のファイル全てを検索
          while (fd_FindNext (fname, &fi)) {
            // フォルダを除いたファイルのみ表示
            if (!(fi.fattr & AM_DIR)) fd_printf ("file:%s size=%d\n", fname, fi.fsize);
          }
        }
      }
    }
    
Page Top

fd_FindNext anchor.png

フォルダ内の一覧を取得する際の、次のファイル、又はフォルダを見つける。名称と合わせて情報も取得する。

bool fd_SD_FindNext (char *fname, TFileInfo *types);
  • パラメータ
    • char *fname

      見つかったファイル、又はフォルダ名を保存するchar型の配列変数のアドレス

    • TFileInfo *types

      見つかったファイル、又はフォルダのファイル情報を保存するTFileInfo型の構造体の変数のアドレス

  • 戻り値

    true: 取得成功
    false: 取得失敗、又はフォルダ内検索終了

Page Top

fd_MakeFolder anchor.png

フォルダを作成する。

bool fd_MakeFolder (const char *foldername);
  • パラメータ
    • const char *foldername

      作成するフルパスのフォルダ名

  • 戻り値

    true: 作成成功
    false: 作成失敗

Page Top

fd_FileExists anchor.png

ファイル、又はフォルダの存在を確認をする。

bool fd_FileExists (const char *fname, TFileInfo *finfo);
  • パラメータ
    • const char *fname

      存在確認するファイル、又はフォルダ名

    • TFileInfo *finfo

      見つかったファイル、又はフォルダのFATFSファイル情報構造体を保存するTFileInfo型の変数のアドレス

  • 戻り値

    true: 確認成功
    false: 確認失敗

Page Top

fd_SDIsAlive anchor.png

SDカードの存在を確認する。

bool fd_SDIsAlive (void);
  • パラメータ

    なし

  • 戻り値

    true: SDカードが存在する
    false: SDカードが存在しない

Page Top

FREEDOM IIIライブラリ専用型定義 anchor.png

本ライブラリでは複数の情報を一括で扱うAPIが多いため、引数としてそれらの情報を取りまとめた構造体のポインタを渡すケースがあります。全てfd.h内で定義されていますので、詳細はソースを参照してください。

Page Top

TModelNo anchor.png

FREEDOM IIIライブラリで想定しているネットワークデバイスのModel No.の一覧が記述された列挙型変数。
主にTSpec構造体内の定義で使用される。

typedef enum {
   DEV_AX12   =     12,
   DEV_AX12W  =  0x12c,
   DEV_AXS1   =     13,
   DEV_AX18   =     18,
   DEV_DX113  =    113,
   DEV_DX116  =    116,
   DEV_DX117  =    117,
   DEV_RX10   =     10,
   DEV_RX24   =     24,
   DEV_RX28   =     28,
   DEV_RX64   =     64,
   DEV_EX106  =    107,
   DEV_MX28   =     29,
   DEV_MX64   = 0x0136,
   DEV_MX106  = 0x0140,
   DEV_M168IO = 0x4001,
   DEV_9DOF   = 0x4002,
   DEV_USS3   = 0x4004,
   DEV_UDIII  = 0x4010,
   DEV_MIO2   = 0x4020
} TModelNo;
  • DEV_AX12

    AX-12, AX-12+, AX-12A

  • DEV_AX12W

    AX-12W

  • DEV_AXS1

    AX-S1

  • DEV_AX18

    AX-18F, AX-18A

  • DEV_DX113

    DX-113

  • DEV_DX116

    DX-116

  • DEV_DX117

    DX-117

  • DEV_RX10

    RX-10

  • DEV_RX24

    RX-24F

  • DEV_RX28

    RX-28

  • DEV_RX64

    RX-64

  • DEV_EX106

    EX-106+

  • DEV_MX28

    MX-28R, MX-28T

  • DEV_MX64

    MX-64R, MX-64T

  • DEV_MX106

    MX-106R, MX-106T

  • DEV_M168IO

    Multifunction I/Oモジュール

  • DEV_9DOF

    9DOFセンサモジュール

  • DEV_USS3

    USS3

  • DEV_UDIII

    ユニバーサルドライバ3

  • DEV_MIO2

    MIO2

Page Top

TOpRange anchor.png

アクチュエータの動作可能範囲をソフトウェア的に決めるための構造体。
主にTSpec構造体内の定義で使用される。

typedef struct {
  short         lowerlimit;
  short         upperlimit;
} TOpRange;
  • short lowerlimit

    アクチュエータの動作下限位置

  • short lowerlimit

    アクチュエータの動作上限位置

Page Top

TCompliance anchor.png

アクチュエータのコンプライアンスをまとめた構造体。
主にTSpec構造体内の定義で使用される。

typedef struct {
  uint8_t CWMargin;
  uint8_t CCWMargin;
  uint8_t CWSlope;
  uint8_t CCWSlope;
} TCompliance;
  • uint8_t CWMargin

    CWマージン
    MXシリーズにおいてはD Gain

  • uint8_t CCWMargin

    CCWマージン
    MXシリーズにおいてはI Gain

  • uint8_t CWSlope

    CWスロープ
    MXシリーズにおいてはP Gain

  • uint8_t CCWSlope

    CCWスロープ
    MXシリーズにおいては未使用

Page Top

TSpec anchor.png

デバイスの固有情報とTStructureのどの位置に適用するかを記述した構造体。fd_SetSpecにて使用する場合は、使用するデバイス数分の配列を定義した上で渡す。

typedef struct {
  short       id;
  TModelNo    ModelNo;
  short       *offset;
  short       Deg2Pos;
  TOpRange    OpRange;
  uint16_t    MaxSpeed;
  uint16_t    MaxTorque;
  TCompliance Compliance;
  uint16_t    BluntGain;
} TSpec;
  • short id

    対象デバイスのID
    fd_SetSpecにて検出されないアラームとなる

  • TModelNo ModelNo

    対象デバイスのモデルNo.
    fd_SetSpecにて不一致が検出されるとアラームとなる

  • short *offset

    対象デバイス(アクチュエータに限る)を適用する先のTStructure内のオフセット位置
    例えばTStructureで定義された配列の10番目([9])の要素をオフセットとする場合は、fd_AxisOfsマクロを使用して以下の様に記述する

    fd_AxisOfs(9)

    この設定により、各アクチュエータのIDとアプリケーション上で想定している構造が結び付けられる

    tspec.png
  • short Deg2Pos

    対象デバイス(アクチュエータに限る)の位置と角度を変換する係数
    計算式は以下の通り (POS:位置, DEG:角度x10, HP:ホーム位置)

    POS = DEG * Deg2Pos / 1000 + HP
  • TOpRange OpRange

    対象デバイス(アクチュエータに限る)の動作可能範囲
    ライブラリ内のソフト的なリミッタとして機能

  • uint16_t MaxSpeed

    対象デバイス(アクチュエータに限る)の初期の速度
    fd_SetSpecにより指定された値が対象デバイスに書き込まれる

  • uint16_t MaxTorque

    対象デバイス(アクチュエータに限る)の初期のトルクリミット
    fd_SetSpecにより指定された値が対象デバイスに書き込まれる
    0の場合は書き込みを行わない

  • TCompliance Compliance

    対象デバイス(アクチュエータに限る)の初期のコンプライアンスもしくは制御ゲイン
    fd_SetSpecにより指定された値が対象デバイスに書き込まれる
    全て0の場合は書き込みを行わない

  • uint16_t BluntGain

    最終的な位置指令の際に本ゲインを元にスイープさせながら処理する
    小さい値で指令に追従しなくなるため、離散的な角度指令を行う際に使用すると、結果なめらかな挙動を得られる
    0ないし1000以上で遅延なくモータの最大能力で位置指令を行う

Page Top

PSpec anchor.png

TSpecのポインタ型。

Page Top

TStructure anchor.png

アプリケーションにおける軸の配置(構造)を決定づける配列で、その軸のアクチュエータの角度や位置を保持するのに用いる。
ホームポジションやモーションはデバイスのIDで管理されるものではなく、この配列のどの位置に構造物のどの部位を割り当てるかで決定される。IDやアクチュエータの割り当てはTSpec内で定義される本配列に対するoffsetで二次的に決定される。
ライブラリとして管理できる最大軸数は60(=FD_MAX_AXIS_NUM)軸である。

typedef short TStructure[FD_MAX_AXIS_NUM];
Page Top

PStructure anchor.png

TStructureのポインタ型

Page Top

THomePosition anchor.png

各軸のホームポジションの位置を保持する配列。基本的にTStructureと全く同じで、アプリケーションにおける軸の配置(構造)を決定づける配列と同じ割り当てとする。

typedef TStructure THomePosition;
Page Top

PHomePosition anchor.png

THomePositionのポインタ型

Page Top

TMotionAdj anchor.png

複数のTPoseにて構成されるモーションにおいて、各々のポーズ間をつなぐ方法。

typedef enum {
  ADJ_SACC_SDECEL,
  ADJ_SACC,
  ADJ_SDECEL,
  ADJ_CONST
} TMotionAdj;
  • ADJ_SACC_SDECEL

    S字(sin波)による加減速で2点間を補間
    始点及び終点近傍の速度が遅くなるため、機械的な負荷が軽減される

  • ADJ_SACC

    S字(sin波)による加速で2点間を補間
    始点のみ近傍の速度が遅くなる

  • ADJ_SDECEL

    S字(sin波)による減速で2点間を補間
    終点のみ近傍の速度が遅くなる

  • ADJ_CONST

    定速度で2点間を補間

Page Top

TPose anchor.png

typedef struct {
  TStructure  Structure;
  TMotionAdj  Adj;
  int         Div;
} TPose;
  • TStructure Structure

    アプリケーションの構造に合わせた角度情報

  • TMotionAdj Adj

    補間方式

  • int Div

    補間時間[ms]
    モーションにおいてはこの時間を経てStructureで設定された各軸の角度へ遷移させる

Page Top

PPose anchor.png

TPoseのポインタ型。

Page Top

TApplyPart anchor.png

モーションの再生やアクチュエータへの設定を行う際に、それらを適用するTStructure内のどの部位(軸)に適用するかを定義する。さらに、モーションの再生中は、本構造体がバッファを含めたデータの実態を担う。そのため、内部的な値の保持やバッファの定義が多く、定義の際に使用するメンバーは限られる。
なお、宣言する際に少々トリッキーな手法を用いるため、使用する際はサンプルプログラム等で確認の事。

typedef struct {
  int         CurrentPose,
              PoseNum,
              MotionIntDiv,
              MotionDiv;
  TPose       Motion[FD_MAX_POSE_NUM+1];
  const bool  Registed;
  const bool  Stop;
  const bool  Playing;
  uint8_t     Priority;
  uint8_t     PartNum;
  short       *Part[];
} TApplyPart;
  • int CurrentPose

    定義及び引用不可 (現在のポーズ位置を保持)

  • int PoseNum

    定義及び引用不可 (現在のポーズ数を保持)

  • int MotionIntDiv

    定義及び引用不可 (モーション分割初期値を保持)

  • int MotionDiv

    定義及び引用不可 (モーション分割現在値を保持)

  • TPose Motion[FD_MAX_POSE_NUM+1]

    定義及び引用不可 (モーション再生用バッファ)

  • const bool Registed

    定義及び引用不可 (内部テーブルへの追加フラグ)

  • const bool Stop

    定義及び引用不可 (モーション停止指令)

  • const bool Playing

    定義及び引用不可 (モーションの再生中フラグ)
    true: 再生中
    false: 再生終了

  • uint8_t Priority

    優先度
    値が小さいほど優先度が高く、複数のモーションを同時に再生する等で部位が干渉する場合は、本優先度が最も高いものが適用される

  • uint8_t PartNum

    Partで定義されるオフセットアドレスの要素数

  • short *Part[]

    TStructure内の配列のオフセットアドレス
    ここで列挙される軸が適用対象となるが、例えばTStructureで定義された配列の1,2,4,5番目([0],[1],[3],[4])の4つの要素をオフセットとする場合は、fd_AxisOfsマクロを使用して以下の様に記述する。

    fd_AxisOfs(0), fd_AxisOfs(1), fd_AxisOfs(3), fd_AxisOfs(4)
Page Top

PApplyPart anchor.png

TApplyPartのポインタ型。

Page Top

TTrc100Stat anchor.png

RC-100Bの1つのボタンの状態を示す。

typedef struct {
  bool        change;
  bool        down;
} TTrc100Stat;
  • bool change

    ボタンの状態変化(UP->DOWNないしDOWN->UP)の有無
    true: あり
    false: なし

  • bool down

    ボタンの押下状態

    true: DOWN false: UP

Page Top

Trc100Stat anchor.png

RC-100Bの10個のボタンの状態を示す配列。それぞれの要素はTTrc100Statである。

typedef TTrc100Stat Trc100Stat[10];

配列の要素を抽出する際は、以下のマクロが使用できる。

#define _RC100_U 0  // 上方向キー
#define _RC100_D 1  // 下方向キー
#define _RC100_L 2  // 左方向キー
#define _RC100_R 3  // 右方向キー
#define _RC100_1 4  // 1ボタン
#define _RC100_2 5  // 2ボタン
#define _RC100_3 6  // 3ボタン
#define _RC100_4 7  // 4ボタン
#define _RC100_5 8  // 5ボタン
#define _RC100_6 9  // 6ボタン
Page Top

Prc100Stat anchor.png

Trc100Statのポインタ型。

Page Top

TTsixaxisStat anchor.png

SIXAXISないしDUALSHOCK3の1つのボタンの状態を示す。

typedef struct {
  bool        change;
  bool        down;
} TTsixaxisStat;
  • bool change

    ボタンの状態変化(UP->DOWNないしDOWN->UP)の有無
    true: あり
    false: なし

  • bool down

    ボタンの押下状態

    true: DOWN false: UP

Page Top

TsixaxisStat anchor.png

SIXAXISないしDUALSHOCK3の17個のボタンの状態を示す配列。それぞれの要素はTTsixaxisStatである。

typedef TTsixaxisStat TsixaxisStat[17];

配列の要素を抽出する際は、以下のマクロが使用できる。

#define _SIXAXIS_BTN_U        0   // 上方向キー
#define _SIXAXIS_BTN_D        1   // 下方向キー
#define _SIXAXIS_BTN_L        2   // 左方向キー
#define _SIXAXIS_BTN_R        3   // 右方向キー
#define _SIXAXIS_BTN_TRIANGLE 4   // △ボタン
#define _SIXAXIS_BTN_SQUARE   5   // □ボタン
#define _SIXAXIS_BTN_CROSS    6   // ×ボタン
#define _SIXAXIS_BTN_CIRCLE   7   // ○ボタン
#define _SIXAXIS_BTN_R1       8   // R1ボタン
#define _SIXAXIS_BTN_L1       9   // L1ボタン
#define _SIXAXIS_BTN_L2       10  // L2ボタン
#define _SIXAXIS_BTN_R2       11  // R2ボタン
#define _SIXAXIS_BTN_SELECT   12  // SELECTボタン
#define _SIXAXIS_BTN_START    13  // STARTボタン
#define _SIXAXIS_BTN_PS       14  // PSボタン
#define _SIXAXIS_BTN_RANA     15  // 右アナログスティック
#define _SIXAXIS_BTN_LANA     16  // 左アナログスティック
Page Top

PsixaxisStat anchor.png

TsixaxisStatのポインタ型。

Page Top

TDXAlarm anchor.png

ライブラリ内及びネットワークデバイスで検出されたエラーないしアラームの情報。

typedef uint16_t TDXAlarm;

各ビットの割り当ては以下の通り。
ライブラリ内で定義されるアラーム。

#define ALARM_INVALID_DEVICE (1 << 15) // 諸元と異なるデバイス
#define ALARM_INVALID_ID     (1 << 14) // 指定できないID
#define ALARM_DIFF_ID        (1 << 13) // 想定されないID
#define ALARM_ILLEGAL_SIZE   (1 << 12) // 想定されないデータサイズ
#define ALARM_INVALID_PARAM  (1 << 11) // 想定されないパラメータサイズ
#define ALARM_COMM           (1 << 10) // 通信ポートの不良
#define ALARM_CHECKSUM       (1 << 9)  // チェックサムの不一致
#define ALARM_TIMEOUT        (1 << 8)  // 通信タイムアウト

デバイスで定義されるアラーム。

#define ALARM_DX_INST        (1 << 6)  // 未定義のインストラクション
#define ALARM_DX_OVERLOAD    (1 << 5)  // 過負荷
#define ALARM_DX_CHECKSUM    (1 << 4)  // チェックサムの不一致
#define ALARM_DX_RANGE       (1 << 3)  // 設定範囲外
#define ALARM_DX_OVERHEAT    (1 << 2)  // 過加熱
#define ALARM_DX_ANGLE       (1 << 1)  // 位置指令の範囲外
#define ALARM_DX_OVERVOLTAGE (1 << 0)  // 過電圧
Page Top

PDXAlarm anchor.png

TDXAlarmのポインタ型。

Page Top

TAlarmStatus anchor.png

ネットワークデバイスの持つIDとアラームを紐付けた構造体。

typedef struct {
  uint8_t     id;
  TDXAlarm     Status;
} TAlarmStatus;
  • uint8_t id

    デバイスのID

  • TDXAlarm Status

    デバイスのアラーム

Page Top

PAlarmStatus anchor.png

TAlarmStatusのポインタ型。

Page Top

TEdCmd anchor.png

fd_AssistMotionEditで指定するコマンド。

typedef enum {
  TED_PLAY,
  TED_REVERSE,
  TED_FOWARD,
  TED_CAPTURE,
  TED_DELETE,
  TED_INSERT,
  TED_REPLACE
} TEdCmd;
  • TED_PLAY

    モーションデータを頭からフル再生

  • TED_REVERSE

    1つ前のポーズに軸を移行

  • TED_FOWARD

    1つ後のポーズに軸を移行

  • TED_CAPTURE

    現在の角度を取り込み、最後のポーズの後に追加

  • TED_DELETE

    現在の1ポーズを削除

  • TED_INSERT

    現在の角度を取り込み、現在のポーズの前に挿入

  • TED_REPLACE

    現在の角度を取り込み、現在のポーズを置換

Page Top

TFileInfo anchor.png

FATFSにおけるファイル情報構造体。

typedef struct {
  uint32_t fsize;      // File size
  uint16_t fdate;      // Last modified date
  uint16_t ftime;      // Last modified time
  uint8_t  fattr;      // Attribute
  char     fname[13];  // Short file name (8.3 format)
} TFileInfo;
  • uint32_t fsize

    ファイルのバイトサイズ

  • uint16_t fdate

    変更された最後の日付

  • uint16_t ftime

    変更された最後の時間

  • uint8_t fattr

    ファイルの属性
    fatfsに準じる以下のビットがアサインされる

    #define AM_RDO  0x01 // Read only
    #define AM_HID  0x02 // Hidden
    #define AM_SYS  0x04 // System
    #define AM_VOL  0x08 // Volume label
    #define AM_LFN  0x0F // LFN entry
    #define AM_DIR  0x10 // Directory
    #define AM_ARC  0x20 // Archive
    #define AM_MASK 0x3F // Mask of defined bits
  • char fname[13]

    ショートファイル名(8.3フォーマット)

Page Top

TColor anchor.png

RGB555のカラーフォーマットと透過ビットを合わせた構造体。16bitでの指定も可能。

typedef union {
  struct {
    uint16_t B:5;
    uint16_t G:5;
    uint16_t R:5;
    uint16_t t:1;
  };
  uint16_t WORD;
} TColor;
Page Top

注意事項 anchor.png

Page Top

スタックサイズ anchor.png

関数内で動的に確保できるメモリのサイズはToppersのライブラリ(aspcore.h内に宣言がある)によって2kバイトに制限されています。これは変数の宣言も含まれ、本ライブラリで定義される型等はサイズが大きいため、不用意に宣言(記憶域をautoで指定)してしまうと気づかないうちにスタックフローが生じ、プログラムの動作に支障をきたします。
関数内でサイズの大きい変数を確保する場合はstatic指定子を付与し、静的にメモリを確保させる事でこの制限を回避する事ができます。


Front page   Diff ReloadPrint View   Page list Search Recent changes   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom)
Last-modified: 2012-12-24 (Mon) 12:12:36 (JST) (3056d)