« 2008年4月 | トップページ | 2008年6月 »

2008年5月28日 (水)

お手入れ

仕事で今月中に片づけたい内容があるのですが、どーも片付きそうに無い感じで困ってます。デバッグモードでビルドしてできた実行ファイルの大きさがどう見てもCPUのROMサイズより大きくて書き込めないとか、リリースモードでデバッガを動作させようとすると開発環境が落ちるとか。 片づけたい内容の本質とはかけ離れたどうでもいいようなところで足止めを食らってて、もうウンザリ。

悪いことばかり書くのもアレなので、良いことも書きます。仕事上、無線機のアーキテクチャを理解していないと仕事にならないことをやってまして、今日はプロジェクトチームの先輩方に勉強会を開いてもらいました。教材は自社製品の設計仕様書。デジタル信号処理の話とか、なんちゃら方式いう復調器の話とか。2時間程度でカバーできるような簡単な内容じゃないんですが、多少の予習と先輩のわかりやすい説明のおかげでなんとか全体像を把握できたような気がします。勉強会をアレンジしてくださったプロジェクトリーダに感謝!

今年はいろんな意味でビッグウェーブが来ている気がするので、弛まず努力して確実に成果に結び付けていく所存です。

あれ、タイトルに書いた「お手入れ」の話を忘れてました。旧ホームページのBBS(http://mobile-robots-bbs.orange.coocan.jp/)がほったらかしで荒れていたのを久しぶりにお手入れしました。という意味です。それだけ。

2008年5月27日 (火)

仕事と趣味と

さすがに会社でガッツリプログラムに取り組んでいると、帰ってきてからまたプログラム書く気になりません。仕事と趣味の技術分野が近いのはいいことなのか悪いことなのか。

先週末にDCモータ制御実験用の回路を組んで、この回路でモータが動くことを確認するための実験用プログラムを作成中です。割り切ってやりゃいいんでしょうけど、なんか余計なことを考えてもたもたしてます。集中力が欠けているともいう。

ロボット作りは、なんだかんだ言ってもモータが回り始めるまでが一番時間がかかるところなので、ここさえ乗り切れば後はなんとかなるものと考えています。そして予備に購入したロータリーエンコーダが1個行方不明。

2008年5月14日 (水)

_INITSECT(); でアドレスエラー

会社で頭が回らなくなってきたな~と思って帰宅してからまたプログラムに手を出すなんて、正気の沙汰じゃないですね。

さて、ゴールデンウィーク中に手を出していたHOS-V4の話。まだSH7125上でちゃんと動いていません。JTAGデバッガで追いかけてみると、CPUが起動してから _INITCTという組み込み関数を使用するとアドレスエラーが発生していることがわかりました。この_INITSCTという組み込み関数はルネサスから提供されているもので、Bセクションの0クリアと、DセクションからRセクションへのコピー処理を提供してる関数だということはわかりました。が、それがアドレスエラーを起こすってどういうことよ? ちなみに、VBRはH'00000000のままです。

アドレスエラー発生要因を考えてみると、命令フェッチで発生するかデータの読み書きで発生するかのどちらか。アドレスエラーが発生する行のアドレス(H'00001C30)から考えて偶数アドレスなのはOK、内蔵周辺モジュールのアドレスでもないし、外部メモリ空間でもないので、命令フェッチで発生したものではなさそう。データ読み書きのほうがあやしそうで、そのアドレスエラーが発生する行のアセンブリコードを抜き出すと、

MOV.L  R1, @-R15

で、このときR15(すなわちスタックポインタ)に入っている値は H'FFFFBFF7です。私はアセンブラをよく理解していないのですが、この命令では「R15の値をデクリメントして得られた値をアドレスとして、そのアドレスにR1の値を入れなさい。」てことですよね? これ、なんかすごく中途半端な場所にR1(=H'00000000)を書き込もうとしてアドレスエラーが発生したのではないかと。

そんな感じでどこでエラーが発生するか判明しましたが、何せルネサスが提供している組み込み関数が仕出かしていることなのでどうしていいものか困ってしまいました。

2008年5月11日 (日)

先日の試験の結果(はまだだよ)

4月に受けた情報処理技術者試験、そろそろ結果が出てるかな~と思ったのですが、まだでした。合格発表は6/16だそうです

合格発表は未だですが、解答が載っていたので自分の点数がどうだったか自己採点してみました。午前問題だけですが、出題80問中、正答59。正答率にすると74%くらいでした。ちょっと合格が遠そうな感じもしますが、情報処理技術者試験はIRT(項目応答理論)というスコアリング方法を使っているらしいので、正答率だけではなんとも言えないようです。

2008年5月10日 (土)

DCモータを取り付けたけれど

金曜日の夜に1回目の試作をしたDCギアードモータ取り付け用の板。モータのお尻がE-Savageの他の部品にぶつかってしまったので、トレース作戦をやめ、設計を変更して2枚目を作ってみました。

Motor_attachment_plate Original_motor_attachment

1枚目の写真は、右がE-Savageに最初からついているモータ据付用の板で、左がオリジナルをトレースして、DCギアードモータとロータリーエンコーダを取り付けるための穴を用意したものです。昨晩作ったやつです。2枚目の写真は、元々はこんな感じでモータが2個付いてましたよっていう写真。

Mounted_motor Spar_gear_and_encorder Mounted_motor_rear_view Mouted_motor_side_view

続いての写真は、作り直した2枚目の板で、E-Savageの車体にDCモータとロータリーエンコーダを据え付けたところです。金色に光っているギアは、ゴールデンウィーク中に取り付けようとしてつかなかったギアの代わりのギアで、黄銅製、モジュール0.75のもの。下段の3枚目の写真を見ると分かる通り、ロータリーエンコーダもいい場所に付きました。1枚目を作った時に失敗したDCモータのお尻と他の部品との干渉は、下段写真4枚目のように回避しました。ちなみに、干渉していた部品というのは、ラジコンの受信機とステアリング用のサーボモータが入っている箱です。

ギアのかみ合いもまあまあで悪くないのですが、心配な点が4点あります。意外と多いな。

一つ目は、据付用の板に使用したアルミ板の肉厚が薄いこと。E-Savageオリジナルの板は厚みが3mmですが、今回私が作った板は厚みが2mmで、材質も(ホームセンターで買ってきたから正確にはわからないけど)きっと純アルミなのでやわらかく、強い力を受けると板が曲がってしまう心配があります。この板が曲がると、DCモータに取り付けたピニオンギアとスパーギアとのかみ合わせがくるってしまい、空転したりギアが削れてしまったりします。対策としては、(A) 3mm厚の板で作り直すとか、(B) 板の一部を折り曲げて強度を確保するとか、(C) 片持ち構造を避けてDCモータのお尻を支える部品を追加するとか。

二つ目は、DCギアードモータの減速比が大きすぎて走行速度が遅くなってしまうこと。今取り付けてあるのはタミヤギヤードモーター 540K75で、減速比は75:1なのですが、先ほど7.2Vのバッテリをモータに直結して動かしてみた感じでは 10cm/s くらいで動いているので、時速に直すと 360m/h くらい。あらら、目標速度の4km/h(=4000m/h)には一桁足りないじゃないですか。さすが、行き当たりばったり設計。対策と言ってはなんですが、減速比 5:1 くらいのギアヘッドがあればいいのですがなさそうなので、いっそのことギアヘッドなしのRS-540モータ(というか、E-Savageに最初からついているRS-550相当のモータ)を使ってもいけるんじゃないかなぁ? モータの出力軸から最終段のタイヤに至るまでの減速比がわからないので、これは何か方法を考えて測ってみます。

三つ目は先ほどの減速比と絡む話で、バックドライバビリティがないこと。言い換えると、台車を人間の手で押したときに動かないってことです。これ、減速比が大きすぎて外からの力ではモータが回らないからです。無理やり台車(=E-Savage)を押してタイヤを回そうとすると、スパーギアのところについているトルクリミッタが滑ります。下段2枚目の写真に映っている一番大きなギアがスパーギアで、スパーギアの軸に付いているバネとアルミの小さな円盤(この円盤は裏側にもあります)がトルクリミッタです。このトルクリミッタ、元々はラジコンが何かに衝突したりしてタイヤが回らない状態でモータx2個を回転させようとした時に壊れないようについているものです。ビッグタイヤ系のラジコンバギーでは結構ついてるみたいですね。 バックドライバビリティがなくても困らないと言えば困らないのですが、できれば手で押したら動いてほしい。 対策は減速比を下げることなので、二つ目の問題点が解決できればこの問題も解決できると思います。

四つ目。写真にある通りギアがむき出しになってしまったので、屋外で走行すると砂やゴミがギアの間に挟まることは確実です。先ほどの二つ目を解決する際にモータを変えるかもしれないので、とりあえずはこのままにして、上記の問題が解決したらゴミ除けのふたを作ろうと思います。

モータ取り付け作戦変更

千石のオンラインショップに発注しておいたギアが届いたので、ソフトを一休みして、田宮模型のDCギアードモータとロータリーエンコーダをE-Savageに取り付けるための受け板作りに着手しました。やってることはずばり「現物あわせ」です。

E-Savageにデフォルトで付いているDCモータを受ける板。これの外形やねじ穴の位置をラベルシートにトレースして、このラベルシートをアルミ板に張り付けて、トレースした線に沿ってアルミ板を切断。ボール盤で穴を開けたり、やすりで形を整えたりして、まあまあそれらしい受け板ができて、モータを取り付けるとギアのかみ合いもGood。だったのですが、これを今度は台車のフレームに取り付けると、DCギアードモータのおしりが台車の他のパーツと干渉してしまって取り付けることができませんでした。

1枚作ってみて、必ずしも板の形をE-Savageに最初からついている板と同じ外形にする必要がないことがわかったので、今度はDCモータが他の部品と干渉しないような板の形、モータの取り付け位置を考えて板を作り直そうと考えています。

2008年5月 7日 (水)

Never give up!

誰の言葉だか忘れましたが、「成功の秘訣は、成功するまで続けることだ」とか。なんか論理的には変なこと言っているような気がします。が、言いたいことはよくわかります。私は、昔はあきらめが悪い子だったのに、いつの間にかあきらめるのが早くなってしまって、なにも成功しなくなってきちゃったような気がします。

で、ゴタゴタしているHOS-v4をSH7149に載せる件、hamayanさんのアドバイスを頂いて少しは前進しました。詳しい話はこちら。もうねぇ、95%くらい気持ちが折れていたのですが、アドバイスをもらっておきながら諦めるのかよ、って思って、夕飯を食べてから最後のあがきをしてみたら、いろいろ見えてきました。

まず、MAPファイルを見たらシンボルが割り当てられてない、と思ったことについて。これは、HEWの最適化リンカの設定で、リンケージリスト出力内容の「シンボル情報」にチェックが入っていなかったことが原因。これを入れたら、ちゃんとMAPファイルにシンボルが表示されました。

続いて、JTAG-ICEでSH7125のメモリを読みだしてみたらH'00000000番地からず~~~とFFFFFFFFという値が入っていたこと。これは、比較的新しいSH2にはkey codeというものがあって、JTAG-ICEのkey codeとCPUのkey codeが合ってないとROMの中身を全部消されちゃうことによるものだと思います。sh7125の場合は、H'00000040番地にkey codeが書かれているわけですが、これをどうやって設定したらよいか。去年すでにやったのでわかってました。key codeに関する質問は、アルファプロジェクトのSH Tinyサポート掲示板にもありますね。

hosv4.libのサイズについては、評価版ツールの制限に引っ掛かるものではないようで、実際リンクできました。

FlashWriterEXでSH7125にプログラムを書き込もうとすると、表示はCOM6なのにCOM8で書き込まないと書き込めないとか、USBケーブルを接続する場所によってはCOM10になっちゃうのでFlashWriterEXではCOM8までしか指定できなくて困るとか。解決してない問題も多少ありますが、多少進んだのでやる気が出てきました。

2008年5月 6日 (火)

セクションの割り付けに問題あり

昨日に引き続き、SH7149上でHOS-V4を動かすための準備を進めています。まずはいただいたサンプルをSH7125上で動かそうとしていますが、ビルドしてできたMOTファイルをSH7125にダウンロードしてもなぜだか動きません。

で、その動かない理由を探ってます。まずJTAG-ICEでSH7125のメモリを読みだしてみたらH'00000000番地からず~~~とFFFFFFFFという値が入っていること。ん?と思ってMAPファイルを見てみたら、セクションは確保されているのに、その中にシンボルが何もない。あれ??? これで動いたらそりゃ暴走してるだけだわ。

なぜシンボルが割りつけられていないのか考えてみます。

(1) 割り付け方が間違っている場合。仕事でも何度かHEW(ルネサスの統合開発環境)を使ったことがあり、去年HEW + KPIT CGGを使った時も全く同じ割り付け方をしています。また、他社ツールでも大体似たような割り付け方をしているので、シンボルの割り付け方が間違っている可能性は(ゼロではないが)低いものと思います。

(2) 使用している開発ツールが評価版なため使用制限に引っ掛かっている場合。私が使用している開発ツールはルネサスの評価版なので、こちらに書いてあるとおり、60日を過ぎるとリンクサイズが256KB以内に制限されます。これに気付いた理由は、サンプルプログラムをビルドしたときに、HEWのBuildログに

Phase OptLinker starting
License has expired. Maximum link size limited to 256KB code+data.
Phase OptLinker finished

と表示されたからです。そこでサンプルプログラムとリンクしたい hos4v.lib(コンフィグレーション後に構築したもの)のサイズを見てみると 396KBありました。これのせいかなぁ?

私はこの評価版の使用制限を「リンクしてできるMOTファイルの上限サイズが256KBになる」と理解していたのですが、その理解が間違っているような気がしてきました。困ったなぁ。

問題を構造化して考える技術

問題解決にあたって、問題を構造化して考えるというのはごくあたりまえのことなのですが、なかなかこれが身についていないと感じています。<昨日の日記参照。

ごく一般的な、問題解決のためのフレームワークって、こんな感じ?

  1. 問題点を定義する。(言葉/文章に起こす。)
  2. 問題を構成要素に分解する。(図示する。)
  3. 要因を絞り込む。(重み付けする。)
  4. 主要因に注力して取り組む。

言い換えれば、「あんたは何をどうしたいの?」「なんでそんなことが起きるの?」「どこがいちばんアヤシイの?」「じゃあそこからやれば。」てことです。

こういうのって知っているだけでは意味がなくて、無意識のうちにこういう思考ができるように刷り込んでおくべき「技術」なのだと思いました。

そろそろやるかな。

2008年5月 5日 (月)

頭がごちゃごちゃ

台車のDCモータを速度制御できるようにするために回路設計をしつつ、制御用のマイコン(SH7149F)に載せるOSの準備を進めています。が、もうパニック状態です。

まずは最初に直面した問題から。DCモータの速度制御をするためにロータリーエンコーダのパルス出力(2相)をSH7149のMTUで読み取りたいのですが、外部SRAMを使おうとするとロータリーエンコーダの入力に使う端子と外部SRAMの制御に使う端子がバッティングしてしまいます。あれこれ考えた末、外部SRAM(512KB)の使用を諦めて内蔵SRAM 8KBだけで対応することにしました。外部SRAMが無いと、JTAG-ICEでRAMデバッグできないんだよなぁ。

外部SRAMが使えなくなったので、次は制御プログラムの構造をどうするかという問題です。当初の予定ではITRON系のOSを載せてRAMの容量を気にせずプログラムを書くつもりだったのですが、先ほどの理由で予定変更、SRAMは8KBが上限になりました。SRAM 8KBでOSを載せてRAMが足りなくなったという過去の経験があるので、下手にOSなんか使わないほうがいいんじゃないかとか。(このときRAMが足りなくなったのは、printfなんぞを使ってしまったからだったりして。) なんとかRAMが少なくてもOS載せられる方法はないものかと思うところですが、アルファプロジェクトのSTK-7125HOS-V4を移植した記事が昨年いくつかあったのを覚えていたので、これで何とかなるかなぁと思って手を出してみました。( Smalightという手も考えたのですが、そこそこお金がかかりそうだったので保留。)

今度はHOS-V4の立ち上げに絡む問題SourceForge.jpからHOS-V4のコードを頂いてきて展開。SH7149はサポートされていないようなので、こことかこことかを参考にしながらあちこちいじってみましたが、カーネル構築前のコンフィグレーションがうまく通りません。そこでネット上で探しまわって、こちらでアドバイスを頂くことができて、カーネル構築まで何とかできるようになりました。カーネルが構築できるまでには書くのが面倒なくらい雑多なトラブルがありまして・・・weep

で、先ほどのアドバイスをくださったhamayanさんのところでsh7125用に作成したHEWのプロジェクトを頂けたので、私の手元にあるSTK-7125を使ってサンプルプログラムを動かしてみようと。したところ、今度は開発環境に絡む問題が発生。STK-7125EVBキットのFlashWriter EXを使ってプログラムをCPUに書き込みたいのですが、シリアル通信のポートはあるのにポートを開けません。これは他のツールを使っても開けないので、アプリ側の問題ではなさそう。どうも、表示されているCOMポートの番号と実際にSTK-7125EVBが使用しているCOMポートの番号が違うんじゃないかという臭いがするのですが確証はありません。そう思った理由は、(ベステクのGCC Developper Liteについてきた)SimpleTermでWindowsのデバイスマネージャで表示されているSTK-715EVBのCOMポート番号(このときはCOM6)を開こうとしても開けず、違う番号(このときはCOM8)なら開けたからです。そうそう、そういえばWindows Vista にはHyper Terminal 入ってないんですね。 その後、Windowsを再起動して書き込みに再挑戦したら1回だけは書けましたが、書き込んだプログラムは動いていません。いや、通信ができていないから動いているかどうかよくわからないだけなのか。

そろそろ心が折れそうなのですが、昨年買ったJTAG-ICE(XrossFider)を使ってステップ実行しつつソースコードを追いかけることにしました。そこで気付いたのは、もらってきたサンプルプロジェクトのセクション設定をみると、sh7125じゃなくて(Interfaceの2006年6月号の付録についてきた) sh7144 + 外部RAMの設定になっていることです。ということは、vectorの設定とかも見直さなきゃダメかなぁと言う感じでモチベーションダウン中です。

こんなことしてますが、去年はSH7149の同じCPUボード上で、同じITRON系のOSであるREALi_SHを動かしてました。なのになんで今年もそれを使わないのか。それは、今私が使っているノートPCはOSがWindows Vistaで、去年使っていたKPIT GCCが動かないから。KPIT GCCが動くなら、わざわざサイズ制限のある評価版SHCコンパイラなんて使いませんよ。

こうしてみてみると、雑多なトラブルの元凶は、私がWndows Vistaなんか使ってることにあるんじゃないかと思えてきました。去年は STK-7125EVBキットがかなり素直に動いてくれて、これすげーじゃんと思っていましたからね。ついでに言うと、Vista上のIE7ではここからC++コンパイラのダウンロードができなかったり、IE7でFlash Playerが正しく動かないのか動画系のサイト(YouTubeやニコニコ動画)で動画が表示されなかったり、Flash系のゲームが動かなかったり、e-learningができなかったりと、不満が沢山あります。なので、FireFoxを入れてこの手の問題を回避しています。簡単にいえば、「Vistaはやめておけ」ってことです。

文章に起こしたら問題点が整理できるかと思いましたが、やっぱりダメかも。やる気が回復するまでしばらく休憩します。

2008年5月 2日 (金)

Golfがほしい (^-^)

今乗っているセリカ(ST-202)は乗り始めてからすでに7年経っており、次の7月で車検なので、そろそろ新しい車に乗り換えてもいいかなぁと思っています。乗り換える場合の第1候補はフォルクスワーゲンのGolf。ただし、予算的に新車は無理なので、GT TSiかGTIを中古車で考えています。そして、金曜日に近くのフォルクスワーゲンのディーラー(DUO沼津三園橋)に行ってきました。

行ったついでにGT TSi に試乗させてもらいました。基本左ハンドルの車を右ハンドルにしているせいなのか、運転席の足もとが若干狭いと言われればそうかなという程度で特に違和感なく運転できました。曲がろうとしてウィンカーを動かしたりしましたが、雨が降っていたのでウィンカーが動いてもそれはそれでOK。短い距離でしたが満足のいく試乗でした。

こちらから予算と希望を伝えたので、希望に合う中古車を見つけたら購入前に試乗させてくれるそうです。しばらく倹約生活しようかな。

2008年5月 1日 (木)

歯が立たない

ゴールデンウィークを利用して、今年のつくばチャレンジに向けた準備を進めています。今日は台車(HPI E-Savage)に取り付けるDCモータにギアをとりつけてやろうと、ギアの穴を大きくする作業に取り組みましたが断念。ギアが硬すぎて穴が広がりません。

E-Savageには元々RS-550VC相当のモータが2個付いているのですが、つくばチャレンジで使用するにはモータの回転数が高すぎて低速度で制御しずらいので、田宮模型のDCギアードモータをつけてやろうと考えました。そして、DCギアードモータの反対側にはロータリーエンコーダをつけて速度制御をしてやろうという目論見です。取り付けるギアはHPIのサイトからE-Savageに合うものを探して日本橋模型から購入。この購入したギアが硬かったcrying 

旋盤を使ってもボール盤を使っても穴が大きくなる気配がなかったので、あきらめて千石でモジュール0.75の比較的大きさが近い平歯車を注文しました。注文したギアは穴が今回使用するギアードモータおよびロータリーエンコーダの軸径とおなじ6mmなので、加工せずに取り付けられると思います。

なんだかんだ言っても、このモータを回し始めるまでのところがロボット作りで一番時間がかかるような気がします。

« 2008年4月 | トップページ | 2008年6月 »

最近の写真