RPU-10講座/第八章 コンプライアンスの変更

公開日:  最終更新日:2014/06/05

すいません m(_ _)m、本記事はブログ引越時に書式が崩れました。順次修正中です。

RS301は、コンプライアンスマージンやスロープ、最大トルクなどをコマンドで指定することができますので、使い方を紹介します。何を変更するとどんなことが起こるかは、RS301のマニュアルを読んでください。


…と思って、サンプルプログラムを書こうと思ったのですが、あまり面白いプログラムは書けそうも無かったので、単純にパソコンのキーボード入力でコンプライアンスパラメータを変更するだけのプログラムを掲載することにします。ちなみにサーボ内のパラメータは変更していますが、書込みは行っていないのでサーボ電源を落とせば元に戻ります。


それから、余談みたいな話ですが、rs0_puts_P()、なんとなく改行してくれないみたいなので、文字列に改行コードを入れるようにしました。


■GDLで用意されている関数
これに関連した機能を持つ関数としては、以下のものがあります。



extern short SV_ParamCP( unsigned char *tbuf, unsigned char id, SRV_PARAM *param );
extern short SV_Torque( unsigned char *tbuf, unsigned char id, unsigned char torque );


今回はSV_ParamCP()の方だけ使用します。SRV_PARAMという構造体ですが、コンプライアンスマージン、コンプライアンススロープ、パンチを一度に指定するための構造体です。例によって通信バッファ、サーボIDを指定し、あらかじめこの構造体に設定しておいたパラメータのポインタを渡してやればOKです。値の意味合いについては「RS301CR/RS301CD取り扱い説明書」の「4.制御方法 メモリーマップ」-「ROM領域のメモリーマップ」-「No.24~No.29」、及び「4.制御方法 メモリーマップ」-「RAM領域のメモリーマップ」-「No.35」を参照してください。


ちなみに…ここでは試していませんが、たぶん、「id」に0xFFを指定すると、接続されているすべてのサーボを一度に変更することができると思います。


■サンプルプログラム
コンプライアンススロープを100まで落として、生ぬるい感じに設定するプログラムをサンプルとしてアップしておきます。このパラメータは、サーボ内に記憶することが可能なパラメータですが、本サンプルプログラムではサーボの電源を切ったら、サーボは忘れてしまいますので、いつでも初期状態に戻すことができます。


あとはこのプログラムを実行し、Simple Termから「a」を入力し、サーボホーンをうにうに動かしてみてください。サーボホーンをつまんで回そうとすると、固めですがなんとかグニグニっと動きます。しかし、「b」を押すことでデフォルト(RS301を対象としています)の値に戻り、再びカッチリ感が戻ってくると思います。今回、SV_Torque()の方はいじっていませんが、試しにやってみるとおもしろいです。


   1: //—————————————————————————————-
2: // コンプライアンス系パラメータを設定します。
3: // サーボにコンプライアンス系パラメータ(スロープのみですが)を設定します。
4: //
5: // 環境 RPU-10、GDL V2.00
6: // 説明 ビルドされた本プログラムをRPU-10へ転送後、パソコン側で「SIMPLE TERM」(GDLに
7: // 同梱)などを使って通信速度115200bpsで通信ポートを開いてください。その後RPU-10
8: // を再起動するとプログラムがスタートし、起動文字列が表示されます。本プログラムは
9: // 端末から”a”を入力するとゆるゆるに、”b”を押すと元に戻るようになっています。
10: //
11: // AUTHORED BY SISO JUNK STDUIO
12: //—————————————————————————————-
13: #include <avr/pgmspace.h>
14: #include <avr/io.h>
15: #include <avr/interrupt.h>
16: #include <avr/eeprom.h>
17: #include <stdio.h>
18: #include <avr/boot.h>
19: #include <avr/wdt.h>
20:
21: #include <sv.h>
22: #include <rs.h>
23:
24:
25: int main( void )
26: {
27: SRV_PARAM stSrvParam; // サーボ設定パラメータ構造体
28: unsigned char aucTBuff[256]; // RS485通信用バッファ
29:
30: RPU_InitConsole( br115200 ); // RPU-10ライブラリの初期化
31: SV_Init( br115200 ); // サーボ制御ライブラリの初期化
32: sei(); // 割り込み処理開始
33:
34: // 起動メッセージの表示
35: rs0_puts_P( PSTR( “COMPLIANCE PARAMETER\n” ));
36:
37: // 1秒待つ(よく知らないけど必要らしい)
38: RPU_ResetTimerCounter();
39: while( RPU_GetTimerCounter10() < 100 );
40:
41: // サーボ(1)トルクオン
42: SV_TorqueOnOff( aucTBuff, 1, 1 );
43:
44: while( 1 ){
45: // RS232Cより入力を受け付け、角度指示変数を設定する。
46: switch( rs0_getc()){
47: case ‘a’:
48: rs0_puts_P( PSTR( “SOFT SETTING\n” ));
49: // 変数にパラメータを設定
50: stSrvParam.comp_m_r = 2; // RS301のデフォルト値
51: stSrvParam.comp_m_l = 2; // RS301のデフォルト値
52: stSrvParam.comp_r = 100; // RS301のデフォルト値10→100
53: stSrvParam.comp_l = 100; // RS301のデフォルト値10→100
54: stSrvParam.punch = 180; // RS301のデフォルト値
55: // サーボ(1)コンプライアンスパラメータ設定
56: SV_ParamCP( aucTBuff, 1, &stSrvParam );
57: break;
58: case ‘z’:
59: rs0_puts_P( PSTR( “HARD SETTING\n” ));
60: // 変数にパラメータを設定
61: stSrvParam.comp_m_r = 2; // RS301のデフォルト値
62: stSrvParam.comp_m_l = 2; // RS301のデフォルト値
63: stSrvParam.comp_r = 10; // RS301のデフォルト値
64: stSrvParam.comp_l = 10; // RS301のデフォルト値
65: stSrvParam.punch = 180; // RS301のデフォルト値
66: // サーボ(1)コンプライアンスパラメータ設定
67: SV_ParamCP( aucTBuff, 1, &stSrvParam );
68: break;
69: default:;
70: }
71: }
72:
73: return 1;
74: }
 

■今回使用した関数



  • short SV_ParamCP( unsigned char *tbuf, unsigned char id, SRV_PARAM *param );
    例によって戻り値は調べていませんが、SRV_PARAM構造体に設定されたパラメータを、「id」で指定されたサーボに設定します。書き込まれたパラメータはサーボのRAM上に保存され、電源を切ったら忘れます。データそのものはROM領域となっていますが、実際にアクセスするところはRAMで、起動時にROMから読み込むようになっており、ROMへ書き込み要求があるとRAMからROMに書込みを行っているように思います。

■宇宙大会選抜大会で投げてみて
なんでいきなりこの話かといいますと、最初、コンプライアンス系のパラメータをいじれば着地のショックに耐えれるかな?って考えたんですが、実際には耐えられませんでした。着地の衝撃は想像以上です。もっと軽い機体ならいいかもしれませんけど、ギアが…。RS301、かなり耐久性のあるギアがついていると思うんですが、それでも耐えられない時がありました。投げ競技、きっついです。





※注意:本BLOGにてRPU-10での再プログラミングについての情報を公開していますが、これらはSISOが個人的に再プログラミングを行った時の技術情報を整理して紹介しています。GDLへのRPU-10ライブラリ同梱については、Best Technologyさんのご好意で、趣味人への1つのチャンスとして同梱してくださっていると理解しています。そのため、RPU-10の再プログラミングについては、くれぐれもご自身の責任で、また、Best TechnologyさんやFUTABAさんに問い合わせたりすることの無いようにお願いいたします。

  • このエントリーをはてなブックマークに追加
  • Pocket

関連前後記事

Your Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

PAGE TOP ↑