2003/11/30 |
今週末は、「とにかくメカを作ろう〜」と思って、ひたすらメカ考えていました。これまでで、だいたいの構想は練ってきていたので、これを具体化です。具体化っていうのは、要は、ABSを加工するための「型紙」作りです。うちでは、カットはPカッター、穴あけは普通の電動ハンドドリル(電動ドライバ兼用タイプ)、整形はヤスリなので、この型紙が大事なのです。 LilliCad ホームページの下の方に「地下研究室」があって、そこをたどっていくとロボットの製作日記とかあったりします。 このソフト、いくつか使ってみたCADソフトの中で、「すぐに使えた」ソフトでして、自分と相性がいい感じがしていますので、前回からずっと使っています。 この絵は、型紙製作中の画面です。この部品の周りの3本線は…実は、ツールパスです。「手でPカッターにツールパスなんているの?」といわれそうですが、これが書いてあると、とても加工が楽です。 後でヤスリがけするときに、本来の大きさよりも少し大きめに切るわけですが、これがなぜか難しいんです。不思議です。どうしても切り口が曲がっていってしまうんです。正確に言うと、本来の線によっていってしまうんです。だから、余分なサイズで切る分もちゃんと書いておき、これをなぞるように切るわけです。一度お試しあれ。ちなみに、この余白の一本は0.5mmです。Pカッターでうまくカットすると、0.5mmの溝ができます。んで、これに0.5mmの余白を持たせています。結構きわどいですが、Pカッターで切るときに、なるべく垂直に切るようにすると、結構、大丈夫です。やすりがけも大変ですから、早く作るためには、削る面積を減らす方がベターです。 | |||||
2003/11/27 |
うーん、インターネットに気軽にアクセスできるって、なんてすばらしいことなんだ〜と、ネットのある生活を実感しながら、今日もごきげんです。 GWS MICRO MGちぇ〜く
| |||||
2003/11/26 |
やっとaDSL開線! GWS
S03Tちぇ〜く
| |||||
2003/11/24 |
相変わらず電話回線ですが サーボの構成ですが、脚関係のロール軸と腰はS03Tで、その他はMICRO MGと手持ちのPARK-HPXで構成しようと思っています。 そんなわけで、オプティカル・センター・ポンチ、マイコンその他部品購入ときまして、当初の目標、「第5回ROBO-ONEには、新規投資は3万ぐらい」というのは、あえなく撃沈しました。しかし、今度は今度で、かなりおもしろいマシンになると思いますので、それ相応の価値はある予定です。まだ設計中ということで、サーボが既に届いているにも関わらず、「あとS03T2つ増やしたいなぁ」なんて思っています。設計しながらだと、いけないですね!でも、採寸しないと設計できないので、発注しないわけにもいかないので。このあたりが、歴史が浅いSISO-LABのつらいところです。 さて、せっかく?ですので、後で、サーボをばらしてみたいと思います。あれ?この型番って、2ベアリングタイプ???\1800で2ベアリング?え〜、え〜???
| |||||
2003/11/23 |
開線まで、なかなか時間がかかりますな〜 次期マシーン G-Tune(2003A)と同じコンセプトの「新逆間接リンクロボットを作る!」のが一番やりたいことなんですが…やっぱサーボのパワーが無いところとかカバーしやすく(なんといっても電源無しで立てますから)、また、軸がダブルになるため強度も高くしやすいので、非常に低価格ROBO-ONEマシン向きだと思っています。しかし結構部品点数が多く、また設計が複雑になるので時間的にきつそうです。「G-Tuneを改良」というのも…第4回ROBO-ONEのみなさんのパフォーマンスを見ていると、もう「元気に動けるロボット」というところで苦しいものがあります。それぐらい刺激的でした。ほんと、ため息でちゃいます。SISO-LABマシンも、いくら安ロボットとはいえ、世の中の流れについていかなければ、魅力半減です。 というわけで、部品点数やめんどくさい加工を減らすため(ホントか!?)、リンク無しフルサーボロボットで行こうと思います。今度は、「寂しい制作費」維持のために部品選定で苦労しそうですが、ウケるかもしれないのでこれで考えていくことにします。また、新規投入コストは上がってしまいますが、トータルは安くいけるよう、いろいろ考えようと思います。あまり格闘に強くなくとも、ハイパフォーマンス狙っていこうとおもいます。デザインは…悩み中ですが、ヒューマノイドで行くか、G-Tuneタイプで行くか、うーむ。やっぱ、前回でイメージついちゃっているんで逆間接がいいですかね〜。(参加するのをやめようとは、全然思っていないSISOです(笑))そんなこんなで、昨日、大量のサーボが仮SISO-LABに…届きました。ご報告は、また後日。 安いサーボで歩けるか? どれくらい遅いかというと…電源が若干電圧が落ちたことを考えて、仮に0.3secで動作したとして360度回ったとすると(360度は回りませんけど、イメージのためです)、2秒弱で一周することになります。おお、そう考えるとけっこう遅い!ですね。これで二足歩行できるかどうか、机上で考察してみたいと思います。 脚のピッチ軸に要求されるサーボ動作速度 それぞれの角度は、直立のとき、0度。屈伸すると、腿が−方向、膝が+方向、足首が+方向に角度変化します。グラフは青色…腿、黄色…膝、赤色…足首です。縦方向は角度を表し、横方向は20msec毎のステップ数を示します。精度低いので、もっと精度を上げるとまた違った答えがでる可能性があると思うのですが、ちょっと時間が取れないので、これぐらいで勘弁してください。脚を前に出した状態から、0.5secで後ろまで水平に移動し、0.3secで脚を持ち上げ、0.2secで再び前に出した位置に降ろします。 以下に検証結果を書きますが、結論としては、結構、しんどいですね〜。使う場所によってはいけそうですが、膝は無理っぽいです。これ以上はツメませんが、最大角度変化は、脚を上げ始めるときに発生していますから、脚を上げる高さとか、前後に開く配分とかを調整すると、もう少し楽な結果がでてくるかもしれません。計算精度低いので、あくまでもご参考用ですよ〜。また、この考察で、膝にはまったくダメそうなことがわかりましたが、脚のロール軸や腰などはそんなに速度が要らないと思うので、使えそうです。
| |||||
2003/11/19 |
aDSLって、そうなの〜??? とりあえず、ダンボールはすべて片付けたんですが、まだまだ片付いていないものも多いですし、ロボットの部品に至っては、全然広げられていません。しか〜し、ふっふっふ。家具とかを置いているうちに、目立たないちょっとしたスペースができていることを発見!当初予定では、大々的に、かっちょいい〜家具調SISO-LABを考えていたのですが、結構、製作に時間がかかりそうなので、とりあえず第5回ROBO-ONEに向けての開発作業は、ここで我慢しようかなぁ。以前のようには部品を置けませんが、ちょっと工夫すれば、なんとかロボット製作再開できそうです。早いところ、こまこましたものも片付けて、SISO-LAB再開にこぎつけたいです。
| |||||
2003/11/15 |
本日の我が家の状況 新Action Script実行エンジン Coreソフトの方にあわせて、Termソフトの方にも転送機能を追加したのですが、単純に、Action Scriptの書かれたテキストファイルを読み込んで、それを選択してH8/3664へ転送し、それを実行させるっていうだけのものです。 今のところ、特に不便を感じないので、グラフィカルな動作エディタみたいなものは作らず、テキストで書き上げたものを、バイナリデータに変換して送り込むソフトで行こうと思っています。画面は、デバッグ中の表示イメージです。読み込まれているAction Scriptがコメントとともに表示されているのがわかると思います。 さてそのテキストファイルのほうはどうなったかといいますと…こんな感じです。 [000] 屈伸 CDP2, DLFT, MLNR, MLNR, 50, 100, 0 CDP2, DRGT, MLNR, MLNR, 50, 100, 0 CSQT, 50 CDP2, DLFT, MLNR, MLNR, 50, 120, 0 CDP2, DRGT, MLNR, MLNR, 50, 120, 0 CSQT, 50 CRIJ, PCNT, PCNT, PCNT, PCNT, 1, 255 CPOS, LS, MLNR, MLNR, 25, 30 CPOS, RS, MLNR, MLNR, 25, 30 CSQT, 25 CPOS, LS, MLNR, MLNR, 25, -30 CPOS, RS, MLNR, MLNR, 25, -30 CRIJ, PCNT, PCNT, PCNT, PCNT, 8, 255 CPLS, OF, OF, OF, OF, OF, OF, OF, OF, OF, OF, OF, OF, OF, OF, OF, OF
見たいな感じです。こんな感じで今までやっていたことは一通りいけそうです。その他、条件ジャンプコマンドに、いろいろいれて拡張していけたらなぁと思っています。後は、これをI2C EEPROMに書き込みできるようにし、それを読み込み実行できるようにすれば、動作処理については実装完了ってところです。この先のアイデア(というか既に実装しかけていたりするんですが)としては、センサー入力値による分岐、センサー入力による値のオフセット、他のスクリプトへのジャンプなんてのを考えています。
| |||||
2003/11/14 |
1桁アップでなめらか〜 先日計算したときの値を忘れてしまったので、同じ値で計算したものを比較用に両方載せました。 平方根計算ルーチンの改良
| |||||
2003/11/12 |
眠い… この大根の煮付け、実は最近まで、自分が大好きだったということを忘れていました。一人暮らしを始めたころからかな。その後、結婚して、妻が、私の母親から聞いてきて作るまで。忙しいという字は、「心を亡くす」と書きますが、ほんと、いろんなことを忘れちゃうもんですね〜。ここ1年は、以前より仕事が落ち着いているので、だんだん取り戻していますけど。それ以前はほんとひどかったです。 新Action Script仕様そんなわけで、ちょっとした時間でソフトの方、ごちゃごちゃと作っています。今日は、サーボ動作などの指示スクリプトを表記する、Action Script (SISO-LAB用語)の新仕様を考えてみました。前回は、1レコードに、スクリプトID、実行開始時間、実行時間、動作目標角度、補完モードなどを全部入れてまして、1レコードあたり12バイトほど使用していました。1レコードでサーボ1つ動作します。これで実際に動作スクリプトを作ってみたら、いろいろ気づいたことがありまして、改善点、前回良かったと思って仕様キープする点をちょっと書き出してみました。
| |||||
2003/11/09 |
高速演算プログラム
おまけで「座標回転」、「直線の角度計算」、「2つの円の交点計算」なんてのがあります。おお、これだけあれば…そうです。アレです。G-Tuneは、低精度ですが、それなりの計算によって脚が動いています。さらに、これもまた手抜きで、横から見た2軸しか計算していないのですが、それでも、動作データを作るとき、「脚を前に2cmだす」なんても簡単に指定できるので、楽チンです。特に「脚を斜め前に上げる」なんていうのは、「作ったかいがあった〜」と思える至福の瞬間です。1つの動作コマンドだけで、サーボが後ろに動いたり前に動いたりして目標座標まで「つま先」が進んでいきます。そんなわけで指示がすごく簡単で、短時間で指示パラメータの決定ができるため、前回、G-Tuneが短期間で歩けた理由の1つだと思っています。 今、気づいたのですが…高速とうたいながら、速度を測ったことがありません!こんど測ってみることにしますけど、とりあえず、サーボパルス制御の隙間で計算するのに間に合ってます。 G-TuneのXZ指定?サーボ動作補完のデキ 原因は……わかりました。時間があったら改良しようかなぁって思っているんですが、2つあります。1つは「指示値だけでなく、補完計算中も1mmの精度しか持たせていない」ということと「補完計算中、角度を1度単位で扱っている…せっかくSINとかは0.1度までいけるのに」です。 単純なサーボ角度補完プログラムの方も、1度単位でしか指定できないのですが、あくまでも停止位置が1度単位であって、計算はもっと細かくやっているため、なかなか滑らかに動くのですが、こっちはすっかり改良するのを忘れていました〜。あと、屈伸とかだと目立つのですが、脚を前後させるような動きの場合は、結構スムーズに見えます。脚が「垂直」に近い角度だと、結構目立ちます。 最後になりましたが、前回、あまり気にしなかった本当の理由を言うと、がくがく動くのは「サーボがそんなもん」と思っていたからです。サーボさん、ごめんなさい…(でも、他の動きみてたってそんなに細かく動いてくれるわけじゃないし、負荷かかってると5度ぐらい指示しないと動かないし、etc...) 引越し恐るべし…スケジュール遅延危機!? 新しい生活、非常に楽しみなんですが、うぅ、予想以上にロボット製作に影響大です。もともと、引越しそのものは時間で見込んでいたんですが、引越し後のSISO-LAB再開も前途多難そうで、すぐにとはいかないかもしれないです。引越し予定の在る方、特に新居に引っ越す予定のある方は、あらかじめ対策しておきましょう。 というわけで、引越して片付けが終わったら、まずは美しい作業スペースの製作が第一課題となりそうです。以前、MFさんがやっていたように(マイクロマウス工房のここの下の方です。すばらしいですよね!)、家具+収納+作業スペースみたいなのを造らないとダメっぽいなぁ。これ、あこがれです。よし、ロボットで培った設計技術で、いっちょやりますか。
| |||||
2003/11/07 |
H8/3664、SH7047F並に発熱! よくよく見てみたら、サーボの電源が入っていました。どうもサーボ電源が入っていて、H8/3664の電源を落とすとすごく発熱するようです。電流が流れ込むのかな?よくわかんないけど。SH7047Fの時はサーボをロジックICで駆動していましたので、気づかなかったのかもしれません。とりあえず、解熱処置(サーボ電源OFF)後は、無事回復したようで元気よく動いております。はぁ〜、よかったよかった。きっと、これって壊れたりするんですよね〜???もうどっか壊れているのかな?心配だな〜。
| |||||
2003/11/05 |
サーボ軌道計算のプログラム製作に精を出しているSISOですが、みなさんいかがお過ごしでしょうか?せっかくなので、この手の計算物のプログラムを作るときに、ちょっと注意しておくといいところをあげてみます。 サーボ軌道計算…というと、やっぱ小数点のついた計算(浮動小数点)をする方が、お手軽に精度とかでたりするんですが、そこはマイコン、パフォーマンスを考えると、結構、きついです。以前、SH7047F(RAMベースでプログラム実行)で、単純なインクリメントのプログラムを実行してみたのですが、long型のインクリメントと比較して、float型のインクリメントでだいたい20倍ぐらい、double型で30倍ぐらいの時間がかかります。コプロセッサとかあるといいんですけどね〜。 そんなわけで、多くの方は、すべて整数型で計算をされているのではないかと思います。整数型で計算する場合、小数点以下の値は無くなってしまいますので、いろいろ気をつける必要があります。例えば、もともと値を10倍とか100倍しておく方法があります。また、それ以外にも、計算順序を考慮するのがポイントとしてあります。 簡単な例として、サーボ軌道を直線で補間する例を書きます。サーボ軌道を直線補完するためには、以下のような感じの処理が一般的だと思います。
では、これをプログラムにすると…まずは変数の説明からです。lSrc, lDstにそれぞれサーボの動作開始時の角度、動作終了時の角度が入っており、全体の動作カウント数lTtlClockで、軌道を求めたい動作カウント数をlCurClockとします。 lAns = ( lDst - lSrc ) / lTtlClock * lCurClock + lSrc; となります。ところがこれだと、ちょっと変な結果が得られます。lSrc=10、lDst=30、lTtlClock=3、lCurClockを1〜3で変化させると、16、22、28となります。あら、最後が30になりません。うーん、どうしてでしょう。計算結果の差をみると、最初の位置から計算して、+6、+6、+6、で、挙句の果てに行ってほしい場所まで行ってくれません。なぜでしょう???これが小数点以下を切り捨てられる怖さなのです。「( lDst - lSrc) / TtlClock」のところで、ぐぐっと値が小さくなります。ここで切り捨てられた小数点下が、次の「* lCurClock」の結果にぐぐっと影響するわけです。いや〜、こういうテストするときって、GDLのエミュレート機能って、とても役に立ちます。 ポイントとしては、なるべく、式の中で常時数字が大きく保たれるようにした方がよいです。そこで、ちょっと計算の順番を入れ替えてみます。 lAns = (lDst - lSrc) * lCurClock / lTtlClock + lSrc; 今度は16、23、30。おお、いいですね。差も、+6、+7、+7と、ゴールに向かってそれなりに均等に計算されています。これは、割り算よりも掛け算を先に行うことで、数値を一旦大きくし、小数点以下切り捨てによる誤差を小さくしているため、計算結果が良くなります。 これぐらいの式ならばすぐに気がつくのですが、これにちょっと複雑な要素を入れて長い式になってくると、なかなか見つけるのが難しくなります。最後になりましたが、オーバーフローにも気をつけましょう。
| |||||
2003/11/04 |
ちょいと出張行ってまして、結局、3連休にならなかったんですけど、いかがお過ごしでしょうか? さて、そろそろという感じでサーボの軌道補間プログラムを作り始めました。与えられたサーボの目標位置と移動時間から、サーボ制御周期ごとのサーボ指示値を生成し、ソフトに動作開始終了させたり、逆にリニアに動かしたりするためのプログラムです。前回、SH7047Fでは、サインカーブを使ってソフトなスタートとかの補間指示を作っていたのですが、うちのマシンでは、あまり効能がなかった気がするので、今回はシンプルに(テキトーに)作ることにしました。 さてさて、こんなときに非常に役立つのがGDLのエミュレーション機能です。説明書を読むと「GNUツールのRUN云々」とあるので、GNUツール群の一部なんでしょうか? GDLのエミュレータ機能 だから、軌道生成等の計算プログラム関係のデバッグをするには最適です。 H8/3664のエミュレートをするためには、まず、GDLのGCCオプションから、H8TINYを選択します。これでOKです。後は、コンパイルしてエミュレート実行するだけです。ちょっとだけ注意点としては、エミュレートされたプログラムの入出力結果は、コンソール上に表示されますので、プログラムの最後に、表示結果を確認するまでウィンドウが消えないように、while(1);等の、「待ち」コードを書いておく必要があります。 また、エミュレートにてプログラムをデバッグしやすくするためには、プログラムの構成そのものを、なるべくハードウェアに依存する部分とそうでない部分を分けておくと良いです。そうすると、もとのプログラムに手を入れることなくデバッグできるようになります。デバッグですから、元のプログラムにはなるべく手を入れないようにした方が、効率が良いです。自分の場合、ソースファイルをいくつか分割して、メインとしているソースファイルにて"#include"命令で読み込ませて1つにしているのですが、このときのファイルの単位を、ハードウェアに依存するもの、そうでないものと大きく分けて、さらに細分化しています。 このため、エミュレータでデバッグするときは、ダミーのメインルーチンを書いたソースコードを用意して、そこにインクルードしてやるだけで、プログラムとして成り立つような感じで作っています。 さて、デバッグデバッグ。実行!あら???
| |||||
2003/11/01 |
本日は、H8/3664側のプログラミングのお話です。GDL(Version 1.5.0.18です)でC言語にてプログラムを組んでいるわけですが、ようやくプログラムの方も、多少は算術的な部分に入ってきて、マイナスを使い出しました。そしたらはまりましたよ〜。なんかcharってほかのと違うようですね…。 あ、タイトルの「うんしぐねど」は、SISOがunsinged(あんさいんど)を入力するときに頭の中でつぶやいている言葉です。ただし呼び方ではないので、決して間違えて覚えないようにしてくださいね。 サンプルプログラム char cData01; short sData02; cData01 = -1; sData02 = -1; printf( "cData01代入の答え=%d\n", cData01 ); printf( "sData01代入の答え=%d\n", sData02 ); まずは、心の予定からお話します。心の予定では、「すべてsignedのデータであるのだから、結果の表示は、2行とも「-1」になるというものです。実際そう思ってプログラムを組んでいたのですが… 実行結果 ■H8/3664で実行 cData01代入の答え=255 sData01代入の答え=-1■SH7047Fで実行 cData01代入の答え=-1 sData01代入の答え=-1 このプログラムで結果を見ると、見つけることは非常に簡単なんですが、これを実プログラムの中で見つけるのは大変でした(@_@)。えぇい、今日はプログラムやめやめ。というわけで、本日、ようやく角度指示(パルス数指示じゃなくて)でサーボが動くようになりました。めでたしめでたし。
|
2003 | Jan. | Feb. | Mar. | Apr. | May. | Jun. | Jul. | Aug. | Sep. | Oct. | Nov | Dec. |