HRF−A05 Part3
本体
|
材質 | アルミ(A5052)、ABS、POM |
メイン制御基板 | KONDO KCB-1 | |
関節数 | 24 | |
使用モーター | KRS−4014HV | |
第14回ROBO−ONEも終わり、今回もノーエントリーでまたまた結果を出せませんでした。
ということで、Part4に移行します。
サンハヤトのMB-R8C29を試してみました。
この前まで試していたR8C/29は、秋月でチップを購入したものでしたが、その後、サンハヤトからこの様な基板が発売されているのに気づき購入してみました。
20ピンのDIPサイズになっていて、発振子やLEDが付いています。で、発振子が付いているので、シリアルでのプログラム書き込みも可能です。
今、実験用に基板を作っています。シリアル書き込みも試したかったので、秋月のFT232RLが載ったUSBーシリアル変換モジュールも付けています。
E8aを使っての接続もOKで、USBーシリアル変換モジュール経由でのプロラム書き込みをOKでした。KCB-1のプロラム書き込みに使っているFlashStaで書き込みが出来ます。
起動モーション切替用プログラム完成?
ここのところ、tom-iのT-Stormで使用するための起動モーション切替用プログラムを書いていました。
最近のROBO−ONEでは、スロープ通過後、予選と言う具合になるので、その場でモーションを切り替えられなくてはなりません。
そこで、T-StormはRCB-3を使用しているので、KCB-1を高速シリアルで接続し、KCB-1のPIOの0〜3にスイッチを付け、電源投入時、スタートアップモーション再生後、予めスイッチの値に対応するモーション登録しておき、これを再生するというプログラムです。
KCB-1とRCB-3を接続する場合、RCB-3の設定でモーション再生終了を通知するように設定します。
基本的には、SDKのrcb3.hに定義されているrcb3_motion_playを使用します。
ただシナリオ再生の場合、シナリオに登録されているモーション再生毎に通知が帰ってくるのですが、rcb3_motion_playではこれに対応していません。そこで、rcb3sub.hというファイルを作成して、ここにrcb3_scenario_playとrcb3_get_motion_countという関数を作りました。
で、実際のプログラムは、t_storm_14th_v2.cです。
最初の方で、スタートアップモーションとスイッチの値に対応するモーションを設定する様にしています。
スイッチの値は、0〜15ですが、0はスタートアップモーション再生後何もしません。その他は、スタートアップモーション再生後に登録したモーションを再生します。
今回は、ファイルを添付します。
AD変換、動きました。
うまく動かなかった理由は、Vref端子の処理とSFRの一部設定間違えがあったためでした。
今現状は、コントローラの左右に配置するボタンとADのテスト用に付けたスライドボリュームを接続した状態です。スライドボリュームは、手元にあっただけでこれをコントローラに使うわけではありません。液晶の表示は、ボタンが押されたところがリバース表示するとか、AD入力をチャンネル毎に表示するプログラムを作って試しています。
現状、シリアルポートの2チャンネル目は試していませんがどうにかなりそうなので、これで使用予定のI/Oの動作確認が出来ました。今後は、具体的にどのように構成するか考えて、作ることになります。
Peripheral Driver Generatorを使ってみる。
これルネサスのソフトで、マイコン内蔵周辺I/Oプログラム自動生成ツールです。
試しに、グラフィック液晶のCPU基板のI/Oを定義してHEWに登録してみました。
なんじゃ、こりゃ・・・。かなりの量のヘッダファイルとCソースファイルが出てきました。1端子に対して、createのソース、enableのソース、Getソースなどなど沢山出てきました。ビルドしてdebugフォルダのファイル数を見ると200本越えてしまう。
このマイコン内蔵周辺I/Oプログラム自動生成ツールを使うにはちょっと慣れが必要かな。I/Oの少ないR8C/29で試してみようと思います。
リセットとモード端子周りに、ちょろっと部品を接続。ついでに、ディップスイッチもIOピンに接続。
簡単なテスト用プログラムを書いて、CPUに書き込んでみて動作確認。大丈夫ようです。
これで、KCB−1とグラフィック液晶CPU基板と感圧センサー入力用CPU基板のプログラムが同じ開発環境で作れるようになりました。
後は、ごりごりプログラミング。(ここが問題・・・)
グラフィック液晶のCPU基板をいろいろと試していますが、実は、もう1つ試そうとしています。
ルネサスのR8C/29のフラットパッケージのもの。
と言うのも、開発環境をHEWで統一できることと、CPUの使い方も類似しているということ。
これ使って何するかと言うと、足裏の感圧センサーの信号処理用です。以前考えていたのは、PIC16F88でしたが上記理由から変更しようと思っています。
で、このR8C/29でテストするためにピッチ変換基板を探してみたら、ダイセンの変換基板で写真のような基板を見つけました。秋葉原のマルツにて購入しました。これ優れもので、表と裏でICのピッチが違うものになっています。今回は、0.65ピッチを使用します。
とりあえず、チップの半田付けまで終了。リセット端子部分に抵抗2本とダイオード1本取り付けてE8aとの接続環境を作って試して見ようと思います。
シリアルサンプルプログラム、動作しました。
ルネサスのサンプルプログラムを使用して、シリアル部分の動作確認をして、データの送受信が出来ることが確認できました。
今まで作っていた、グラフィック液晶やスイッチ、LEDを動かしているプログラムに組み込もうと思います。このままいけるかは、SFRの設定を確認しないといけません。
今使っているR8では、シリアルは3チャンネルあるのですが、基板の設計上、シリアル1チャンネル分の端子はグラフィック液晶の信号に使用しているので、使えるシリアルは2チャンネルになります。なので、もう1チャンネルも作らなければ・・・
相変わらずAD部分の動作がうまくない。で、ルネサスのサンプルプログラムそのままで動かしてみても同じ状況。入力の入れ方が悪いのだろうか?、それとも問題なく動いていて確認方法が悪いのか、まあ、もう少し格闘ですね。
AD変換がうまくいかない。
SFRの設定が悪いのか、手順を間違えているのか・・・
もう少し格闘することになりそうです。平行して、シリアルポート部分もテストしてみよう。
このR8のCPU基板の使い道ですが、今考えているのはロボットのコントローラです。なので、最低限、ボタン(スイッチ)の入力とジョイスティックなどのアナログ入力、無線とかPCと接続するためのシリアルポートの動作が出来ないといけません。
プログラムの作成では、ルネサスのサンプルプログラムを参考にしています。R8C/Tinyのシリーズではグループがいろいろあり、今使っているCPUはグループ2Bです。
で、ルネサスのサンプルプログラムでは他のグループのもので書かれているので、今使っているグループ2B用に修正しながらプログラムしているのですが、微妙にSFRが違ったりと、ちょっと手こずっているのが現状です。
カタカナデータもプログラムしてみました。
このグラフィック液晶は、液晶の左半分と右半分とで制御チップが分かれているようなので、左右にまたがるように表示をしてみました。
その後、左側にスイッチのON/OFFの状態表示をさせています。プログラム自体は、もう少し見やすく書き直す必要ありですが基本的にはこれで良さそうです。
動画がうまく貼り付かないな・・・。ブログにはうまく貼り付いたので、そちらを見てください。 → 何とか貼り付けられました。
キャラクタデータ、ほぼ完了。
R8のCPU基板に使用しているグラフィック液晶には、キャラジェネが載っていないので、ちまちまとキャラクタデータを作っていました。結構時間がかかりますね。
普通使う分のデータはほぼ作成できました。カタカナのデータも取ったのですが、まだプログラムしていません。
グラフィック液晶が何とか動きました。
このグラフィック液晶は、制御側のCPUとは非同期に1KHz〜3KHzのクロック入力が必要です。
で、今回使用しているR8のCPU基板では、タイマRAの出力がグラフィック液晶のクロックに接続されています。
タイマRAをタイマーモードで約2KHzで動作させましたが、なかなか動かず、色々と調べてみたら、SFRの設定が間違えていました。
次に、グラフィック液晶の制御プログラムですが、キャラクタ液晶と扱いが違うのでちょっと手こずりましたが、何とか文字表示できました。キャラジェネは入っていないので、プログラムにべたにフォントデータを打ち込んで表示させています。もう少しきれいなプログラムに書き直すとして、まあどうにかなるでしょう。
次は、シリアルポートかA/D変換かどちらかかな。
R8のCPU基板、ちょっとだけ進展。
以前、R8のCPU基板GETとと言うことで書きましたが、その後、ルネサスのE8aを購入してプログラミングしようとしていたのですが、デバッガーを使うのが初めてでどうやって良いのかちんぷんかんぷん状態でした。
で、ちょっとだけ進展しました。
E8aとCPU基板を接続。CPU基板にスイッチとLEDを接続。
このCPU基板を動作させるので、どうやってプログラムしたら良いのか調べていたのが、CPUクロック部分。なぜかと言うと、この基板、セラロックとつけるパターンはあるのですが未搭載。そのため、CPU内臓の高速オシレータを使用するためにはどうするかということ。
思ったように動いているのかは、これから調べることにして、とりあえずは動いたようです。
簡単ですが、スイッチの状態をLEDに出力するだけです。
今後は、グラフィック液晶部分を動作させること。このグラフィック液晶はキャラジェネが入っていないので文字表示も作りこまなくてはいけないのでちょっと時間がかかりそう・・・
古い本が見つかりました。
「むかしむかしあるところに・・・」ではなくて、昔、NHKの番組で「ロボットと人間」と言う番組が放送され、これに連動したテキストと言うところでしょうか。
写真のように、1987年の10月から12月にかけて放送されたものです。確か、ビデオにとっていたような気がするので、見つかったらデジタルに落としなおそうかな。
で、この中は、1985年に行われた筑波博覧会に出ていた早稲田大学のロボットのカラー写真などが最初に載っています。
3枚目の写真の左側は、WL-10RD(1984年)でまだケーブルでつながっていますが、写真右側のWHL-11(1985年)は、自立での歩行をしています。このWHL-11が筑波博覧会に出ていたロボットです。
前にロボット名について書いた(2007年5年4日)、「ゴーレム」ですが、このテキストで知った名前です。
このテキストの説明から、「ゴーレム」とはヘブライ語で「泥」のことで、紀元250年ごろのユダヤ教の人々が泥を使って小さな人造人間を作ったと言う伝説があり、この人造人間をこのヘブライ語からとって「ゴーレム」と呼ばれていたと言うことです。
で、このテキストには「メトロポリス」と言う映画に「マリア」と言う機械少女が出ていると言うことで写真が載っていましたが、この1987年当時からこの映画を見てみたいと思っていたのですが、ずっと長い間見つからずにいました。
昨年、YouTubeで部分的な動画が投稿されているのを見つけ調べてみると、復元版としてDVDが出ていることが分かり早速購入。
内容的には、ロボットがどうこうと言うことではなく、支配者が労働者を使って作り上げた未来の都市メトロポリスを舞台とした内容なのですが、見ていて目をはなすとわけが分からなくなります。と言うのも、無声映画なので・・・。
ただ、残念なことに、時代背景などから短縮版として再編集されたりで、現在オリジナルのフルバージョンでは残っていないと言うこと。この復元版では、今現存するフィルムをつなぎ合わせ、また、動画が存在しない部分は文字で説明されています。
ちなみに、この「メトロポリス」は1926年完成の映画です。
実は、前にKCB−1のEEROM関連での無償修理から戻ってきてすぐに、もう1つのKCB−1を壊してしまい修理に出していました。
で、約1ヶ月位かかりましたが、先週の金曜日にROBOSPOTに取りに行ってきました。
きっと、私の不注意でCPU壊したのかなと思っているのですが、無償修理になっていました。社長のニコニコした顔が目に浮かぶ・・・。
ありがたいです。
久々の秋葉原だったので色々とパーツを調達しました。前に書いたCPUボードを動かすためにルネサスのE8aをゲット。
このようなエミュレータは使ったことがないので、ちんぷんかんぷん。まだなんだかよく分かっていません。もう少し格闘しよう・・・。
CPU基板ゲットしました。
といっても、これ、他の用途での使用と汎用的に使えるものとして開発中のもので(私が開発している物ではありません)、先行して1枚分けてもらいました。
CPUは、ルネサスのR8です。汎用的に使用できるように、秋月のグラフィック液晶が付けられるようになっています。
開発環境は、KCB−1と同じHEWを使用できるのですが、プログラムのダウンロードは今のところルネサスのE8aが必要なようです。
E8aはまだ持っていないので、プログラムはまだ作っていません。
私の場合、これをロボットのコントローラに使用してみようかと思っています。グラフィック液晶が出来るので、現地でPCなしで簡単なモーション修正もできるようにするとか、応用は色々出来ると思います。
この基板、まだ発売していないので、興味のある方は、メールか掲示板でご連絡ください。
RS232C側から送られてくるコマンドで、色々と動作できるように少しずつプログラムしているのですが、ちょっと実験的に動作させてみると、思った動きにならない。もう少し、組み込み方を考えないとまともになりません。今、試している部分が出来れば、他のコマンドも同様な組み込み方でいけるかなと思っています。
最近、Eagleを使っていて、部品ライブラリ作るのが面倒になり、新しいライブラリがないかHPを確認したら、Eagleがバージョン5.1.0に上がっていました。
http://www.cadsoft.de/version50.htm
Win用とLinux用とMAC用がありますね。
さらっと使ってみて、前より良くなっている。まだ細かいところまで使っていませんが、なんだか良さそうです。A05の足裏の感圧センサーの信号を取り込むためのAD−ICS変換基板でも作ってみようと思っています。
先日、テスト用に書き込んだ足踏みモーションデータで動作させるプログラムを作ると書きましたが、もう少し簡単なデータを使い、試しながらプログラムを書いています。
テスト用に書き込んだ足踏みモーションデータでは、レジスタに値をセットして、受信機からの値とを比較し、ボタンが押されていれば足踏みを継続、そうでなければホームポジションに戻って終了するようになっています。で、この受信機からの処理がまだどのようにするか考え中なので、この処理系を作る前に起動時のデータを使うことにしました。
私の使っている起動モーションは、RCB−3のマニュアルにあるものと変わらず、起動直後はサーボをフリーにし、次に現在のサーボ位置の取得、その後ホームポジションにゆっくり移動すると言うものです。
HTHでコンパイルしたデータを見ると、上記で説明した順番で生成されています。このデータをEEPROMに書き込み、これを使って動作させてみました。プログラムは、動作パラメータから、何をするかを判断しその動作をさせることになります。
次に、右移動用のモーションもEEPROMに書いてみました。これは、ループカウンタに値をセットし、一歩動作する毎にカウンタをデクリメントし、0になったかを判定し、0だったら終了、そうでなければ右移動を継続するようになっています。これは、カウント用に変数を1つ用意して処理しました。
まだ、全体のプログラムとして「どのように実装するか」のテストとして部分的なプログラムを作って試しています。
今のところ、動作パラメータを判断して分岐する部分と実際の処理をプログラムして試しての繰り返しになっています。動作パラメータは、まだ沢山あるのでまだ先は長そうです。
KCB-1のEEPROMでデータを読み書きできるプログラムを作っているのですが、悪戦苦闘です。
KCB-1のSDKに入っているサンプルプログラムは問題ないのですが、モーションとして保持させるようにストラクチャを作ってテストデータで読み書きさせてうまくいったかなと思ったら、途中のデータがおかしくなっている。何でだろう・・・。
調べてみると、128バイト目からおかしくなっっている。EEPROMは初めて使ったのですが、これがページとか言うことなんですか?
1オブジェクトデータのサイズが、スピード:1バイト、位置データ:2バイトX24サーボ分で48バイトの合計49バイトとしてEEPROMに9オブジェクト分書き込んでいました。ちょうど3つ目のオブジェクトデータでページをまたぐので、ここでおかしくなっていました。
メモリ効率は悪いですが、テストと言うことで、実際の書き込みは64バイト単位で書き込んでみるとOKでした。この辺は、EEPROMの一般的な使用方法だと思うので調べてみようと思います。
今、テストで使用しているデータは、以前RCB-3で作成した足踏みのモーションを、HTHでコンパイルをしてLISTのタブに出力されたコードを手作業でプログラムに書き込んでいます。HTHのLISTタブはコピーペーストできないんですよね。
このEEPROM部分のプログラムが出来れば、テスト用に書き込んだ足踏みモーションデータで、A05を動かすためのプログラムを作ろうと考えています。
ここのところ、沈黙でHPのアップもしてませんでしたが、A05の上半身の組み立て、下半身との合体と作業していました。
上半身の回転軸用サーボの取り付け板を作成していなかったので、久々にCNCで作ろうとしたところ、電源が入らない。どうも、電源ユニットが故障しているようです。仕方がないので、切り出し、穴あけは手作業で行いました。
KCB-1のプログラムも24サーボ用に修正し、以前RCB-3で使用していたホームポジションデータを使用して、立たせてみました。
肩とか手先とかは、まだたくらみがあるので今後変わっていくと思います。
HTHとRCB−3との通信の解析ですが、ユーザーが適当にプロットして接続してと作っているフローチャートから生成されるデータをRCB−3がどのように認識しているのか(どのように管理しているのか)が気になっていたので、RCB−3で動かしていた時の一番複雑なモーションを転送した時のデータを解析していました。かなり手こずりましたが、KCB-1のプログラム作成の参考になりました。
このモーションをRCB−3のM20に書き込んだ時にプロトコルアナライザーでモニターしたものを解析していたのですが、このデータは30オブジェクトを超えるため次のM21も使用しています。
で、この中の動作データとHTHの画面のフローとを照らし合わせて、何とか理解できました。
前にも書いたとおり、この動作データを送る前後で色々な通信をしています。値の確認とか設定、書き込むメモリーの確認とか色々・・・。
「何でここでこんなことするの???」なんていうところもあるのですが、モーション登録に関しての今現状調べたところまでを添付します。OpenOfficeの表計算で作成してPDFにエクスポートしたものです。
なお、個人的に解析したものなのでKONDOさんには問い合わせの無いようお願いします。また、ポジションデータとかレジスタにセットしている値などは、私がしようしているRCB−3とHTHで生成された値ですのでご了承ください。
これです → 20080608-M20-6.pdf
ストロベリーリナックスで購入したCMOSのカメラですが、電源用に表面実装タイプのレギュレータを探しているのですが、電圧が特殊なのでなかなか見つかりません。秋月のキットでLM350を使用したものがあったのでこれで代用しようか・・・
電源はどうにかすることにして、このカメラ、表面実装用でこのままだと扱いにくいので、この前からちまちまとEagleでピッチ変換基板を書いていました。カメラは、大きい方のTCM8240MDです。横26mm、縦19mmくらいのサイズです。
実際に基板を作るまでは、もう少し先になりそうです。
とりあえず、手作業でトリム位置を割り出して、プログラムにトリムの加算減算できるように配列を追加しました。まだ、仮ですが・・・
まだトリムの位置がずれていますが、両足で立てる状態になったので屈伸させてみました。今回は前回のようなADからのジャイロやジョイスティックの入力は無効にしています。また、プログラムの中のwaitの値はちょっと調整しています。
この感じだと、なんとか行けそうですね。ただ、ガクガク感があります。これ、何とかならないかな・・・。どうやったらよくなるのだろうか???
10日のONOの電脳壁新聞で、「公開されていなかったっけ?」とONOさんからのコメントあり。
ネット検索で、「RCB-3/RCB-3Jコマンドリファレンス」みっけ。開いてみて、「あっ!これ見たことある」。どうも記憶から飛んでいました。
ONOさん、ありがとうございます。
で、このコマンドリファレンスは、単コマンドの説明がされていますが、HTHからは1つの操作で複数のコマンドの送受信が行われています。
HTHとRCB−3間で使用されるコマンドの組み合わせを調べることになります。
で、試しに、KCB-1にバージョンを返すプログラムを入れてみてHTHからバージョン確認してみました。動作OKです。
無償修理に出していたKCB-1とファームウェアアップデートに出していたサーボが本日到着しました。早速、腰下だけ組み立てました。
サーボ12個なのですが、プログラムは16サーボに修正しています。両足での屈伸をさせてみましたが、どうにかうまくいきそうですね。
現状は初期ポジションが合っていません。プログラムは今のところ、トリム調整部分を作成していないので、これからデータ側でポジション修正しようと思います。それなりになったら、動画でもアップします。
HTHとRCB−3間のプロトコル解析ですが、なかなか手ごわいです。
と言うのも、「こんな感じかな」と考えていたことよりかなり複雑ですね。
基本的には、HTHから0Dhを送信し、0Dhを受信してからコマンドを送信しているようです。
HTHからは、コマンド+チェックサム、コマンド+データ+チェックサム。RCB−3からは、コマンドかデータ+チェックサム、ACK(06h)。
で、なにが手ごわいかと言うと、例えばトリム設定などはトリムのデータを受け取って、書き込めれば用は足りるのですが、これを行う前に何かデータのやり取りをしている。この部分が、現時点では何を送りあっているのか不明。
他のコマンドも同じく何かやり取りをしてからコマンドを送っているようです。また、反映結果を確認しているのか、最後の方でも何かやり取りしています。
ちょっと簡単なところで、RCB-1のバージョン確認コマンドを試してみました。VisualStudio2005のC#でPC側のプログラムを作って通信してみると、ちゃんとバージョンを返してきました。
まあ、簡単なところからちまちまと解析していきます。
ファームウェアアップデートに出したサーボ、早く帰ってこないかな・・・。と思いつつ、実験や解析など進めようとこんなもの作りました。
トラ技付録のRS232C変換基板のTTL側の端子に写真のような基板を作成。右側のヘッダピンは電源(5V)供給とKONDOのUSBシリアル互換の端子です。
「なぜこんなもの作ったの?」→今たくらんでいる解析は、HTHとRCB−3間のプロトコル解析です。なので、プロトコルアナライザーとつなぐために作りました。HTHから、バージョン確認した時とテーブル読み込み時のプロトコルアナライザーでのモニターはOKでした。
昨日に続き、KCB-1でTrevaの続編です。PC側のプログラム公開です。
必要最小限の機能にしてます。「Get」ボタンと画像表示部のみです。
「Get」ボタンを押すと小文字のaを送信しているだけです。その後、KCB-1から送られてきたデータをYUVからRGBに変換してPictureBoxに表示しています。
下のリストは、Form1.csを載せていますが、プロジェクトファイル一式も置いておきます。シリアルポートはCOM1にしていますが、環境に合わせて書き換えてください。
サーボのファームウェアアップデートですが、ちまちまと1個ずつ確認してやっと依頼してきました。24個戻ってきるまでは、A05の組み立てはお預け・・・・。その間に、実験や解析など進めようと思います。
いまさらながら、feelH用外付けカメラ Treva使ってみました。それも、KCB-1で・・・。
AFFぱ研、ようこそいしかわきょーすけのほーむぺーじへ!、トランジスタ技術2002年4月号、60日でできる! 二足歩行ロボット自作入門を参考にどうにか動作しました。
で、この端子とTrevaの間は、AFFぱ研およびトランジスタ技術2002年4月号の記事の回路を使用しています。KCB-1への接続ですが、デジタル入出力のpio0とpio1を使用しています。pio0がクロック信号、pio1がデータ信号としています。
プログラムですが、KCB-1側は、うまく出来たかわからない状態だったので、ターミナルソフトと通信テストしながら、13824バイト送信する事を確認して作っていました。データが問題ないかこの時点では不明のままです。KCB-1では、ターミナルソフトから小文字のaが送られてくると画像を取り込み送信するようにしています。画像の取り込みで、なかなかうまくいかなかったので、waitを適当に入れています。
PC側ソフトは、VisualStudio2005のC#で作成しています。参考にしたHPや書籍ではVBで書かれていたので、C#用への書き換えでちょっと手こずったので必要最小限の機能にしてます。「Get」ボタンと画像表示部のみです。
今回は、Treva→KCB-1→PCのようにKCB-1はカメラからPCへの中継となっています。KCB-1だけでロボットの制御をしながら画像処理はやっぱ無理かな?。思ったより画像転送が遅い感じ。KCB-1のプログラムでwaitのところのチューニング等で早くなるかな?。
とりあえずは、KCB-1側のプログラムを公開します。こうしたほうが良い等あれば、メールや掲示板でお願いします。
右足だけ組みあがっているので、屈伸動作をしてみました。
この足にジャイロセンサーを取り付けてみようかとも思ったのですが、屈伸中のフィードバックが見えにくいだろうと思い、ゲームパッドから取り外したジョイスティックを使い、手でくりくりと動かしてみました。
片足での屈伸は、荷重が少ないので結構暴れますね。全体が組みあがるとましになるでしょう。
今回は、ジャイロセンサーの代わりにジョイスティックを使用しましたが、実際にロボットに組み込むプログラムとしては、どのアナログチャンネルの値をどのサーボに割り当てるとか、フィードバックする量を設定するとか必要です。
はじめての動画アップなのですが、ちゃんと見えてますか?
昨日、KCB−1はEEPROMに関する不具合に伴う無償修理に出しました。戻ってくるまでの間、何も出来なくなるので1.0aになった物を新たに購入しました。
基板裏のEEPROMのところに部品が半田付けしてありました。
現状ですが、実は、サーボのファームウェアのアップデートはまだ出していないので、新型胴体に使っていたサーボを取り外して右足だけをシリアルのカスケード接続で組み立てて、動作できる状態です。
KCB-1のプログラムは、3サーボから5サーボに修正し、また、モーションのデータは、屈伸するように修正。
ちょっと、かくかくした感じですが動いています。サーボのスピードとサーボ指示の更新周期の関係ですかね。
昨日公開したプログラムのHPでの表示がおかしくなる(Cソースのタブがうまくいかない)現象ですが、どうも、私が使用しているAdobeのGoLiveのバージョン9では、うまくいかないようです。今現在も、使っていて、エディットしている画面と、実際にHP上に公開した時の表示が異なっていたりで使い勝手が悪いです。バージョンアップするか、他のソフトに乗り換えるか検討中ですが、バージョンアップも結構高いので、IBMのホームページビルダーにしようかな・・・
と言うわけで、本題です。
「RPU-10講座/第十三章 ジャイロセンサを使ってサーボへフィードバック」のプログラムをKONDOのKCB−1で動作するように修正した内容について説明します。とは言っても、そんなに修正したわけではなく、ほとんどはオリジナルのままです。
昨日にも書きましたが、「Flash ROM上のデータを使って」と言うところは実現できていません。これに関する修正とか実際にサーボを動作させる部分などなど、修正を以下に記載しました。
1.rs0_puts_Pをprintfに変更。
2.PROGMEMを削除。オリジナルでは52行目。
3.pgm_read_wordを使用している部分は、この関数を使用しないように変更。
4.SV_Angleをsio1_set_posに変更。
5.20msecループは、タイマーとwhileを使用せずwaitに変更。このため、オリジナルの138行目削除とプログラム最後のwhileのループをwaitに変更しています。
6.初期ポジションへの動作をする部分を追加。オリジナルでは、起動時には0のポジションに移動するのでしょうが、KRS-4014HVなどKONDOのサーボをシリアルで使用する場合、中点の値は7500、最小値が3500、最大値が11500となるのでKCB-1起動時にいきなり端まで回ろうとするので、ここでは、サーボの現在位置を取得してから中点の7500に動作するようにしています。
7.サーボトルクオンの部分を削除。オリジナルでは、157〜159行目のところです。KRS-4014HVなどではON、OFFではなくポジションで切り替えるので削除しました。
8.RS-232Cから1文字取得するrs0_getc()をcom_getchar()に変更。
9.RS-232Cの受信バッファをチェックする部分のrs0_rx_buff()のところをri_u1c1のフラグを参照するように変更。この部分をどのように変更しようかちょっと手こずったのですが、KCB-1のSDKでは受信バッファにデータがあるかチェックする関数が用意されていませんでした。通常、USARTでは受信バッファに受信データがあるかチェックするためのフラグがあり、ここをチェックしながら受信デーだを取り込むことになるので、ちょっと調べてみました。で、ヘッダファイルのsfr26.hの中に#define ri_u1c1 u1c1_addr.bit.b3 /* Recive complete flag */と言うのを発見。このフラグを参照するように変更しました。
10.ジャイロフィードバックの部分は、ジャイロ値の変化で動作していることを分かりやすくする為、大げさに動作するよう計算結果を使用せず、ジャイロの値を直接入れています。(オリジナルの計算式は、コメントアウト)
変更したのは、こんなところです。
応用としては、PCからのキー入力部分を、デジタルI/Oからのスイッチ入力にするとか、動作データを追加して色々な動きをさせるとか、色々と出来ると思います。
このままの使用だと、一連の動作はすぐ出来ると思いますが、ROBO−ONEの遠隔コントロールでとなると、動作データをどうするとか、コントローラーの処理をどうするかなど、いろいろとありますが、これをベースに拡張も出来るでしょう。
で、プログラムとは別ですが、今日、ストロベリーリナックスに注文していたCMOSカメラが到着しました。「小さい!」
でもこれは、2.8Vと1.5Vの電源が必要なので、部品が調達できるまでは使えません。
2008年5月19日 | ||||
なんだかんだで久々の更新になります。 以前移植中と書いたSISOさんとこの「RPU-10講座/第十三章 ジャイロセンサを使ってサーボへフィードバック」ですが、KCB−1で動くようになりました。 私自身、この様な制御プログラムは不慣れなため、勉強になりました。 SISOさんのオリジナルと比べると、どのように修正したかわかるように、基本的には、変数名やSISOさんのコメント、処理系もほとんどはそのままにしています。ただし、「Flash ROM上のデータを使って」と言うところは実現できていません。 SISOさんから、公開OKの許可を頂きました。SISOさんに感謝です。また、このプログラムについてSISOさんへの問い合わせすることの無いよう、お願いします。 独自の処理でロボットを動かしたいと言う人の入門編やヒントになるかと思います。 SISOさんの、該当するBLOGは→RPU-10講座/第十三章 ジャイロセンサを使ってサーボへフィードバック 比較すると、どのように修正したかわかると思います。修正についての細かい部分については、今後説明します。 また、修正のなかで、mainに// 初期ポジションと言うコメントがある部分で、KCB−1起動時に、サーボの現在位置を取得して、その位置からサーボの中点(7500)に移動させるようにしています。 実際の動作は、KCB−1とPC側のターミナルソフトとの間の通信で行います。ターミナルソフト側の通信設定は、通信速度115200、8ビット、EVENパリティとなります。 KCB−1を起動すると、サーボが中点に移動します。その後、ターミナルソフトからaを送信すると、登録されたモーションが開始します。ターミナルソフトからbを送信すると、モーションが停止します。 以下、修正したプログラムを掲載しますが、例のごとく、タブがうまくいかなくて見にくくなってしまいました。後で直しておきます。→AdobeのGoLiveでは、タブをすべてスペースにしてセーブしても、勝手に削除されてしまう。だめだめですね・・・→フォームのテキストエリアに変更しました。 こっちのほうがましですかね。 → プログラム表示 マウスの右クリックで「対象をファイルに保存」でダウンロードできます。
|
||||
この連休中、色々とやっているのですが、ほとんど進展なし。
いろんな種類のPICで実験中です。
開発環境とか、PICのコンフィグとか、チップに依存するところとか、なんだか思ったようにいかない。そんなこんなで、結局、実験基板が3種類できてしまいました。
写真左は、dsPIC30F4012を使用してEdgeRunnerの改造用で、YouTubeとかで公開されている動画の基板を真似て作成。
写真中央は、秋月の「PIC18F2550使用USBマイコンボード完成品」を使用。
写真左は、秋月の「AKI-PIC16F88 CPUボードモジュールキット」のPICをPIC18F1320に変更して使用。
どれもプログラムが思うように出来ていません。
昨日は、tom-iが台場のフジテレビで行われたKONDO CUPオープンクラスに参加のため、同行(サポート)しました。
パワーのある機体よりは、小さくても機動力のある機体の試合の方が、見ていて面白かったです。
現在、SISOさんとこの「RPU-10講座/第十三章」のプログラムをKCB−1用に移植していますが、タイマー以外のところはコンパイルエラーが出ないところまでは出来ました。が、動きはこれでいいのかな???
Flash ROM領域にデータを設定するところも、KCB−1でこれに相当する方法があるのか今はまだ分からないので、普通に定義したり、シリアルからのキー入力の有無の判定は、rs0_rx_buff()に相当する関数が用意されていないようなので、直接レジスタのビットを判定するようにしたり、調べながら修正しています。タイマー部分も同じように処理しないといけないかな・・・
サーボの動作データ部分の処理(データ取得部分)もどうも思っているように動作していない。(修正ミス?)
まあ、ちまちまと修正していくしかないですね。
もうすこしと思いつつ、KCB−1側のプログラムをしているのですが、何か勘違いしているのかな???
PICからのアナログ値をKCB−1で取り込んで、シリアルで出力してPCのターミナルソフトで確認しているのですが、変な値が表示される。もう少しなんですが、なかなか進まないです。
最近注目しているHPは、SISOさんのところのRPU-10講座。私自身、今までは、姫路の基板やKONDOの基板でサーボをコントロールしていました。KCB−1のようにセンサー入力やモーション再生までを動かすためには全部プログラムしないといけません。ざっくりとした処理のイメージはあっても具体的にコーディングとなるとなかなかうまくいかない。
そんな時、SISOさんとこでRPU-10講座がスタート。今までは斜め読み程度で見ていたのですが、「RPU-10講座/第十三章 ジャイロセンサを使ってサーボへフィードバック」が掲載されましたね。これが、色々とセンシングしながらロボット制御をすると言うことで、これを理解すれば応用も出来ますね。
早速、サンプルプログラムをKCB−1用に移植開始。RPU-10の関数はKCB−1用の関数に修正しながらと、作業しています。
PIC16F88のプログラムを作成していますが、なかなかうまくいきません。
前に感圧センサーの値を取り込んだ時は、取り込んだ値をシリアルに連続して出力していたのですが、今やろうとしているのは、シリアルでコマンドを受信して、そのレスポンスとして感圧センサーの値を送信する。
RS232Cでの動作は、どうにか動いているのですが、ICSの信号ライン用にすると、送信線と受信線がつながるので、自分が送信したデータを自分で受信するためこれをキャンセルする処理が必要になります。
この処理の実装がどうもうまくいきません。今プログラムに使っているツールも一癖あるのでかなり手こずっています。本当ならCで書きたいところで、SDCCなども試して使えそうなのですが、A/D変換を複数チャンネル動作させる場合の書き方がよく分からなかったので保留中です。
今使っているツールは、基本的にはBASICからアセンブラのコードを吐き出してアセンブルして実行ファイルを生成するので、そのうち、このアセンブラのコードを見てCに移植しようかと思います。
もう少しで、KCB−1と接続して動作できそうです。
今、たくらんでいるのは、足裏の感圧センサーをPIC16F88のA/Dで取り込み、ICS経由でKCB−1で利用することです。
コマンドのフォーマットも考えないといけません。まあ、細かいところは都度拡張することにして、プログラムを進めます。
KCB−1側では、SIO1はサーボ用、SIO2はPICと接続用に使用する予定で、KCB−1側の開発環境でインクルードファイルを1つ追加して、コマンドを1つ出力出来るようにし、昨日できたモニター環境で確認。ただ、PIC側がまだ出来ていないので、PICからの応答を処理する部分が動作しているかはまだ確認できていません。
もう少し進展してきたら、一部ソースコード等も公開しようかな・・・
これとは別に、かなり前に見たストロベリーリナックスの「IMU5Degrees 3軸加速度+2軸ジャイロ」で紹介されている動画で使用しているトイラジコンカー、これすごいですね。これ見てから今まで、自分でも処理方法の学習、実験を兼ねてやってみたいと思っていたのですが、自分で車体自体を作成するとなると結構費用がかかりそうだったので、このトイラジコンを色々と探していました。
トイザラスのオンラインショッピングで見っけ。と言うことで、注文していたものが届きました。「エッジ ランナー」と言うトイラジコンカー。
普通のラジコンカーだと、フロントがステアリングでリアで駆動するのがほとんど(4WDは除く)ですが、このエッジランナーは、右側と左側が別々に駆動する構造で、ちょうどブルトーザーなどのキャタビラでの動作と同じです。で、タイヤがでかいので裏返しになっても走行OKです。
これはこれで、気分転換としてあの立って走る車に改造しようと考えています。
A05のページなのにちょっと脱線気味・・・
ということで、KCB−1のSIO端子をプロトコルアナライザー(正確にはラインモニター)でコマンドの確認。
写真の中下の基板は、数号前のトランジスタ技術の付録で付いてきたRS232C変換基板です。使用した端子は、電源(5V)、GND,RXDの端子です。
電源は、KCB−1のアナログ端子から接続し、RXD端子はKCB−1のSIO1の信号端子に接続しています。
これで、KCB−1とPIC基板間のモニターが出来る環境が整いました。
なんですが、まだプログラム作っていない・・・。これから作らなくては・・・。
デザインウェーブのCDには、開発ツールが2種類入っています。どちらもサイズ制限付き。
あまりおいしくない。と言うのも、付録基板についているCPUのメモリは128Kなのですが、入っているツールでどうがんばっても32Kまでしか出来ない。以前のV850の時のように、開発ツールはサイズ制限付きだけど、付録基板で使用する分には実質制限がない。(ツールのサイズ制限と付録CPUのメモリサイズが同じ)
他の開発環境を考えた方がいいのでしょうかね?
とは言っても今すぐにはどうにもならないので、CDに入っていたIARのツールをインストールしました。
サンプルのLED点滅プログラムを打ち込んでコンパイル、CPUに書き込みそして動作まで出来ました。
デザインウェーブ5月号のARM基板のその後。
昨日、Windows Vistaでデバイスドライバーがインストールできなかったので、古いノートPC(VAIO SR9/CK)を引っ張り出しインストール開始。
あれ、これもだめ。何でだろう・・・。昨日の伝助日記に書かれていたことを思い出す。
私の基板は、もうすでに購入した部品を半田付けしたものなのですが、何が違うのか考えてみる。で、J6のジャンパーをショートした状態になっている。
このショートピンを外してやってみるとうまくインストールできました。と言うことは、Windows VistaでもOKかも・・・
やってみたら、何とかインストールできました。Windows Vistaの場合は、セキュリティ関連が強化されているので、「どこのドライバーかわからん。それでもインストールするのか?」みたいなダイアログが出ますが、うまく行ったようです。
「カエルがぴょん」も動作させてみました。動きました。
後は、開発環境のセッティングです。
デザインウェーブ5月号のARM基板ですが、だめじゃん。
第2章で、3軸加速度センサー値の表示と「カエルがぴょん」とか言うプログラムを動作させると言うところで、付録基板とPCをUSB接続するために、仮想CONポートのドライバーをインストールするのですが、インストールできない。
Windows Vistaでは、やっぱりだめですかね・・・。と言うことで、ここで作業はストップしてしまいました。せっかく購入したのに動作できず。
デザインウェーブ5月号、ゲットしました。
早速、昨日届いた部品を半田付けして完成です。
アーキテクチャーが、ARM7とかARM9とかの何になるのか分からないまま購入したのですが、Cortex-M3と言うのがアーキテクチャーなんですね。ARM7の後継のようです。
これからPCの方の環境設定して、動作確認ですね。
A05一旦解体とデザインウェーブ5月号のパーツセットについて
1.A05の新型胴体と膝以外は、一旦、解体します。
一昨日、近藤科学のサービスにKRS−4014HVに関して、問い合わせの電話をしました。
以前、KCB−1で動かした時に、シリアルにならないサーボがあって、これがわるさをしていたので、この辺のことに関してのことです。
で、ファームウェアをアップデートすることにしました。なので、A05を解体しなくてはいけないです。それと、動作角度がおかしいものとか色々あるので、調べてからメーカーに発送となります。
今、KCB−1開発環境のインクルードファイルを眺めています。こんなふうになっているのかと思ったことが少し・・・。まあ、この辺はもう少し眺めてからPIC基板との接続部分のプログラミングでもしてみようと思います。
2.デザインウェーブ5月号のパーツセットについて
本日、王国から届きました。デザインウェーブの発売日前日に部品が揃ってしまったので、記念撮影???
一通りの部品が入っているので、明日はすぐに動作できそう・・・
CQ出版の他の雑誌で2号まえから、デザインウェーブ5月号に付録基板が付くアナウンスがされていましたが、ロボットビルダーは興味ありますよね。なんといっても、加速度センサーが付いている。
この前のインターフェース(富士通のチップが載った基板付き)も2冊購入して、何か出来るかやってみようとは思っているのですが、デザインウェーブの付録基板の方が面白そう・・・
自分の作業がはかどらないのに、他の方のHPが気になる今日この頃・・・
で、今日気になったのは、勇者ロボ研究所(あれ、「ののいち」が消えている・・・)。けんじさんのHP。(個人的には、けんじさんと言うよりののいち君のほうがしっくりくる)。彼、がんばってますね。
勇者ロボ研究所の4月5日の写真ですが、「卒業式の様子」の写真、懐かしいですね。私、卒研はこの建物の中でやっていました。
5年ほど前に、15年ぶりくらいでちょっと行ってみたのですが、この写真の向かい側は、私がいた頃とかなり変わっていました。あと、金沢駅前はこの様になったのですね。5年前はまだ工事してました。
私、卒研は「PARCOR音声合成器における音階発生」と言うのをやってました。いまでこそ、メモリーがとんでもない大容量になっていますが、昔は容量の少ないメモリーで多くの音声データを扱うかと言うことで、PARCOR(パーコール)係数というのを使ってました。
実際のハードウェアは、9段のデジタルフィルタが直列に接続されたものに、入力には発信器とホワイトノイズの発生器が入った日立製のICを使用していました。人間の声の有声音に相当するのが発信器で、無声音に相当するのがホワイトノイズの発生器です。
で、PARCORでは、偏自己相関関数というのを使って、私にはかなり難しい計算式でしたね。簡単に言うと、過去にたどってきた値から次の値を予測できると言うようなところしょうか。今となっては、昔の技術ですね。
今、ロボットとかに話させるのはいい音声基板があるので、それに録音(サンプリングデータ)すれば簡単ですが、コンピュータからデジタル的に日本語をしゃべらせるのは今でも難しいようです。英語の場合は、アルファベットの並びで規則性があり、例外はほんの少しなので、MACとかWindowsでも英語を話す機能は入っていますよね。
文章を入力して音声を発生させる→テキスト音声合成といいますが、日本語の場合はつなぎが難しい。数年前、日立のシステムから懐かしい声が聞こえたので日立の方に聞くと、音声合成を使ってるとのことで、音を聞く限りは昔やっていたデジタルフィルタを使用した音だったなー。で、どんなハードを使っているのか聞いてみたら、「このノートパソコン」と言われた。昔はICだったのが今はソフトでやってしまうんですね。
日本語のテキスト音声合成では、やっぱり、イントネーションが難しいようです。イントネーションは、今でも人がちまちまとパラメーターを調整してるみたいです。このイントネーションは、設定によっては関西風になったり方言のようになったりするのでなかなか難しいようです。
また、「はし」とかなで書くと、端なのか橋なのか箸なのかは文章自体を判断できないといけない。「今日」と書いてあっても、「きょう」なのか「こんにち」なのかもそうですよね。
SF映画のようにロボットがぺらぺらと日本語を話す、それも理解して話すと言うのはどのくらい先になるのだろうか?
A05の肩の部分ですが、アルミフレームに穴を開けて配線を通していて、また、ABSで配線を隠しています。
KCB−1からの制御で、起動時に現在のサーボポジションを取得して、そこからホームポジションにゆっくり動くプログラムを作ったのですが、サーボが逆側から回ってしまい配線をぶっちぎってしまいました。
この部分の構造は、もう少し考えたほうが良さそう・・・。
PIC16F88のベース基板を作り直して、シリアル部分のプログラムテストでかなり手こずりました。
作りたかったのは、115200BPS、8ビット、偶数パリティ、1ストップビットで通信するプログラムなのですが、今プログラム作成に使っているツールには、DEFINEで設定できる部分があり、これで簡単にできると思っていたら、どうもそうではなかったです。
どうも設定がうまくいかないので、PICのレジスタに必要なところを直接ビットを立ててプログラムしました。
で、ターミナルソフトと通信してうまくいったと思ったのですが、プロトコルアナライザーを接続してみたら、パリティーエラーが発生している。
この部分も設定がうまくいかないようです。なので、偶数パリティは自分でつけるようにプログラム修正して、どうにか動作しました。
パリティなしだと、簡単に出来るのに、パリティありで使うにはこんな落とし穴があるとは思ってなかったです。
今回のA05の無線は、ZigBeeにしようと考えていたので、基板を作成しました。
まだ接続していないので、信号レベルや通信についてはテストしていません。ZigBeeの基板は、直接半田付けしてしまいました。
PICの基板は、どうも接触不良になるので作り直しています。シリアル通信はその後になります。
色々とたくらんでいるのですが、なかなか進まないですね。
KCB−1用のプログラムもどのような実装にするかも考えていますが、それとは別に、PICの基板を作成しています。今は、実験中なのでバラックでやっていますが、うまくいけば基板化しようかなと思います。
今やっているのは、PIC16F88のA/Dを使用する基板ですが、使い慣れていないのでちょっと手こずっていました。
現状は、PIC16F88のA/Dを4ch使用して、LCDに表示するところまで動作しています。せっかくの10BitのA/Dですが、浅草ギ研の感圧センサーを直結すると写真のように320付近となります。このまま行くか、アンプをつけるかは今後の課題として、今はこのまま実験します。
今使用しているLCDですが、ターミナルアダプターの表示用のものと思われる小型のものを使用しています。一番上の表示は、本当は必要ないのですが消し方が分からないのでそのまま表示しています。
このLCDは、クロックとデータとCS、A0の4線で制御でき、コマンドについては、秋月などで売っているものと同じで使用できます。ただ、1行12文字となっています。
シリアルの通信部分のプログラムをテストしているのですが、どうも思ったように動いていません。もう少し調べて使い込まないといけないようです。