November 24, 2007

つくばチャレンジ

つくばチャレンジ2007について、各チームの提出したレポートからデータベースを作成しました。
センサ編
機体編



 そんなわけでー(どんなわけだ?)、つくばチャレンジに参戦してきましたー!
 結果はー


 ・
 ・
 ・

 3m
 orz
 予選落ち。

 いや、だってさ、予選金曜日ってひどくね?
 学部大学生は普通に授業あるっつの。授業切って来いって?(俺はそうしたけど)
 何人かメンバーが足りず、最終調整が不十分なまま望んだからこうなったんだ!!・・・って言い訳は所詮負け犬の遠吠えですよ。もっと前に最終調整ぐらい済ましとけっての。だいたい本番前に最終調整が必要な機体ってのは、「汎用性がない」ってワケで・・・はいはい。。

 後日、本大会の終了後に最後の試走会がありました。土曜日。この日はメンバーがそろっていたので、ちみちみと調整カマすと・・・動きました。

 あーうー。

 そのときの動画ですコレ。
 このとき、近距離を見る超音波センサは調整中でつけてません。GPSと方角センサのみで動かしてます。もしつけてたら詰まったところを回避できてたのかも。

--

GPSModule
 このロボットで自分が担当したのはナビシステムです。棒の先っちょにつけたGPSと、TDS01V方角センサを使って進む方向を算出してます。動作の流れとしては、GPSで測位してー→登録されたコース上のポイントと比較して絶対方角を算出してー→方角センサで機体の向きを見てー→先ほどの絶対方角と比較して相対方角を算出ー、といったかんじ。基本はこれですが、GPSは木や建物の陰に入ると容易くデータを間違えます。ここのところには独自の補正を入れてます。

 CPUはマイコンでアルファプロジェクトのSH/Tiny(SH7125)を使ってます。
 SH7125は、一番最初に書き込みができなくてハマった。SCIが3chもついてるもんだから(しかも複数のところから取れる)、「どれでもいーのかなー?」と思って適当なトコにつないだら、書き込みできな〜い!そこで、SH7125のハードウェアマニュアルを参照すると551pあたりに図があって、そこにさらっとSCI1につないで書いてある。文書中には一切書かれてなかったんだけど・・・。「図もちゃんと見ろ」と、そうですか。。そこでJ2の27,28ピン(PA14/RXD1,PA15/TXD1)とつなげてみてんだけど・・・「やっぱり書き込みできな〜い(;_;)」。もう一度ハードウェアマニュアルをなめるように見てみると・・・533pの「端子構成」のところに・・・TXD1(PA4),RXD1(PA3)とちょろっと書いてあるではないですか!!「表もちゃんと見ろ」とそうですか。。そんなわけで、J2の16,17につないでやっと書き込みできました。ハーヤレヤレ。
 そういえばSH7145なんですが、一番最初にクロックの設定をしなきゃ最高のパフォーマンスを発揮できないっぽい?具体的にはCPGレジスタの値です。注意。
 あと、どうしてもPOE.OCSR1.BIT.OSF1のビットが立ってしまうんですが、なんでしょうね?これ。ハードウェアマニュアルだと初期では0のハズなのに。。これが1のまんまだと、どっかのポート(MTU関連)がハイインピーダンス固定になってしまう(うろ覚え)。

 GPSなんですが、ストロベリー・リナックスさんの「高感度小型GPSモジュール」を使用しました。以前このブログで出した、「NMEAデータをGoogleMap上に表示する」というのは、このモジュールで取ったデータを使っています。8000円のGPSがいったいどれくらいの精度かというと・・・
GPS01
 こんなかんじで、なんだかとってもよく取れているのがお分かりいただけるかと思います♪注意事項としては、他の出場者でこのモジュールを使っている人とも話したんですが、ストロベリー・リナックスさんのウェブサイトに注意書きがあるとおり、「電気機器の近くでは正確な値が全然出ない」とのことです。また、「データが取れ始めてから正確な値が出てくるまで、少し時間がかかる(1分から5分まちまち)」なので、データが出るようになっても、少し置いておいたほうがいいです。(ちなみにこの図で明らかにズレている幾つかの値は、データ出力開始から1分以内のものです。PDOPの値もひどい。)ただ、データの確からしさは$GPGSAのPDOPの値で判断できるので、私はPDOPが4以上の値は無視するようにしました。
 ところで、このGPSモジュールなんですがUARTが送信と"受信"がついていて、何かコマンド受け取ってくれるのか?と思い、ネット上を探し回り、ようやくそれっぽいものをさぐりあてたのですが、この通りにコマンドを送っても反応してくれませんでした。

 方角センサには、秋月で売ってる3Dセンサーを使用しました。この前の記事で、「TDS01Vの説明書は間違いばっかり」と書きましたが、訂正します。間違いは2ヶ所だけです。ただし致命的でした。TDS01Vとはクロック同期式シリアル通信で通信するのですが(なんかこれも「それっぽいだけ」ってどっかのブログに書いてありましたが)、買ったときについてきた説明書の「TDS01V_Product Specifications_Ver100.pdf」と「TDS01V_Software_Devropment_Guide_Ver100.pdf」で、クロック同期の信号線が違う!!ProductのほうにSIが入力でSOが出力と書いてあります。こちらが正解。Softwareのほうはまるっきり逆です。あと、センサ情報項目の設定で「全センサ」とやったとき(これが一番使用頻度高いと思う)、出てくる項目の順番は「地磁気ベクトルデータX,Y,Z,方位角情報,加速度ベクトルデータX,Y,Z,傾斜角情報・・・の順です。や、方位角が加速度ベクトルデータの後だと思っていて、なんか値がヘンだな〜と思っていたのですが。。
 肝心な方角センサの精度について。このセンサは0.0°から360.0°までの値を小数点一桁まで出してくれますが、静置しても±3.0°くらいは平気でズレます。また、たまに30°くらいズレた値を返すときもあります。この辺は周辺回路の作り方で変わってくるのかもしれませんが。
 あと、電源を入れたら必ず最初に”ハードウェア”リセット(RESET端子に8MCLKサイクル以上Lレベル)をしなければなりません。「動かないよ〜」とか思ってる人はコレが原因かも。
 個人的には、設定でオフセットの角度を入れられるのが嬉しい機能でした。ロボットに実装するとき、どうしてもセンサが横向きになってしまうのですが、TDS01Vは初期設定で角度のオフセットを変更できるので、最初に設定しちゃえば後は出てきた値をそのまま使えます♪
 一部プログラムを公開すると、データの送受信部分はこんなかんじ
static _UBYTE xmit (_UBYTE dat){
	_UBYTE r=0;
	short i;
	while(!TDSINT);	// wait
	for(i=0;i<8;i++){
		TDSSCK = 0;
		TDSSI = (dat >> i)& 0x01; wait(WAITTIME); TDSSCK = 1;
		r |=(TDSSO << i); wait(WAITTIME);
	}
	TDSSI = 1;
	wait(WAITTIME*50);	// wait (必須:消したらダメになった)
	return r;
}

static _UBYTE recv (void){ return xmit(0xff); }
 waitはwhile(i--);の一番単純なパターン。WAITTIMEは48にしてます。
 これはCPUクロック48MHzのアルファプロジェクトのSH/Tinyでの値です。
 TDS01Vについては、新しく記事を書きました。

 とりあえず、つくばチャレンジについてはこんなところでしょうか。



トラックバックURL

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔   
 
 
 
現状報告
 KiCad解説本の重版が決定しました!ありがとうございます♪.(2016/12/10)

自己紹介
yoneken
logo
 ロボットの研究・開発をしています。

続きを読む

連絡先は
ad

Syndicate this site
 2012年からKiCad日本語版バイナリのメンテナもしています.
来てくれた人たち
  • 今日:
  • 昨日:
  • 累計:

ショップリンク
嬉しいコメント
記事について
 このブログ記事の著作権は全てyonekenに属します。
 転載や個別記事へのリンクはご自由にどうぞ。連絡は必要ありません。
 記事の内容は無保証です。古い記事の内容は当時と状況が変わっている場合があります。
 内容に関する質問はコメント欄でもらえると、他の人にも役立ちます。
記事検索
月別
リア友リンク