« 2008年7月 | トップページ | 2008年9月 »

2008年8月30日 (土)

V2Xeのheadingデータが飛んでしまう

ようやくデジタルコンパスモジュールV2Xeをコントロールできるようになったのですが、それでもまだ未解決の問題があります。それは、コンパスモジュールをゆっくり動かしても特定の方位で heading データの値が不連続に変化することです。

具体的には、
Xc = -.126, Yc =  .603, head = 129.0, m =  .616, t = 40.5, d = 1, sts = 0
Xc = -.158, Yc =  .619, head = 255.6, m =  .639, t = 37.1, d = 1, sts = 0
こんな感じで、コンパスモジュールをゆっくり動かしているにもかかわらず heading の値が不連続になってしまっています。ちなみに、Xc, Yc はキャリブレーション済みの磁気センサの値で、このXc, Ycを使ってV2Xe内部でコンパスの向きを計算しています。

きゃりぶレーションが下手なのか、電源ケーブルのせいなのか、はたまた私の部屋に変な磁界があるのか。疑ってみましたがどれも白っぽい。そんな中でPNI社のV2Xe サポートページで次のような記述を見かけました。

  • Heading Angle = θ
  • θ  = arctan (Y/X)

で、先ほどのheadingデータが不連続なときのXc, Yc の値は不連続ではなさそうなので、-π~πまでを出力範囲にするために atan2 を使えば連続した headingデータを求められるのではないか、と。いうことで、Excelで計算してみた結果は次の通り。

Xc      Yc      head(rad)      head(deg)
-------------------------------------------
-0.126    0.603    1.776787663    101.8024342
-0.158    0.619    1.820710409    104.3190222

なんだかよさそうです。

そこでPIC上でこの計算をしてやろうと思ったのですがCCS-PCMにはatan2関数がありません。じゃあ自分で作ったろかと思ってやり始めたのですが、atan関数を使おうとするとメモリが足りず、多項式を使ったやり方では計算に時間がかかり過ぎるということで、PIC側でatan2計算するのをあきらめました。 コンパスデータを受け取るPC側で計算すればいいかな。

2008年8月29日 (金)

Maxonからモータが届いた

7/6の日記で書いた座布団が乗り越えられない件。ロボットの全備重量を最大6kg、走行速度を4km/hと仮定してトルクを見積もってみると、障害物を乗り越えられるだけのトルクがなさそうだという結論になりました。そこでギア比を大きくすることを検討していたのですが、適度なギア比のギアやギアヘッドが見つからず、Maxonモータに手を出してしまいました。φ35mm、グラファイトブラシ、90Wのモータで、ギアヘッドなしでなんとか6kgの負荷を乗せて4km/hで走れるだろうという計算です。

で、お盆休み直前に注文したモータが昨日(8/27)届いて、今日はモータを台車に据え付ける板の設計をしました。購入したのは、型番で言うと273753です。安定化電源や電池でモータ単体を回してみた感想ですが、すごく静かでスムーズに回ります。驚いたことに、単4乾電池1本でモータが回り始めるのです! RS-550モータじゃあピクリともしないのに。 低速域での速度制御でもかなり期待できそうです。

2008年8月26日 (火)

コンパスモジュールがとりあえずできた

お盆休み前からずっとかかりっぱなしだったコンパスモジュール。昨晩ようやくプログラムを書きあげて、簡単なテストをして、すごく簡単な取扱説明書を書いて、(つくばチャレンジ参加を手伝ってくれている)マヒソンさんにリリースできました。まだハード的に問題があるっちゃあるのですが、致命的ではないし、走行中にトラブルを引き起こすものでもないので放置します。

デジタルコンパスモジュールにV2Xeを使用し、PIC16F876Aを使用して、CSS-PCMでプログラムを書きました。V2XeとのSPI通信ができるようになるまでかなり長い時間を要しましたが、とりあえず動くようになってホッとしています。

今週末は会社のグラウンドを使って走行実験をしたいので、それに間に合うよういろいろ仕込みをする予定。来週末の第2回目の試走会になんとか間に合わせたいと思っています。

2008年8月23日 (土)

V2XeとPICとCCS-PCMで一苦労

お盆休み前からずっとデジタルコンパスモジュールと格闘中ですが、今日はだいぶ進歩がありました。昨日、今年のつくばチャレンジ参加を手伝ってくれているマヒソンさんからV2Xeを使ったサンプルソースコード(PIC18用、HI-TECH C使用)をもらい、今日はV2Xeのモジュール情報とバージョン情報を読み出すところまで成功しています。

わかったことをメモしておくと、そのもらったソースコードでは、起動時にV2Xeの内部バッファをクリアするためにSYNC端子をLow -> High -> Low するとき、待ち時間として 200ms 程度置いていました。私は 20ms 程度もおけば十分だろうと思っていたのですが一桁違った。 待ち時間を 200ms にしてからは、SPIの同期クロックSCLKを1.25MHz (=20MHz/16) に設定して通信できています。

さら気づいたことがあります。V2Xeが返すデータのfloatのフォーマットは IEEE Std 754-1985.に従っているのですが、CCS-PCM の float はフォーマットが違います。コンパイラのリファレンスマニュアルの Common Questions and Answers を見てわかりました。 これが違うのに気づかず、heading情報を読み出しても temperature情報を読み出してもな~んかおかしいので、すごく困っていました。どこまで変なコンパイラ何だ、CCS-PCMは!

HI-TECH Cもインストールしてちょっとだけ試してみたのですが、Vistaにインストールした場合は作業中に100%の確率でMPLABごとプログラムが落ちるのでNG。XPにインストールしたほうでは printf の可変引数あたりでコンパイルエラーがでて解決に時間がかかりそうだったので断念しました。とりあえず今回は時間が無いので我慢してCCS-PCMを使いますが、後で時間を作ってHI-TECH Cを使えるようにしておきたいと思っています。

2008年8月15日 (金)

PICとV2Xe間のSPI通信で悩む

今日もデジタルコンパスモジュールの続きです。これがデッドレコニングを行う上でかな~り重要なデバイスなので後回しにできません。そして今日の問題点は、PICからV2Xeにすごく簡単なコマンドを投げても何のレスポンスも返ってこないこと。

PICからSPI通信で出ていく波形を見てみると、確かにSCKのクロックに合わせてSDOからV2XeのSYNC Charactorに相当する0xAA (二進数で書けば10101010)が出ているのですが、これがよくないのではないかと疑っています。というのは、SDOのレベルがSCKの立ち上がりに合わせて変化しているからです。V2Xeのデータシートのpage 18にあるFigure 1 を見るとクロックの立下りでマスターからのデータが変化するので、PIC側ではSDOのレベルがSCKの立下りで変化してほしいのですが・・・。

そういう設定をするにはどうしたらいいか、CCS-PCMコンパイラの setup_spi関数の説明を読んだのですが、クロックに関してはSPI_L_TO_H、SPI_H_TO_Lという設定があるだけで、これでは特殊レジスタSSPSTATのbit6(CKE)で立下りエッジの指定ができません。それじゃ困るので、C言語のソースコード中に#ASMでも使ってアセンブラで直接命令を書いてしまおうかと考えています。

2008年8月14日 (木)

解せないが動いている

引き続き、デジタルコンパスモジュールの話です。

電源の問題が解決したのですが、それでもまだセラロックが発振してくれません。試しに外から5Vを供給してやったらデバッグ用にPICのポートから制御できるようにつけておいたLEDが光ったのでいい感じ。と思いきや、まだなんか変。回路図をよく見たらPIC16F876Aの1番ピン(~MCLR/VPP/THV)がNo connectionになっていて、これだと1番ピンが状態不定でLowに落ちたらPICにリセットがかかるので、これをVccに直結。それでもまだ駄目。

リセットを疑ったついでに、ブラウンアウトリセットも疑ってみました。PIC16F87Xのデータシートによるとブラウンアウト電圧VBORは3.65~4.35Vと書いてあります。で、今私が作った回路の電源電圧はVcc=3.3V。ビンゴ? ということで、プログラム上でブラウンアウトリセットを使用しないよう設定してプログラムを焼き直してみたところ、まだセラロックが発振せず、デバッグ用LEDも点滅してくれません。これでもダメか・・・と思ったのですが、なぜかシリアル通信で吐き出させている"Hello, world"の文字列はちゃんとPCに届いている。意味が分からない! PICはちゃんと動いているぞ?

LEDが点滅していない理由はつないでいるポートが間違っていたってことですぐに判明。でもオシロスコープで見てもセラロックから正弦波が出ていないのがすごく気になります。昔作った5V電源、PIC16F84Aの回路ではセラロックがきれいな正弦波を出しているのに。

いいのかこれで?

電源の振動

昨日から夏休みモードに入り、地磁気センサを用いたデジタルコンパスモジュール作りを進めています。そして今日学んだこと。「3端子レギュレータを使った電源の出力はちゃんと見ておこう。」

デジタルコンパスにはV2Xeというモジュールを使用しており、これに必要な電源電圧が3.3Vなので先日秋月に行ったときに買ってきたTA48M033F(3.3V,500mA)を使用しました。そしてあまり深いことを考えずに回路を組んで、PICにプログラムを書き込んで作った回路に差し込んでみたけれどうんともすんとも言わない。あれこれ探ってみたところ、20MHzのセラロックの発振波形が正弦波になっていない上にバラつきが多いことが判明。さらに、セラロックより前の3端子レギュレータの出力が発振してしまっていることが判明しました。デジタルオシロ活躍してます。

今まで5V用の3端子レギュレータを使って発振したことが無かったのですが、自分で書いた回路図をよく見直してみると発振防止用のデカップリングコンデンサ(100uFの電解コンデンサ)がレギュレータの出力側ではなくて入力側に入っているではありませんか。あん?これ意味なくね? ということで、3端子レギュレータの出力側に100uFの電解コンデンサを追加したところ、見事にフラットな出力になりました。ちなみに、10uF程度でもだいぶフラットになりましたが、100uFの方がはるかにきれいな出力だったので100uFにしました。

まとめです。

  1. プログラムを疑う前に電源回路が正しく動作しているか確認しましょう。
  2. 正しく動作しているかどうか、オシロスコープを使って目で見て確認しましょう。
  3. 電源発振防止用のコンデンサは出力側に配置しましょう。

2008年8月 3日 (日)

つくばチャレンジ2008合同試走会、視察会、説明会メモ

<< つくばチャレンジ2008合同試走会、視察会、説明会メモ >>

日時    2008年8月3日(日)    9:30 - 17:00
場所    つくばエキスポセンター(試走会説明)
    つくば公園通り(コース)
    筑波大学春日キャンパス講堂(説明会)

参加者数 39チーム(人数不明)

■ 試走会事前説明(ニューテクノロジー振興財団 田代さん)

 昨年は比較的人通りの少ない直線的な遊歩道をコースに選んだが、今年は昨年のレベルではクリアできないコース設定にした。昨年は33チーム参加。今年は50チーム。昨年から継続参加しているチームは21チーム。新しく参加されたチームが29チーム。そのうち25チームが大学の研究室から。
 今日の試走会では100mの区間のみ走行可能。PCを持ってデータ収集する分には全コースを使ってよい。夏休みの日曜日で子供たちが多いので、通行の妨げにならないよう気を付けてください。
 今年は安全管理責任者を各チームから出してもらうようにした。昨年は大会事務局の責任で安全管理責任者を確保したが、今年は50チームもあるので事務局では確保できない。安全管理責任者の役割は配布した資料にあるとおり、「ロボットの方ではなく、周りの歩行者や自転車に注意を向ける」こと。安全管理責任者が休憩するときはチーム全体で休憩をとってください。

■ コース説明

http://maps.google.co.jp/maps/ms?hl=ja&gl=jp&ie=UTF8&oe=UTF8&msa=0&msid=116403371100126198293.0004538fef08e5ca759a0

 スタートライン兼ゴールラインはつくばエキスポセンターの入口にある白いタイルの二重線になっている部分。そこからスタートしてエキスポセンターの出入り口を左に折れ、もう少し進んで右に曲がったくらいのところまでの100mをトライアル区間とする。コースは遊歩道の東側半分を使用し、原則としてロボットはキープレフトで走行すること。遊歩道の中央にはコーンを立てる予定。これは通行人に注意を促すために立てるコーンなので、コーンを置く幅がどうなるか分からない。
 トライアル区間終了後もう少し直進すると茨城県つくば美術館前を通る。ここは自転車の駐輪マナーが悪いので注意が必要。つくば美術館前を過ぎると次は中央通りを越える陸橋がある。昨年のコースのような段差は無いが、多少の斜度はある。陸橋を越えた後はプランタを挿んで一方通行とし、最後のプランタで折り返す。折り返し地点にはマラソン用に使われる大きなコーンを立てる予定。
 折り返し後はエキスポセンターまで戻り、エキスポセンターの出入り口の前を通り過ぎてから最終コーナーをまわる。ここにも大きなコーンを立てる予定。最終コーナーを折り返したらエキスポセンターの出入り口から入り、スタートラインと同じラインを越えた時点でゴールとする。ゴール後走り続けるとエキスポセンターの階段にぶつかってしまうので、ゴール後は止まったほうがスマートに見えるだろう。

■ つくばチャレンジ2008説明会

(挨拶:筑波大 油田先生)
 つくばチャレンジも今年で2年目。試走会は9月からでもいいと思っていたが、本番のコースを見たほうがやる気が出るし、8月いっぱいはいろいろと考える時間を確保してもらいたいので、事務局に無理をお願いして8月に試走会ができるよう警察に道路使用許可をもらった。以前は大会の回数が進むと共にコースを長くしていくことを考えていたが、あまり長いと安全管理が難しくなるので、今年は距離をそのままにして難易度を上げるようにした。

(各チーム自己紹介)

(つくばチャレンジの趣旨:筑波大 油田先生)
 つくばチャレンジの趣旨は配布した資料にあるとおり。この資料は基本的には2007年のものと同じで、少々のアップデートがある程度。趣旨を簡単にいえば、自律移動ロボットの課題をうまく切り出して技術チャレンジを行うことで、社会に受け入れられるよう技術を育てていくことを狙っている。
 2008年度の課題について。コースはすでに下見してもらった通り。自律というのは、ここではロボットに対する操作を行わないことを意味する。オペレーションはスタート地点でスタートボタンを押すだけ。スタート前にデータ入力を行うのは良しとする。今年の課題を設定したときはコースとして歩道全体を使うつもりでいたが、警察の指示で歩道の東側半分になったのでコース幅が最初の想定より狭くなった。ロボット同士のすれ違いや追い越しについてはレギュレーションを考え直す必要がある。昨年は後発のロボットに追い付かれたらオペレータが手動でロボットを一度止めて道を譲ったが、今年はキープレフトで追い越してほしい。できれば後ろから追いつかれたロボット自身が道を譲れればベスト。
 最低順守事項について。昨年と比較すると[オペレータの随走][安全管理責任者] についてupdateした。

(注意事項)
 当日の運用については配布資料を参照。参加チームの数が確定したのでスケジュールを出せた。本走行出走台数が多くなると、本走行のスケジュールが押すかもしれない。
 ロボットナンバーについて。昨年は、どのロボットがどこを走っているのか運営側が把握できず、完走したロボットがどこのロボットだったかも把握できなかった。そこで今年はナンバー制を導入する。ナンバーはエントリー番号と同じ数字にする。9/7の試走会以降、ロボットにはナンバープレートを付けること。

(情報公開:芝浦工大 水川先生)
 素晴らしい技術をみんなのものにしたい。できれば、相互利用可能な形で。昨年はシンポジウムを開催して、各チームにはレポートを書いてもらってつくばチャレンジのホームページで公開した。この参加レポートをちゃんと書いておくと、他の人がそのアイデアを使おうと思ったとき、論文や学会発表等で refer しやすくなる。

(つくば市の狙い)
 つくばチャレンジはメディアからも注目を浴びているので、地域産業振興の目玉にしていきたい。つくば市がロボットの実証実験の場となることでロボット関連企業が集まってくれることを期待している。

« 2008年7月 | トップページ | 2008年9月 »

最近の写真