訪問者数

cygwinのmake

DWM5月号のARMをGNUで開発できるように
DWM6月号の説明のとおりにcygwinをインストールしてみました。

cygwinってどんなものだか知らなかったのですが、Win上でLinuxを動作させるプログラムの様です。
DWMの説明はとっても簡単で「cygwinをインストールします」とだけ書いてあります。

これが難しい。
とりあえずいろいろなHPを見ながらなんとかインストールしたのですが、うまいこと動作していません。

さらにARMの開発環境をインストールしました。
DWMの開発環境のインストール説明はなんだかおかしい気がするので適当に読み替えてインストールしました。

で、サンプルのmakeを実行してみましたがコンパイルできません・・・
gccなどを単発で実行すると問題ないのでmakeに問題があるようです。
makeコマンドが、なぜかAVRのmakeが実行されてしまうのです。PATHが通らないらしくて「ファイルがみつかりません」となってしまいます。

う〜ん。困りました。

当分はAVRも使いたいので、やたらと今の環境を壊してしまうのも怖いのです。

適当に読み替えた部分がいけなかったのかな・・・


追記:ここに説明がありました。
cygwinをデフォルトでインストールするとmakeはインストールされないらしいです。
なるほど、検索しても見つからないわけだ。
makeをインストールしたらすんなり動作しました。

ちゃんと説明書いてよ〜。
DWMのユーザー層はデフォルトのcygwinにmakeが入っていないことを知っていて当然なのかな???
DWMのARM関係は意外とHPで情報を公開している人がいないのだが、買っても使わないのかな???制限版で楽しんでいるのかな???

変数の値をリアルタイムにグラフ表示する方法

前回はマイコンの処理時間を計測する方法を紹介したので、今回はマイコンの変数値をリアルタイムにグラフ表示する方法を紹介します。

センサーの生値ならオシロスコープで計測すればよいのですが、移動平均値などの変数値を表示するとなるとちょっと工夫が必要みたいです。
マイコンにDA機能が付いていれば変数値を電圧に変換してオシロスコープで見れるのですが、なぜか一般的なマイコンにはDA機能がないみたいです。

で、見つけたのがこれ。
CPLT
データテクノという会社がフリーで公開しているツールです。

変数値をCSV形式で232C出力するとリアルタイムでグラフ表示してくれます。
すごく便利です。

cplt.jpg


いままで私は変数値を232Cで出力して、パソコンのハイパーターミナル上でテキストで確認していましたが、グラフで見るといろいろなことが見えてきます。閾値をどうしようかとか、移動平均をどの程度にしようかとか・・・

写真の波形は、上が加速度センサで下がAVCS形式ジャイロの波形です。(多少の移動平均にはしてあります)

真ん中あたりで少し波形が飛び出ているところがありますが、ロボットを手で押した瞬間です。
グラフ化するといろんなことが見えてきます。

以上、グラフ化のすすめでした。

計測方法

5/18に行われたロボファイト7に行ってきました。
結果は、1回戦負け。
敗者復活戦では2回戦負け。
ランブルは(自称)3位。
まあ、こんなもんでしょう・・・


次の大会までには少し時間があるのでDW5月号付録のARMマイコンで遊んでみようと思っています。
現在はベステクのAVRマイコンを使用していますが、処理速度的にちょっと不満があります。
具体的にはHitecサーボのHMI通信が処理速度的にきついのです。HMI通信をI/Oポートを使って自力で行っているのですが、ボーレートが19200BPSのため52μsごとに割り込み処理を行っています。その時間内で8個のI/Oポートを制御するのですが、時間的に間に合わずにサーボがピクピクしていました。現在はロジックを工夫して解決していますが、ロジックを工夫するとプログラムが分かりにくくなってしまいますし、今後サーボ数を増やしたいと思う(現状15軸)のでAVRではきついと判断しました。
ARMかSH2-Tinyのどちらを採用しようか悩んでいたのですが、処理速度的にもフラッシュROMの書き込み回数的にもARMが有利のような気がしたのでARMを採用しようと思っています。

さて、ARMを勉強して、移植作業を開始しても良いのですが、まずは現状のAVRで処理にどれだけの時間がかかっているのかを計測して記録しておきます。
記録しておかないとARMに移植してもどれだけ効果があったか分かりにくいですからね。


計測する前に、簡単にコーネリアスの制御部分の流れを説明します。ざっとこんな感じ。

メイン割り込み処理(12.8ms周期)
1、加速度センサ読み込み
2、PS2コントローラ通信読み込み
3、次のモーションを選択
4、モーション決定
5、サーボ角度算出(逆運動学計算)
6、ジャイロセンサによるフィードバック
7、サーボ制御(HMI通信)

メイン割り込み処理以外には232C通信やジャイロ読み込みを行っている程度です。
7のサーボ制御ではさらに割り込み(52μ周期)を使用しています。


計測したいのはメイン割り込み処理にかかっている時間と、HMI通信処理にかかっている時間です。
計測方法はいろいろあると思いますが、私が常に行っているのはI/Oポート使ったやり方です。

処理を開始する前にポートをHIGHにしておき、処理が終わったらポートをLOWにします。
このポートをオシロスコープでみれば、処理にかかった時間が分かるのです。




上段のピンクの線がメイン割り込み処理を実行しているときはHIGHになっています。
下段の黄色の線がHMI通信処理を実行しているときはHIGHになっています。

メイン処理には3.8〜4.6msかかっています。

HMI通信処理を拡大すると
HMI.jpg


あれれ!!
52μs周期のうちの25μsしか処理を行っていません。約半分の時間は無駄遣い。
いままで処理速度が問題だと思って高速化ロジックを四苦八苦して作っていたのですが、どうやら問題は別のところにありそうです。
っていうか、この波形を見る限りだとCLKのずれ(表現方法が分からないのですが、信号が非定期的になっている)のような気がします。現状52μs周期で割り込みを発生させて8ポート分の処理を行っているところを52/8μs周期で割り込みを発生させて1ポートづつ処理を行えば解決のような気がします・・・。

やはり、ちゃんと調べてから解決策を考えないといけないですね。とほほです。
ここの処理に時間的余裕があるのなら特にARMに移行する理由もあまり無いのです・・・。
早いことに越したことはありませんが。

さて、どれだけ改善されるのでしょうか。お楽しみに。

倒れまセンサー

以前から挑戦してみたかった倒れまセンサーをここのところずっとがんばっていました。
AVCSジャイロを使用して、高い確率で「これ以上傾いたら倒れる」って瞬間を検地することができるようになったのですが、その瞬間からいくらモーションでがんばっても倒れてしまうのです。
傾きで倒れまセンサーを実現するのは無理なのかな〜って感じです。
なんだかガックリなので、今日は作業をやめて不貞寝することにします。
ちくしょ〜

ROBO★CHAMPの動画

2008/5/3に行われたROBO★CHAMPの動画が公開されました。

私は参加していたこともあり、また整備ブースと会場が多少離れていたこともあり、ほとんど試合を見ていませんでした。
動画をみて思ったのですが、めちゃめちゃ面白いです。とくに重量級。
いきなり倒れたり、立ち上がれるかどうかが怪しかったり、昔の大会を見ているような感覚になりました。
マイナスイメージじゃなくて、重量級はまだまだ自由な感じがしました。模索しているっていうか。
軽量級はもうどのロボットも大差ないような、みんな立ち上がれるし、みんな横歩きで移動して、みんな横パンチして。
自分はすこしでもオリジナリティを出したいと思っているのだけど、なにも思いつかなくて、やっぱり横パンチしています・・・


で、動画の件ですが、
決勝戦の動画を見ていて、うちの娘が鼻をほじっていることに気が付きました。
実は、大会参加者には動画の一般公開前に内緒で公開していただいており、
一般公開に問題があるようなら連絡してくれって委員会からメールがあったのですが、
さすがに決勝戦だけ公開をやめて欲しいとは言えないです。
鼻をほじっている娘は見なかったことにしてください・・・・

お勧めは クロムキッド vs GAT かな。
パイプいすに座って拍手しているのが、うちの娘です。(笑)

Template Designed by DW99