R4N-Series 製作日記
とりあえず、次の大会にむけてスタート。 ということで、ホームページもリフレッシュしてみました。
KOの軸付ボトムケースを使ってのロボットに作り変えましたが、デジカメがどこかに行ってしまって写真が取れずです。 見つかり次第、掲載予定。
軸付きボトムケースに付属しているフランジ付きベアリングは外形 15mm なので、その穴だけあけることで簡単に取り付けできました。
(2004年8月15日(22日写真追加))
RCプロポからの信号(4ch) を 1本の IRQ に入れて割り込み処理させようとした場合(どのチャンネルかというのは、別のビット線を作る)、ちょっとした注意が必要でした。 それをまだ掲載していませんでしたので、VHLD を載せておきます(いつものように、素人趣味の世界ですので、間違った表記あるかもしれません。 適宜ご指摘いただけると助かります)。
1: entity R3N72 is 2: Port( 3: PROPO_IN : in std_logic_vector( 3 downto 0 ); -- from RC-PROPO 4: PROPO_OUT : out std_logic; -- to CPU IRQ0 5: PROPO_ADRS : out std_logic_vector( 2 downto 0 ); -- to CPU PA10-12 6: ); 7: end R3N72; 8: architecture Behavioral of R3N72 is 9: signal R_rcp1 : std_logic; 10: signal R_rcp2 : std_logic; 11: begin 12: R_rcp1 <= not( PROPO_IN(0) or PROPO_IN(1) or PROPO_IN(2) or PROPO_IN(3) ); 13: PROPO_OUT <= ((PROPO_IN(1) or PROPO_IN(3)) xor R_rcp2) or ((PROPO_IN(0) or PROPO_IN(2) or R_rcp1) and R_rcp2); 14: with PROPO_IN select 15: PROPO_ADRS <= "100" when "0001", 16: "101" when "0010", 17: "110" when "0100", 18: "111" when "1000", 19: "000" when others; 20: process( R_rcp1 ) begin 21: if( R_rcp1'event and R_rcp1 = '1' ) then 22: R_rcp2 <= not( R_rcp2 ); 23: end if; 24: end process; 25: end Behavioral; |
12-13行目、20-24行目がミソです。
単に12行目だけでいけるのか?と思っていたのですが、実際には、CH1, CH2, CH3,
CH4 というのは、各チャネルのパルス立下りと、次のチャネルのパルス立ち上がりが同時でした(次の図)。
![]() |
そのあたりをゴチャゴチャと処理させてるわけです。 IRQがたくさんあれば、こんなマトメルということをしなくても良いのですが、余裕が無かった&将来チャネルが増えた場合のことを考えて作ってみました。 RC プロポによっては、立下りと立ち上がりが同時でないものもあるのかもしれませんが、1つしかもっていないもので、調査しきれてません。
一応、今の時点で出来上がっている制御系ボードです。 EEPROM も交換可能な位置への配置と、on-board 実装と2タイプ用意してます。 on-board 実装は、WP信号処理を常に書き込み禁止としております。
(2004年8月22日)
なかなかホームページの更新ができてません。 というのも、出張が続いて全然着手できてないのです。
とりあえず、まだ未公開でしたRCサーボの直交軸部分の図面を挙げておきます。 今回のは
KO製軸付きボトムケースを使ってのものです。
CAD は DJ!! を使っているのですが、ものさしで寸法を合わせても切り出すと合わない、ということが良くありました。 気が付けば何てことはないのですが、ページ設定での印刷倍率がずれていたのでした。 寸法が合わない場合は、印刷時の設定に注意を。
![]() |
|
![]()
|
|
出来上がりは こんな感じです。 |
ちょっと前になりますが、SISO さんから Futaba製 T4VF (SKYSPORT4) の TRAINER 機能について紹介いただきました。
ここに使用されている方の説明がありました。 う〜ん。 これでは、私にはわからない。。。
(2004年9月4日)
(ちょっと余談) 4th Conference の資料が RoboOne web site に掲載されてます。 みなさん力説されたという話しを聞いてましたが、 資料を読ませていただいて、ほんと感じました。 特に、バーニング宮田さんの資料はバイブルにも、また、 忘れかけてた趣味の楽しさ、というのが伝わってきました。 RoboOne に出ることも楽しそうだけど、 自分でやった方がより良いものができそう、という可能性がある領域には、 妥協せず突っ込んでいく、これですね。 |
(ちょっと余談2) BestTech さんの 7047F ボードが製造中止になりました。 私もショックです。 7145F のボードにシフトしていくことになるのか、 SH系からは身を引くか。。。 趣味で楽しむ領域だからこそ、 愛用していたボードの生産中止は痛いです。 (壊れてしまったら、全部制御系を作り直さないといけないので) 供給が難しくなったICって何だろう。 CPUそのものかなぁ。。。 ところで、サーボの信号って3.3V I/O信号でも 大丈夫なんだろうか?? |
(2004年9月11日)
うっかりしてました。
以前、7047F の IRQ3 がうまく動作しないと思って使わない方針にしてたんですが、マニュアルに書いてある
「 内蔵 ROM 有効/無効8ビット外部拡張時、初期値1になります 」
を見落としてました。
PFC.PBCR2.BIT.PB5MD = 1; // IRQ3入力(INTC) 指定
これだけだと、 PB5 のモードは、PB5MD2 がデフォルトで 1 になってしまってるので、「CK出力指定」になってしまうんですね。
PFC.PBCR1.BIT.PB5MD = 0; // IRQ3入力(INTC) 指定
これも必要なんですね。 これで、RCプロポからの割り込みを IRQ2本分使えるのでスマートになりました。
(2004年9月18日)
(ちょっと余談) このところの連続出張などで体に負担をかけすぎました。 ダウンです。 今日精密検査を受けてきました。 とりあえず2,3日安静ということでしたので、一安心。 |
(ちょっと余談) バーニング宮田さんが復活されましたね。 ますますパワーアップされる兆しが伺えるコメントあり。 すばらしいです。 期待してます! |
(2004年9月29日)
今日は、ノンビリと日ごろ疑問に思っているスイッチの話しでも。
サーボに流れる電流は、ロボットの場合、半端じゃない大きさになっているという話をよく聞きますよね。
|
さて、どのスイッチを使おう。。。 いずれのスイッチを選ぶ上でも、転倒とか何かの拍子にスイッチが切れないようにだけはしたいですね。
(2004年10月2日)
台風が首都圏を直撃してます。 今年はほんと台風が多いです。
ようやく、手を作ってみました。 ちょっと寸法がずれちゃったので、かみ合わせがイマイチです。
あと、物をつかむというイメージで腕の自由度を1つ増やしました。
ロボット全体で22自由度です。
ロボット左に、サーボを解体したものが移ってますが、バーニング宮田さんの俺サーボに刺激をうけて、1つやってみようと思い解体からはじめました。
ですが、まずは完成したロボットを1つ作りたいので、長期戦で遊んでみたいと思ってます。
|
(2004年10月9日)
(ちょっと余談) 新潟を中心とした地震が昨夜ありました。 余震も多く続き、ライフラインが切れた状態だということ。 一日も早い復旧を祈るだけです。 |
今や Treva が新品で入手できないので、小さなカメラは無いのかな?と思っていたら、東芝ボイスレコーダー用
DMR-C1 という小型カメラがありました。
近くの量販店でも在庫があったので、とりあえず2つ入手(パソコンを買ったときのポイントがあったので、安くつきました)。
今回は、ななしのさんの無印非売品にて公開されてます、解析結果をもとに SH2/7047F に接続して読み込んでみたので、紹介してみたいと思います。
(参) センサ上のピンホールレンズは M1.4 の長めのものを別途用意 |
非常にシンプルな制御ソフトを書いて実験したのですが、以下の点ではまってしまいました。
552AFFEC0E787880B0009040989025A1919C21A3171700000000000000002AD540 ・・・後略・・・ |
連続 0 が8バイト分ある後の 2AD540 に着目しました。
2AD540 (16) = 00101010110101010100 (2)
ですので、データ開始コード 55AA(16) = 0101010110101010 (2) は1ビットシフトさせたところにあることがわかります。
データの最初から、1ビットを削除して再度読み取りしなおすと、
AA55FFD81CF0F1016001208131204B43233843462E2E000000000000000055AA80 ・・・後略・・・ |
となり、ヘッダ開始コード AA55 FFD8 というものが見えてきました。 その他も、ななしのさんの解析結果に一致してることがわかります。
あとは、YUVデータをエッヂ認識させたり、色認識のために RGB に直したり、応用できそうです。
(2004年10月24日)
今日はちょっと早く帰宅できたので、先日の画像取り込みについてPCにデータを送ってちゃんと画像が出ているか確認をしてみました。 また、エッヂ検出と閾値処理を行ってみました。
![]() |
![]() |
エッヂ検出は、YUV データの Y値に対して、(x,y)座標と(x+1,y), (x,y+1)座標との差分を二乗平均しています。
輝度 = sqrt( ( Y(x+1,y) - Y(x,y) )^2 + ( Y(x,y+1) - Y(x,y) )^2 )
閾値を上記輝度に対して30未満は輝度 0、30以上は輝度255(Max) (今回の画像例)
ちなみに、画像処理関係のまとまった web が microsoft の ここ とか ここ にありますので、勉強にはとっても便利かと思います。
ここで1つうっかりしていたことに気がつきました。
そこそこ画像はしっかりと取れるのですが、DMR-C1 -> BTC070(SH2/7047F+外部SRAM)
に転送するのに、数秒掛かってしまってます。 読み取り部分には、全く wait
を入れていないのですが、7047F の外部SRAMへのアクセスそのものが遅いために時間が掛かってしまうのでしょう。 ですが、ロボットの制御に対して、そんなに時間は取れないですよね。 途中で
DMR-C1 への CLK を止めて画像入力再開でも問題ないのか? というのが気になります。 これができないのであれば、4Mbit
程度の SRAM と CPLD or PIC で専用取り込み回路を組まないといけないですねぇ。。。 画像処理をさせたいので、2CPU化かなぁ。。。
そこで、簡単にできそうなことを1つ考えました。
SRAMアクセス回数を減らせばいいんだから、画素数を減らす、ということをすればいいかな? です。 今は
DMR-C1 を全部取り込むようにしてますが、中央付近のみで 50x50とかの画素数にすれば結構早く終わるかもしれません。 また、せっかくの解像度ですから、保存は適度に下げるとして、ノイズ低減のため3x3を1つの画素に平均化させるのもよいかも。
いずれのプランもやってみて決めることに。 後者だと手ぶれ防止機能ではないですが、ロボット歩行時の画像ブレに対応できそうです。
(2004年10月27日)
(ちょっと余談) とても仕事の関係でロボット作りやソフト作成に時間が取れませんが、 そろそろ気合いをいれてやってみようと思います。 あまり更新していないのに見に来ていただいている方に感謝をこめて・・・ アイデア勝負のところは、大会本番まで封印(といえるほどのアイデアかな?)するとして、 いろいろと改造を続けているところをアップデートしていきたいと思います。 (まずは、RedVersion 対応双方向通信可能 LBC like な CPLD かな?) (限りある SH2 の TIOC(今回は6本) で標準 24本の RedVersion の双方向通信です) |
今年 9/4 日記(このページの上の方)に触れてますが、Futaba製プロポのトレーニング機能について、SISOさんのところで詳細にノウハウが公開されてます。
なるほどです。
これを応用すれば、4ch プロポでも、複雑なコマンドを送信したいときなどは、簡単に送信できそうですね。
大会で頭が真っ白になって複雑なプロポの動かし方を忘れても、ボタン1発でできるように用意できれば安心でしょう。 その前に、私の場合は、大会に出ることですが。。。
大会といえば、第7回 RoboOne 大会の参加規程が発表になりましたね。
足のサイズがドンドン小さくなっているような気がします。 今回は今のままでOKそうですが、今後はこれ以上小さくならないことを祈りたいと思います。
(2004年11月6日)
(ちょっと余談) KOさんから KRS-2350ICS-Red Version が出ましたね。 標準が軸付きボトムケースとあるんですが、以前のフラットのも欲しいですよね。 だって、これだと直交軸が作りづらいです。 ロボット王国を見ると、KRS-2346ICS-Red Version は完売しました、とあるし。。。 |
(2004年11月12日)
(ちょっと余談) 何気なく秋月通商(株)さんのWebにあるトラ技広告をみていると、 H8/3664 ピンコンパチの H8/3694F が出るそうな。 価格も \1,800 と控えめ。 タイニー派の方は、こちらに切り替わっていくのかな?? |
![]() |
(2004年11月19日)
久しぶりの連日Web更新。
今日14時までの成果ですが、ようやくCPU周りの回路検査が開始できました。
まずは、RedVersion の制御で、出力と入力を交互にすることで、位置読み取り回路の検査を行いました。
![]() |
KRS-2346ICS Red Version の動作確認結果
|
CPLD の単純信号分配から、双方向制御する部分がこれでちゃんと動いていることがわかりました。
ここで少し私が悩んでしまった、失敗について書いておきます。
・・・ その後、サーボを複数つけて同時にどの程度の誤差で読み取れるのか試してみました。
![]() |
やっぱり難しい。。。 4つのサーボを接続して読み取りを連続して行ってみた。 その結果が、上図(左縦軸:PWM count(時間)、右縦軸:差分 )
|
難しいものです。 RedVersion への信号出力指示を順番にずらして、割り込みが同時にならないようにしないといけないのでしょうか。。。
試験環境としては、サーボ4つを制御基板付近においていましたが、これで誤動作したりする??
・・・さらに、その後、がんばって、もうちょっとチューニングしてみました。 とりえずは、割り込み部分は何の変更もしないで、各サーボに対してのオフセットを変更してみました。
![]() |
改善が見えてきました。
|
・・・さらに、さらに、もうちょっとチューニングを。
今回は、プルアップ抵抗を変えてみました。 というのも、サーボからの信号の波形が鈍ってしまっているのではないか? と考えたからです。
その結果は、2%以下の誤差まで追い込めました!
![]() |
(2004年11月20日)
今日も失敗談と成功例を少しだけ(かつ連続更新)。
昔はプログラムを色々と書いていたので、こんなことしなかったなぁ、と思いながらまとめてます。
short 定義変数の四則演算では、代入先を long 定義変数にしないと、オーバーフローする、なんてことを常識と思ってましたが、やってしまってました。
センサからの入力値に対して、平均値処理をさせるということをしている中でやってしまってました(下リストの8,9行目と16,18行目がポイントです。
私の場合、MTU3 の TGRB 割り込みの度に、センサからの値を読み取り、過去7回分と合わせて平均化してます。 割り込みが30msec毎に発生しますので、8回平均だと、0.24秒の平均化処理となります。
1: #define GACC_BUF_BIT (3) 2: #define GACC_BUF_BYTE (1<<(GACC_BUF_BIT)) // 2^(GACC_BUF_BIT) = 8 3: #define GACC_BUF_MAX_BYTE ((GACC_BUF_BYTE)-1) // 8-1 = 7 = 0111(2) 4: #define GACC_OFFSET_X (0x01B9) // 静位置での値 5: 6: #define _port_gacc_x ((AD1.ADDR7.WORD)>>6) // ADC bit7 7: 8: short tmp_gacc_x[GACC_BUF_BYTE]; 9: long ave_gacc_x = 0; 10: int mp_ptr_gacc = 0; 11: 12: #pragma interrupt int_tgib_3 13: void int_tgib_3( void ) // MTU3.TGRB の コンペアマッチによる割り込み発生 14: { 15: // ・・・省略・・・ 16: ave_gacc_x -= tmp_gacc_x[ tmp_ptr_gacc ]; 17: tmp_gacc_x[ tmp_ptr_gacc ] = _port_gacc_x - GACC_OFFSET_X; 18: ave_gacc_x += tmp_gacc_x[ tmp_ptr_gacc ]; 19: 20: tmp_ptr_gacc++; 21: tmp_ptr_gacc &= GACC_BUF_MAX_BYTE; 22: } |
定義文 1 〜3行目がぐちゃぐちゃ書いてますが、これは、21行目を if 文を使わずに行うためのおまじないです。 2の階乗 - 1 の論理積(and) をとる方がスマートだからそうしてます。 こういうのだけは覚えていて、プログラミングしてるんですが、今回の四則演算でのオーバーフローは情けなや。。。
以下に、秋月通商(株)さんで入手した ACB302 を SH2/7047F の ADC により取得したデータで、上記方式で平均化処理してみた結果です。
前転倒、後転倒したときは、X=0,Y=+1/−1となった時だということがわかりました(というか、そのように基板に乗せているのです)。
![]() |
ひとつ困ってます。
KOのサーボをオリジナルサーボに変えようと思って解体を進めてるのですが、モータがサーボケースから外せません。
誰かやり方を教えてください!(BBSにもでコメントいただけると助かります)
オリジナル化しようとしているのは、PS2174FET ですが、モータ部分は KRS-2346ICS,
PDS-2344FET などと同じですので、このあたりでやったことある方のコメントが助かります。
(ちょっと余談1) ONOの電脳壁新聞(denno-ono)さんありがとうございます。 いつも、とりとめのない書き方しているので恥ずかしい限りですが、掲載はとてもうれしいです。 これからもよろしくお願いします。 まじかる☆マリオネット(人形つかい)さんのところ同様、ベンチマーキング的な web を 続けていくことの難しさがあるかと思いますが、がんばってください。 > denno-ono さん、人形つかいさん |
(ちょっと余談2) ROBO-PRO なるものがキックオフされるんですね。 ROBO-ONE のハードルが高くなってしまったので、 期待したいですね。 |
(2004年11月21日)
サーボ解体でサーボケースからモータが外せないということで困ってましたが、なかぷさんに教えていただき、無事外せました。 ありがとうございました。
外しながら思ったのですが、まわして外れるってことは、サーボの回転に負荷がかかると、簡単に外れてしまうんじゃないか?です。
市販状態だと、制御基板に対してモータの電極端子が2箇所固定されてるので、回らないので、うまく考えてるな、というところですね。
モーターの裏側(端子部分)で固定するパーツを考えないといけないんでしょうね。。。 ともあれ、1歩前進。
サーボとの通信系のタイミングについてまとめてみました(ちょっと見づらいかも・・・)。 先週色々とプログラミングしていて、ちゃんと動作しているのが確認できたので、これで基本的なところはいけそうです。
![]() |
|
サーボ制御の手順としては、位置取得→サーボ制御 の順に行い、位置取得の際に前回設定した値との差分がサーボへ何がしかの負荷が掛かっているものと判断し、次のサーボ制御へ反映させるようにしようと考えてます。 足裏にセンサをつける代わりに、サーボの角度を読むことで負荷を計測できれば、ちょっとした段差などでもうまく歩行できるのかな? と、まだ、ろくに歩けてもいないのに、構想だけは進んでます。
(2004年11月27日)
(ちょっと余談) 今日は羽田空港第2ターミナルオープンの日。 偶然に使うことになったのですが、一言。 とにかく通路が長い!! 空港について歩くこと、歩くこと。 以前は、バスでいやだなぁって思ってましたが、 バスの方がよっぽど便利で早いかも。 けれど、綺麗だし、明るいし、好感度ですね。 あ、そうそう。 動く歩道、結構スピード速いのでコケナイように。 |
(2004年12月1日)
あれれ? 勘違いしてたかな??
RED-Version の位置取り込みを色々と最適化しようと思ってプルアップ抵抗とか変えてみたのですが、先日のプログラムのポカミスと同じことをやってしまってるみたいな気がしてきました。プルアップ抵抗を入れて、サーボとやり取りしてる信号を見ていると、基準電位がマイナスになってしまってる! どして? なして?? 何か勘違いしてるぞ、きっと。。。
オシロの使い方を間違ってるのかな??
その後・・・
Input Coupling を AC にしてました! そのため、入力信号がマイナスに見えただけみたいです。 ということで、一安心。。。
でも、まだ、何かあるぞ。。。 まとまったところで、ご紹介を。。。
(2004年12月4日)
サーボと画像関係でいろいろとテストをしてみました。 スーパーキャパシタもあるよ。 (また、最新日記の html ファイルを myrobo.html に固定しました。)
再度、RED-Version の位置読み取りについて、いろいろとやってみました。 結果、「早く動かすと、オーバーシュートした値が帰ってくることがある」ことがわかりました。 また、考えていた入出力信号波形にはなっていないために、読み取り時のサイクルは通常の約2.5倍以上の周期にすることが望ましいことがわかりました。 ただし、連続してサーボ入出力する場合です。 理屈は簡単です(後述)。
![]() |
|
読み取り周期を約2.5倍以上にしなければならない理由をオシロスコープの取り込み画像を使って紹介します。
オシロスコープの画像取り込み結果(デジカメ)
|
上図の赤横線は、回路設計&プログラミングしてるときは、Lo-level だと思い込んでいた部分です。 ここは、CPU
の端子に直接サーボを接続している場合は、Input-Capture 終了直後に端子を出力&Lo-level
指定することで回避できるのですが、CPLD などを間に入れている場合は、回路(HDL)が複雑になるだけです。
この赤横線が問題だというのは、赤横線の時間が0.7〜2.3msec. だとサーボ側は角度指定のパルスが来た、と解釈してしまうのです。 ですので、この赤横線信号部分は2.3msec.
以上であることが望ましいです。 そうすれば、サーボは信号ではないと判断し、無視してくれます。 あまり長くし過ぎると、全体の制御周期が伸びてしまうので、得策とは言えないと思います。 回路的にこのあたり、きれいに書ければ回路で逃げたいところですが制御ピンが増えたり、CPLD
レベルでは組めないなどありそうです。 どなたか、テクニックを紹介頂けると幸いです。 (ちなみに、緑縦線の直前の波形は、角度指定の出力パルスです。)
ここで、新しい新人君を紹介します。
ちょっとお高い買い物ですが、ちゃんと波形をみてハード調整してみたいな、ということで、Witting Technologies の Bench Scope(2ch 20MHz) を買っちゃいました。 秋月電子通商(株)さんで \59k (ケーブルもう1本追加)で購入です。 右写真は実際に調整中の様子です。
もう1つ、ロボット作りに良さそうなアイテムを見つけましたので、紹介します(下右写真)。 早速取り付けてみたぞ、の図が下左写真です。
右写真で左から順に、
これまでつかってきた ELNA製のものは大きな容量を持っているので、電源 OFF の後でも数秒は CPU を動かせてましたが、そこまで蓄えなくても良い場合がほとんどだと思います。 今回、瞬間的に電圧が落ちてしまうのを防ぐという目的で、0.10F のものを実装してみました。 高さが低いので、SH2/CPU 基板とベース基板の間にすっぽり入ってしまいました。 大きさも、4ピッチ□分と、ちょこっとした空きスペースにすっぽり入りました。 これも、秋月電子通商(株)さんで購入できます。 しかし、何故か web では 0.10F の製品が紹介されてません。。。
またまた、もうちょっとチューニングを。(16:00ごろ)
![]() |
サーボを2つ繋いで、単純に逆向きですが、角度指定した時の読み取り誤差について計測してみました。 気になるのは、時々飛び飛びの異常値がでることです。 改善を試みるか、ソフトウェアでフィルタを咬ませるかしてみたいと思います。 2個サーボを繋げたときも、高速動作時にて読み取りズレが発生していることがわかりました。
そろそろ、乱数とかキーボード入力の up/down だけではなく、通常のアクションを考えて補間制御をやってみようと思います。
ちょっと気分を変えて、画像取り込みを再開。(17:30ごろ)
前回の課題でした、途中割り込みが入った場合、正しく読み込みできるか? を検証してみました。 結果、無残にもノイズだらけの画像となりました。
今回のテストを順を追って画像をアップしておきます。
![]() |
![]() |
![]() |
|
(2004年12月5日)
画像取り込みをちょこっと変えてみました。 試験をした順番に紹介します。
結論としては、画像取り込みのためのCLK信号のHigh->Low と画像信号読み取りの間に割り込みが入らなければ安定して取り込めることがわかりました。 逆に言えば、CLK信号から安定して信号が出力されている時間が短い、ともいえます。 その短い時間で取り込みをするために割り込みが掛からないようにすればよいのです。
![]() |
![]() |
CLK High->Low, 取り込みの順 (割り込みあり時) |
取り込み, CLK High->Low の順 (割り込みあり時) |
![]() |
![]() |
CLK High, wait, CLK Low, wait, 取り込みの順 (割り込みあり時) |
割り込み禁止 CLK High->Low, 取り込み 割り込み許可 の順 |
さて、問題は、割り込み禁止している時間に、何かの割り込みを入れたい場合、取りこぼしなどが生じる可能性がでてしまう。
やはり、画像処理に関しては専用のCPUを用意した方がいいのでしょうか。。。回路に詳しくないのでわかりませんが、ハード的に何かできればそれで回避したい気がします。 強引に、CLK
は一定周期で出し続けて取り込めるタイミングだけ画像を取り込むという手段の方がスマートなのかな??
(ちょっと余談) 明日はボーナス日。 満額もらえるんだろうか。。。 |
(2004年12月9日)
ようやく、本格的にモーション作成に入りました(ようやくロボットらしいことを開始です)。
しばらく、アップデートがないかもしれませんが、逆運動学とか、基本的なモーション作成といったところに時間を費やしたいと思います。
ほんとは、もうちょっと回路修正とかやっておきたいのですが、1年前に抱いた構想のレベルまで来たのでハード面の改良はここまで。 サーボケーブルの長さが短いので調整したものに付け替えることだけはやっておきたいと思います。(どうも、途中で延長させているのが外れはしないかと気になって。。。)
2足歩行の際に、ある程度モーションを作っておいて連続動作させる方法と、計算させながらのモーションとありますが、まずは、勉強もかねて、計算させながら歩く、というのをやってみようと思います。 西さんに Excel VBA でのスクリプトをいただいたので、これである程度はシミュレーションできそうです。 とてもわかりやすくなってるので、これからはじめる方には、とっても良いかと思いました(アニメーションが私は一番気に入りました!)。
(2004年12月19日)
モーションを作っていて、瞬停が気になって仕方がないですね。 諸先輩方のように、専用の電源を買ってきてつなげるのが良さそうですねぇ。
あと、CPUなど5V系ではなく、ちょこっとでもマージンのとれる3.3V系に移った方が良さそうに思えました。
たった、1、2日の感触ですが、振り出しに戻りそうな気がしてきました。。。 Li-PO
なら何とかなるかなぁ・・・。
(2004年12月25日)
早速、大電流を安定的に確保できる電源を購入してきました。 1万円前後でないかなぁ、って探してたら、富士無線電機(株)秋葉原店でありました。 ここには、いろんなタイプのものが年末大売出し!みたいな感じでありました。 店頭の裏側にもあるので、もしこれから買おう!っていう方は、店前だけではなく、裏までいってみましょうね。 web
価格よりも、さらに安く売られてましたので、即ゲットです。 30Aで電圧可変タイプのものを選びました。
しかし、それだけでは終わらなかった。。。
予てより、挑戦しようと思ってました、プリント基板作りの工具など一式を買い集めてしまいました。 今日、千石電商さんでいろいろと買いあさっていた人を見かけた!という方は、きっと、それが私です。 大きな荷物を持ち歩いてしまって、ご迷惑をおかけしました。 スルーホール作りのための工具とかが結構高くつきました。 両面基板をつくらなければいらないんですけどね。 きっと、表面実装のQFPタイプのCPUやSRAM、CPLD(FPGA)といったものを取り付けたくなるだろうから、先行投資(?)ということで。
(2004年12月26日)
今シーズンは久しぶりにスキーでもしようと思って、2泊3日の予定を入れていたのですが、全然、雪がないので、取りやめにしました。
ということで、予定していたスキーを中止したので、休みが増えた感じ。
ロボット作りですが、モーション作成は一旦、中断して、動かしてみてわかった弱いパーツを作り直すことにしました。
あと、回路基板も必要に応じて交換することに。
SISO さんのところで、HEW3の体験記がかかれてます。 使いたくなってきました。 HEW3 だと、makefile は使えるのでしょうかねぇ。 最近、ソースが大きくなってきたので、#include ではちょっと見栄えが。。。
(2004年12月28日)
近くのホームセンターで、ようやく頭に仕えそうなものを発見。 普通は、右下写真のように、暗くなると自動的に点灯するライトなんですが、いきなり解体して使おうと思ってます。 中身を見てみたのですが、蛍光灯と光センサだけの簡単な構成でした。
これまでの構想では、MK MOUSE を使おうと思ってたのですが、マウスを使う方が多いので、変えたいな、と思ってたところでした。
ちなみに、MK MOUSE と聞いて何だそれ、という方も多いと思いますが、パソコンの成長期にマウスが登場したころ、爆発的に売れた商品です。
第7回の RoboOne は、1/20-2/20 が参加申し込み期間、3/13-20 が大会となったみたいですね。
(2004年12月29日)
モーション作成用のソフトを改良してみました。 R2N シリーズの最後(2004年1月11日)で紹介したものからのバージョンアップです。
ServoSequencerWindow 部分に Capture ボタンの新設です。 このボタンは、KO-RedVersion
の角度読み取りをしたデータを読み込み、画面のように、Excel シートにその値を取り込んでいくものです。 もちろん、それに合わせて、ロボット制御基板側のソフトも改良しました。
![]() |
(2004年12月30日)
新年の挨拶を。 あけましておめでとうございます。 本年も、ロボット共々よろしくお願い致します。
目標 : RoboOne大会に出場するぞ! あとは・・・ ・歩行(特に高速)のマスター ・プリント基板作り 番外編 ・家族が元気で過ごせるように |
森永さんの Metaric Fighter と同じように、電源を入れなくても立てる省エネモードを! 名づけて「エコモード」を搭載!?
ローハイトサーボホーンですと、KO純正のフリクションスペーサーが使えるのですが、従来のアルミサーボホーンを使ってるので、アイデア勝負のフリクションスペーサを取り付けてみました。 コルク製のものと、発泡スチロール製のものとを用意して、モーション作りや長時間動かしてみて良さそうな方を採用してみようと思います。 どちらも、100円ショップで手に入るものでとっても安価ですが、肝心の性能は?
(2005年元旦)
RoboOneとは別にモータ制御ということで MOSFET を使ったオリジナルモータドライバを作ってみようということで、「趣味の中の挑戦記」ページを作ってちょこちょこ書いてみようと思います。 こちらの方もアドバイス頂けると助かります。
(2005年1月2日)
PICでも C compiler が free で使える環境を手に入れられるんですね。 いきなりですが、オリジナルサーボドライバの CPU 候補に PIC を追加しました。 くわしくは、こちらをどうぞ。
(2005年1月4日)
秋月電子通商で PIC12F675 の後継機? PIC12F683 が発売されてますね。 う〜ん。 オリジナルサーボドライバの CPU 候補がまた1つ増えました。 仕様的には675 のメモリが倍増してる点以外は変わらないのかな??
(2005年1月6日)
(ちょっと(かなり)余談) ちょこっとずつでも更新しないと、サイトが廃れていくので、 がんばって更新してみたりしてます(このメモはその程度です)。 余談その1 毎年思うのですが、どうして大学センター試験(私のころは共通1次試験)は、 毎年雪がどかっと降る日になってしまうんでしょうね。 今年も大変なことになるという天気予報。 ともあれ、大学センター試験を受けられる方、 がんばってください。 (という私は、受けたのですが、使わない大学へ進学しました) (つまり、コテンパンにやられて点数が低かったということです) 余談その2 ロボツク!のまつしろさんのところにも書かせていただきましたが、 趣味は趣味。 遊びは遊び。 仕事が忙しいと、ほんとうに趣味っていいな、って思いますよね。 私事ですが、1月に入って更に仕事が激務になってきました。 週1往復の出張で北国に行っていたのですが、週後半に、 九州往復出張が入りました。 けど、そこで、飛行機の中でプログラムを書きロボットに仮想的に 触れる、というのを始めたところ、意外と良い気分転換になる、 ということに気が付きました。 飲み物も欲しいときに持ってきてもらえますしね。 (添乗員の方は仕事大変ですね、と気を使っていただいてるみたいですが) ということで、私は生きてますので、そのうち何かアップデートできれば、 更新をしたいと思います。 |
(2005年1月15日)
ロボットの方ですが、西さんに HSWR 用の歩行スクリプトをいただいていたのですが、これを自作機にチューニングして歩行パターンを作成。 補正など色々と行い、ようやく歩行! ポイントは、腰の高さ補正(h)でした。 私のロボットの場合、制御基板、バッテリーを胴体内に入れたため、全体的に重心が高めになっていたのですね。 デフォルトの値では、足上げや重心移動不十分で足がオロオロしてました。
安定歩行にもっていくまで、もうちょっとチューニングした方がいいのでしょうけど、4,5歩はコケないで歩けるところまではできたので、あとは、何度もトライして安定化というところでしょうか。。。
(すみません。 動画を公開する術(すべ)がないので、言葉だけで。。。)
(2005年1月16日)
最近、歩行に専念していたので、プロポ受信機とかジャイロの読み取りとか気にしてませんでした。
で、いざ、読み取ろうとしたら、なぜか、読めない(PWM値として0が帰ってくる)。 おかしい。。。
CMT0 の増加分をIRQ割り込みで検出しているのですが、どうやら、CMT0 のカウントが増えていないみたい。
マニュアルみても、見つからないのですが、CMT0 って割り込みレベルを低くしないとだめなのかな? とりあえず1にセットしたら、ちゃんと動きました。
ジャイロを入れての歩行だとかなり安定してるという紹介があちこちであるので、次の休み(2週間後)にはやってみようと思います。
(ほんとうは今日やりたかったのですが、このCMT0 がわらかず時間だけが過ぎてしまいました)。
(2005年1月23日)
また、この季節がやってきました。 RoboOne申し込み受付期間。 受付締め切りギリギリまで悩み続けそうです。
ロボットはといいますと、モーションを作っていて弱い部分が見えてきましたので、再度アルミの加工をしたりして試している、というところです。 また、RCサーボのケーブルも延長ケーブルを使うのではなく、RCサーボの基板から交換してみようか?と思い始めました。 というのも、かさ張ってしまうことで引っ掛かりがあったり、収納がしづらい、微妙に長さが足りない、などです。 やはり、ここまできたら、徹底的に納得いくまでチューニングしたい。
吉村さんのズゴックみたいな曲線美は作れませんので、90度曲げの綺麗さ?を出しつつ仕上げてみました。
安定感を感じます) |
※ 「趣味の中の挑戦記」ページ の方も更新しました。
(2005年2月6日)
(Webサーバがここ数日とまってしまっていて申し訳ございません)
久しぶりの3連休。 まず、やることを整理してみよう。
(2005年2月11日)
(未だkasiwa.dyndns.org がストップ中につき、一時的に引越しです。 本家は http://kasiwa.dyndns.org/~n-okada/ です)
いやぁ、ひさしぶりにインフルエンザ(B型)にかかってしまいました。 丸々3日寝て過ごしてました。
長期出張&寝込みで完全にロボットから離れてしまってます。
とはいえ、先週の目標は少しずつでも完成へと。。。行きたかったのですが、(1)でハマッテしまって2回も作り直すことになってしまいました。 実は2回目も5mm寸法を間違えているのですが、時間がないので、強引に進めています。
今のところできたのは、(1)、(2)、(3;足だけ) ですが、明日1日あるので、腕の完成と(4)、(5)でジャイロの動作確認まではがんばっておきたいです。
今日は病み上がりということで、進捗と決意表明まで。
(2005年2月19日)
第7回 ROBO-ONE大会申し込み締切日。 ようやく申し込み書類が完成し、送付できました(エントリ番号0110番)。 が、完成するのか?がいつもの問題。 いつも最後まで趣味だから、ということで欲張って色々と手をつけてしまうからでしょうね。 ははは。 今回は、とにかくオートデモが完成したら予選会は出れるのだからがんばろう(出張が入らないように、入らないように。。。ただただ祈るだけ)。
そろそろ、ロボットにも名前をつけようと思って、いろいろと考えてました。
そこで、つけた名前が、「256(ジゴローと読む)」です。
意味は3つ(3つ目は冗談です。関係者の方、気を悪くされましたら、ごめんなさい!)。
強そうな名前を探しているときに、「柔能く豪を制す」という言葉を思い出しました。 小さめで軽いロボットでも、技を決めれば勝てる!といきたいところです。 まずは、予選出場。 突破。 胸を借りれるところまでいければ、大満足です。
(2005年2月20日)
気がつけば、どんどん大会日程に近づいてます。
思うように開発スピードが上がりません。 思い切って今日は散歩して仕事もロボットも休憩してみることにします。
補足:友達のWebサーバがまだ治りませんので、当面ここ fiberbit.net にて更新を続けます。。。
(2005年2月26日)
あちゃぁ。。。
どうした? ケーブルが刺さらないぞ??
と思ったら、端子が違う! せっかくサーボケーブル延長してスマートな結線ができると思ったのに。。。
やっぱり、純正のこれを買って付ければよかった、と時間を戻すわけにはいかないので、端子の先っちょを切って接続。 OK!!
参考までに、間違ってつけてしまったのは、これの2550信号伝達コネクタ。 皆さんも気をつけてください。
あちゃぁ。。。 第2弾
KRS-2346ICS-RedVersion の1つの挙動がおかしい。
PWM をオシロでチェックしても、他のものに付け替えても、問題なし。
九十九ロボット王国の半期決算セールは、2/28まで!!! 遅かった!!!!!
どうしよう。。。
肩のところのサーボは、壊れやすい、というので、昔の PS-2174FET改を急遽使うことにしようかなぁ。。。
あちゃぁ。。。第3弾。
PG03のジャイロを使ってるんですが、どうも、入力してるPWM周期が徐々にずれてきてしまう。
これって、どうして?? もしかして、入力している基本PWMがずれてるの???
今更回路修正は大変。 とすると・・・
考えられるのは、2つ。
1 ソフトウェアでオフセットをキャンセルするテクニックをみつける。
2 やっぱり、あきらめて回路を修正。 今手早くできそうなのは、開いている7047FのTIOC端子をつなぐ。
けど、2を選んで、実際にはPG03内部の問題だったら。。。 う〜ん。 情報求む!!
あちゃぁ。。。第4弾。
今日は、いろいろと不具合が見つかる日。
ROBO-ONE大会前日、北国に日帰り出張決定。
仕事も大変だけど、最近飛行機が飛ばないことが多いので、もしかして、金曜日の帰りの便も飛ばなくて、帰れないという事態になったら。。。
あわてても、あと休みは2日。 どう有効に、かつ的確に仕上げていくか? 次の土日は気合いを入れて実行に移してみようと思います。
(番外編 25:10)
う〜ん。 なるほど。 gyro ですが、導入方法がなんとなく見えてきました。
左右の揺れに対して補正をかけてみたのですが、結構な角度からロボットを倒しても、ピタっととまりますね。
今回の場合、左右の太もも部分のサーボをgyroの加減算を左右で逆符号にて適用してみました。
すると、ガタガタ揺れることなく、1,2,3って感じでしっかりと立ってくれます。
もう少し補正がうまくできるようになったら、具体的に公開したいと思います(というか大会まではチューニングあるのみ!かな??)
(2005年3月6日)
大会前の最後の休日が終わろうとしています。
悪夢はこうしてやってきました。。。
13:00 そろそろお昼ごはんでも食べよう、と思い、最後のウォーキング。
ん? 連続歩行ができないぞ。 「ピシッ!」 いやな音がしました。。。
14:00 先ほどの音が気になり、オシロスコープで波形チェック。。。 出ていない。。。PWMがぁ。。。
まずいと思い、解体を開始。 センサなど全てはずして、CPUボード上の端子で波形チェック。。。 出ていない。。。 最悪です。
17:00 テストボード完成。 CPLDなど全てを取り去って、CPUボードの動作チェック。 でも、波形が出てない。。。
しかたない。 以前のバージョンで使っていた、CPUボードで試すか。。。(といっても、端子がまったく違うので(オスメスの差)で、全て付け替えを実施。
18:00 テストボードに古いCPUボードを指して、まずは、波形チェック。 出ていない。。。 あれ? もしや。。。 オシロスコープのケーブルを変えてみる。 あ、ちゃんと波形でてる。 とすると、、、壊れたと思ったCPUボードもちゃんとでてる。。。ケーブルかぁ。。。
20:00 改めてくみ上げるが、ワールドレコーズが開始。 見ねば(といっても、ミネバ・ザビではない)。
とこんな感じで、1日が過ぎようとしています。 これでは、大会に出れない!!
こんなメモを書きながら、ソフト仕様を固めてます。 ソフトウェア開発の専門家ではないので、ぐちゃぐちゃです。 素人だからこそ、ちゃんと書き残さないと。。。と思いメモを取りながらやることを1つずつこなして行くことにしてます。
やること一覧 @ RCプロポ入力値を調べる ・ 16回分の加算値をRCプロポ値の tmp_rcpropo[4][n] に入れ、cnt_rcpropo[4]を総和を入れる。 → 以下の結果は、cnt_rcpropo[4] の1/32値である。 ・ RCP0 は RCP1,2,3 に比べて ±24(0x18) 分上下幅が小さくなっている ・ RCP1 は 36(0x24) のオフセットがマイナス側に乗っている -60(0xC4) < RCP0 < +60(0x3B) 右スティック 上下(上−/下+) -119(0x89) < RCP1 < +47(0x2F) 左スティック 左右(左−/右+) -80(0xB0) < RCP2 < +80(0x50) 右スティック 左右(左−/右+) -80(0xB0) < RCP3 < +80(0x50) 左スティック 上下(上−/下+) ★ 動作中にRCプロポの電源が切れるとオフセットが乗る! ★ A DIPSW部をADC入力とする ・ _adc_dipsw1-3 として読み込み可能。 DIPSWx = ON => _adc_dipswx = 0x0000 DIPSWx = OFF => _adc_dipswx = 0x03FF ⇒ DIPSWx の ON/OFF 判定は、 0x200 以下(=ON)/以上(=OFF)で判断とする ・ 従来互換性を保つため、 #define _port_dipswx (_adc_dipswx < 0x0200 ? 0 : 1) とする。 ・ マニュアルにあったが、ADC 入力中も (PF.DR.BIT.Byy) の値を読めるとあるが、 0 の場合、かなりの確率で1に変化する現象があり、使えない。 A’CPU用バッテリーもバランシングセンサー値がADCで読み取れる ★ まだバッテリーをつけての動作を行っていないため、BS値がどういう相関を示すか不明。 ☆ 5.0V = 0x03FF から線形フィッティングでOKかな?? BSの限界は2.8Vなので、誤差含め、判定は 3.0V とする。 → 3.0[V] / 5.0[V] * 1024(=0x0400) = 614(.4) ★ とりあえず、上記机上計算をもとにしてプログラミングは実施する ★ 確認要 ★ #define _port_bs_CPU (_adc_bs_CPU > 614 ? 1 : 0) // ready状態 = 1, 強制シャットダウン = 0 #define _port_bs_SERVO (_adc_bs_SERVO > 614 ? 1 : 0) // ready状態 = 1, パワーリダクション要求 = 0 B EEPROM環境整備 B’EEPROMにデータを書き込む(PC) ・ 昔作った EPW1 ディレクトリの vcioscm.dsw (MSC++PjWorkSpace) の動作確認OK。 ・ .csv ファイルを読み込みページに書き込むこと ・ AT24C1024 EEPROM の仕様 MaxPage = 512, 256 [byte/page] (max 128 [kbyte]) ・ 4 [page] = 1024 [byte] = 1 [k-byte] ・ 512 [page] / 4 [page/1k-byte] = 128 [k-byte] ・ ページを以下のとおり割り振る ・ Page = 0-351 (88k-byte) ... SERVO DATA (2048motion) ・ Page = 352-509 (40k-byte) ... MOTION SEQ. DATA (10112) ・ Page = 510-511 (512byte) ... check-sum data ★ ←追加 B”EEPROMデータの読み込み ・ PCの short 保管と SH2 の short 保管が違う点を SH2 の読み取り後 swap させ対応。 ・ 最終ページのチェックサムは自己加算されているので注意。 → 自分自身は足さないで保存&読み取り確認(何故か*2の値となっている)。 C EEPROMデータによるモーション再生 ・ ServoCon() の改造実施。 ・ 手始めに seq < 0 となるところまでのデータを連続再生できるようにした。 C’指定モーションの再生 (@+C) ・ EEPROMフォーマットに不足があることに、ここで気がつく。 見直し。 ・ ページを以下のとおり割り振り直す ・ Page = 0-351 (88k-byte) ... SERVO DATA (2048motion) ・ Page = 352-505 (39k-byte) ... MOTION SEQ. DATA (10112) ・ Page = 506-509 (1k-byte) ... 外部指令ID登録(2byte/ID) ★ ←追加 ・ Page = 510-511 (512byte) ... check-sum data △ 追加した「外部指令ID登録」は、 ・ ジョイスティックの倒し方にIDを割り振る ・ そのIDが、MOTION SEQ. の何番目からスタートするかを決める ・ ID登録の最上位ビットをジャイロON/OFFとする。 最上位ビット1 ・・・ ジャイロON 最上位ビット0 ・・・ ジャイロOFF ・ 歩行の考え方をまとめる ・ 外部指令が中立状態から、指示出しありとなったところから・・・ ・脚曲げ ・片足前出し&重心移動 ・逆脚前出し&重心移動 ・逆脚前出し&重心移動 ・・・ ・外部指令確認(他のコマンドに戻っていないか?)を上記モーション変更時に確認し 変更が生じた場合、右足前、左足前の状態に合わせて・・・ ・両足揃え ・脚伸ばし とする。 D パワーリダクションモード作成 D’RCプロポの右スティックを左上にすることで、パワーリダクションモードとする(D+@) D”バッテリーのバランシングセンサー値を読み込み、一定値以下の場合、パワーリダクションモードとする(D+A’) E g加速度センサの読み取り E’完全に倒れた状態と認識したら、その状態保持時間1秒以上で、自動起き上がり実施。 ・自動起き上がりモーションIDは、ジャイロOFF指示(まずはそうしてみる) I 参加資格審査モーション生成 J 予選モーション生成(2分間) K 本選に出れたら次は考える。 |
(2005年3月13日)
帰ってきました。
Webサーバが復活しました。 結構、サーバの復活が大変だったみたいです。 お疲れ様でした。 > 管理者(sige)さん
(2005年3月18日)
何かがおかしい。
がんばってみたものの、規定演技ができそうにありません。
が、ROBO-ONE 当日になりました(ただ今、午前7時)。 徹夜しましたが、モーション間に合わず。
また、スイッチON後5秒後に立ち上がる機構も、何故か、動かなくなってしまった。。。最悪です。
会場につくまでにデバッグできれば。。。
(当然、予選通過などありえません)
(2005年3月19日)
私の ROBO-ONE 参戦記
結果すら残すことができませんでした。
参加資格のうち、起き上がりだけが間に合わず、そのまま現地へ。
控え室では、雑誌やDVDの中で見たことのある方をはじめ、いつも Web でお世話になっている
SISO さん、なかぷさん、(おそらく)宮田さんたちを目に緊張が高まりました。 SISO
さんは、とても親切にいろいろと教えていただき、ありがとうございました。 やっぱり、ROBO-ONE
は参加してこそ、ですね。 体感できて、とても楽しかったです。 ただ、前日からの徹夜が響き、懇親会に参加できず、かなり残念です。 今度は、ちゃんと体調を整えて望みたいものです。
1人反省会。
楽しかったという気持ちだけでは、前進はしないと思いますので、ここで、反省会。
何故、予選通過すらしなかったか??
ロボットの出来は、以下の点を除き、目標どおりに出来ていました。
欠点1 : サーボが1つ焼けた(直前まで気がつかなかった)
欠点2 : 最後に書き込んだプログラムが何故かCMT0がカウントアップしなかった
完成度としては、ジャイロセンサ、加速度センサ、光度センサ(CDS)などを搭載し、安定歩行を実現していたのに、何が・・・。
答えは簡単。
「 モーション作成をナメテかかっていた 」
です。 経験値低いわけだから、モーション作成こそ時間をかけて行わないといけないのに、ハードウェハ、ソフトウェアを懲りすぎて、ROBO-ONE
の見せる戦いに対して何ら準備が出来ていなかったこと。 特に、最後までできなかった、起き上がりモーション。 予選審査にこれがなければ・・・ではなく、こういったこともできなかった時間配分にミスがあると思いました。
あと、実際に参加してみて、参加するにあたってあれば便利かな?って思ったのは、以下の点。 次の戦いのためにメモを残しておきます。 次回でてみたいなって思う方、同じ経験をするかもしれませんので、参考にしてください。
・ モーション作成用の EEPROM は余分に用意しておく。(一応の完成形は残す)
・ EEPROM-writer をロボット本体で行わない場合、持参のPCでできるようにしておく(当たり前のようで忘れてしまっていた)
・ 予備のサーボは安売りの時に買っておき、大会当日も持参をする(1個買ったのに、持参忘れ)
・ ロボット入れのケースは充電器や予備の備品を入れるスペースのあるものを準備する。
SISO さんからの伝授されたことは、
・ 大会の控え室では、モーションを作らない&動かさない。
です。
どうしても。。。という場合でも確認なら、机の上ではなく、事務局の方が用意してくださった板の上でやることがよさそうです(予選通過審査のときにつかった板を控え室のコーナーにおいていただいていました)。
ともあれ、ROBO-ONE 第7回は終わりました。
次に向けて、256(ジゴロー)くんは完成度を上げていきたいと思います。
|
(2005年3月21日)