ロボットの最近のブログ記事

知能ロボコン

昨日、今日と仙台市知能ロボコンでした。今年は参加せずに運営側で。二日とも審判。

T-semiからはテクニカルコース準優勝(2年連続同じヒト)とベストパフォーマンス賞(Nice case. 誠shine☆)が出ました。始めて2ヶ月の1年生チームが1次予選を高得点で通過したことも記しておきます。

ビデオはそのうち適当に編集します。

NHKロボコン2008

| コメント(2)

昨日はNHK大学ロボコンでした。

T-semiは予選リーグにおいて、岐阜大学には勝利したものの三重大学の自動マシンに完膚なきまでに叩きのめされ、残念ながら一回戦敗退と相成りました。

会場裏で話してた事を忘れないようにメモしておきます。

  • モータをケチったらダメだよね。最低でも540。
  • 相手の妨害をものともしない自動マシンをつくらないとダメだよね。
  • じゃあ画像処理とか空飛ぶとかロードローラー……
  • 大学の支援があるところはいいなあ……

T-semiは知能ロボコンに慣れすぎたせいか、作戦に詰めが甘い(敵がどう動くかをあまり考えない)のではないか、と感じる試合でした。

何はともあれ出場者および制作スタッフの皆様おつかれさまでした。来年も頑張ってください。

まずは再来週の知能ロボコンをがんばりましょうかー。私はたぶんスタッフですけど。

cortex-m3用のコンパイルが通ったってだけの話。相変わらずMac用。

まだ書き込みテストしてないから動くかどうかはわかりません。とりあえずFT2232は買った。

ディレクトリ作る

mkdir ~/arc
mkdir ~/work

インストール先も作る

sudo mkdir /usr/local/cross/arm

パスを通しておく

~/.profile に
export PATH=/usr/local/cross/arm/bin:$PATH
を追加
source ~/.profile

~/arcにファイル持ってくる

  • binutils-2.17.tar.bz2(binutils-2.18はなぜかコンパイルが通らない……)
  • gcc-4.3.0.tar.bz2(cortex-m3対応は4.3から)
  • newlib-1.16.0.tar.gz

展開

cd ~/work
tar -jxvf ../arc/binutils-2.17.tar.bz2
tar -jxvf ../arc/gcc-4.3.0.tar.bz2
tar -zxvf ../arc/newlib-1.16.0.tar.gz

newlibをgccと一緒にmakeするためにリンクを張る、らしい

ln -s newlib-1.16.0/newlib gcc-4.3.0/

まずbinutils作る

mkdir arm-binutils
cd arm-binutils
../binutils-2.17/configure --target=arm-elf --prefix=/usr/local/cross/arm
make
sudo make install

GCCつくる

cd ~/work
mkdir arm-gcc

GMPとMPFRが必要らしいのでMacportで入れる

sudo port install gmp
sudo port install mpfr

cd arm-gcc
LDFLAGS="-L/usr/lib" ../gcc-4.3.0/configure --prefix=/usr/local/cross/arm --target=arm-elf --enable-languages=c --with-newlib --with-gmp=/opt/local --with-mpfr=/opt/local --with-float=soft

CFLAGS_FOR_TARGET="-mcpu=cortex-m3 -mthumb -O2 -msoft-float" LIBCFLAGS_FOR_TARGET="-mcpu=cortex-m3 -mthumb -O2 -msoft-float"

sudo make install

ARMv7 Cortex-M3 Projectsの LED Blink Example for STM32F103 はMakeできた。(要:makefileでarm-hogehoge-gccの書き換え)

OpenOCD使うのにGDBいるよね。とりあえず6.8入れる。

configure --target=arm-elf
make CFLAGS="-w"

つかれた…

とりあえず買ってきてUSBつないでみた。

/dev/tty.usbmodem1d11 でシリアルポートとして認識。GAINERもそのまま起動。FireFoxでカエルのゲームは動きました(Safariだとなぜか動かなかったけど)

さてこれからプログラム環境の構築です……JTAG要るかなぁ

ろぼこん

| コメント(2)

仙台市知能ロボコンでした.

[短作]

メカトロで遊ぶ会賞を頂いてしまいました.

来年はもっとちゃんと動くもので行きたいです.

日産、「攻殻機動隊S.A.C. meets NISSAN」展を開催。下の方にタチコマが。

……脚車輪じゃないのにタチコマを名乗るとは笑止千万。味噌汁で顔洗って(ry

D・V・D!

| コメント(6)

先日のロボコンの動画をまとめてDVDとか作ってみました(やっつけ)。エンコに一晩かかった。

……ディスクイメージはできたがブランクメディアがない件について…… (・c_・`)

インプレスの件

| コメント(1)

知能ロボットコンテスト・フェスティバル2006開催[impress watch].

T-semi露出大杉。私もさりげなーく写ってるようです。

週末(24,25)は仙台市知能ロボコンでした。

今年は運営スタッフ側に回って二日連続審判とかしてました。いろいろとヤッチャッタけどどうにかこうにか。終わった後に中野先生から「気遣いがあって競技者がやりやすかった」とのお言葉を頂いたので報われました。

T-semiとしては受賞者3人。二日目進出とかデモとかを考えればまあまあかな、と。技術レベルの二極化が進んでる気もします。

とりあえず来年は参加者側に回りたいです。

すとろべりーりなっくすのえすえっちつーとまっきんとっしゅでしりあるつうしんをしたいです。ぼーれーとは230400がもくひょうだけどとりあえず38400です。

  • Mac - H8, 秋月SH2 : OK
  • Win - SBL SH2 : OK
  • Mac - SBL SH2 : NG

( ゚д゚) (つд⊂)ゴシゴシ ( ゚д゚)ポカーン

えすえっちがわのぼーれーとはりろんじょうごさがないはずです。まっくのしりあるはえふてぃーでぃーあいのちっぷをつかっています。さいしんのどらいばでもむかしのどらいばでもおなじけっかでした。

[mをおすと?とかoとかでる]

ぼく、mしかおしてないのに。

書いてたあらゆるファイルが消失したので一から書き直し。やる気もかなり失せてるのでプロンプト周りとかかなりいい加減……

メモリ定義に絶対指定で書いてたのが違うところに配置されてました。どうにかしてください。

また消えるとヤだから上げるだけ上げとく

某ナベ(全国のワタナベさんの大半はこの略称で呼ばれるらしいですが)の日記見て((((;゚Д゚))) 仙台市知能ロボコンのルール改正ですが……

観戦者およびスタッフの安全確保を重視していただきます。制御の効いていない飛び道具、レーザー、極端に高輝度のLEDなどを禁止します。事前審査などは行いませんが、装備の危険性を実行委員会で確認した場合、競技に不可欠なものであっても機能の使用をその場で禁じます。

……全部T-semiじゃね? むしろ暗黙に名指しwwwうぇwwwww

これが勝利の鍵だ!>4月頃にはロボットが動きそうな工程表

だそーで。ファイナルフュージョンとかシンメトリカルドッキングとかするロボット作らなきゃダメですかね。まだアイディア出しも終わってないんですが。今年もソロ出場かしら……

ロボコン終了

| コメント(1)

例によって0点。前日の夜から足回りがヘンなんですもの (ノ∀`)

それでも75%くらいの確率で動いてたのが本番では25%に。確率論で動くロボットはどうかと思った。

仙台市知能ロボコンまで1ヶ月を切りました。とりあえずガワとモータドライバとマイコンは動くので走るだけなら走るはずですが、ラインセンサ作ってません。部品もないし作るの面倒です。

……ラインセンサがなければカメラを使えばいいじゃない (・∀・)

Treva互換のDMR-C1。SH2+ノーウェイト1MBメモリならクロック送るだけで何も考えないで取り込めます。先人に感謝です。

回路作ってデータ吐かせるのに1時間。データ読むポート間違えて悩むこと2時間。Mac用クライアントソフト作るのに5時間。変数の初期化は大事です。

撮影に2〜8秒かかるのは仕方ないとして(読み出し部をインライン展開すれば速くできそうだが)、Macにデータ転送するのに30秒かかるのは正直耐え難いですな。RS-232Cの115200bpsが悪いんです。だれかUSBにしてください。

IOポートがなんかおかしいので配線引っこ抜いたらグランドとリセットの線をつなぎ忘れてたことが発覚しました。GNDは信号線の上から被せるように配線しないとダメなので保留にしてたのをすっかり忘れてたようですがなんでリセット繋がってないの……?

IOの48本と上記2本、計50本を配線してとりあえずもうマザーボードにコテは当てなくて済みそうです。

モニタの方はサービスルーチンを全部アセンブラにしてみました。コンパイラが吐いたオブジェクトを逆アセンブルして貼付けただけですが。リンクするオブジェクトが減ったので満足です。

SH2のモニタがヘンだったんです。シリアルで "hello" と1回送信するだけのプログラムなのに……

[hell, hello]

hellhellhell...地獄を見ました。文字通り。

ユーザプログラム起動スイッチをモニタLED出力ポートに切り替えて使ってるわけですが、プログラム終了して入力端子になった瞬間に自分が出力してた信号を読んでループしてたらしいです。 orz

関数ポインタがよくわからないままSH2のモニタが動きそうです。

0xfffff158に格納されてるアドレスの関数を呼び出したいだけなのに。

const void (*intproc)() = (void (*)())(void *)(* (volatile unsigned long *)0xfffff158);
intproc();

アセンブラで書いた方が早そう。

CPLDの書き込みも終わったので(電源全部繋がないと動かなかった)、いよいよ地獄のバス配線です。といっても精々60本。

printf, malloc, heap...

| コメント(1)

heapを設定しないでprintf使ってた。bssに置かれて0になってるならROM領域にかぶって動かない筈なんだが……ドウナッテルンダロウ

で、その部分を直したら一文字も受信できなくなった。誰か助けてください。

どんどん見当違いの方向に突き進んでる気がするが、メモ。

.ctors
プログラムのグローバルコンストラクタ関数へのポインタの配列を保持する
.dtors
プログラムのグローバルデストラクタ関数へのポインタの配列を保持する

gccはmain()関数の前に、無条件で__main()関数を呼び出す。これはlibgccで定義され、.torsセクションを設定している。

これはC++を利用しない場合には意味を持たない。そこで、空の__main()関数を自作して置き換えることができる。これに伴い、リンカスクリプト内の.torsセクションも削除して構わない。

56/25/49

| トラックバック(1)

シリアル受信が56文字目に達すると割り込みから復帰できなかった。リングバッファの開始位置を50にしたら6文字目で止まった。

バッファサイズを32にしてみたら1文字も受信できなくなった。

スタックポインタの設定を思いっきり勘違いしてスタックがデータ領域にめり込んでるのを発見した。そこを直したら49文字目で止まるようになった。25文字目の時にはデータの取りこぼしがあるようだった。

自前で書いた関数の中にポート出力入れて確認したら関数のリターンに失敗してるらしかった。#pragma interrupt で書いてるからその部分はgccが勝手に生成してるわけで……ドウスレバイイノ?

そんなわけで49,000行くらいある逆アセンブルコードを眺めて途方に暮れて日も暮れた。明日は最小限のシリアル関連だけ書いて実験してみようと思った。FlashROMの書き換え回数内に終わるといいなあと思いました。保証だと100回なのであと半分くらいです。

動き始める何か

gdbは相変わらず動かないけれど。ようやくスタートラインが見えるくらいまでは進んだ。気がする。

スタートアップルーチンで遅延分岐なんぞすっかり忘れてトンデモな所に飛んでた模様。東京工業高専のページの解説でどうにかなった。

シリアル送受信の割込でターミナル通信が可能になったのでデバッグが始められそうです。とりあえず割込の登録するときはマスクしてから優先度設定しないとダメっぽい。気がする。

……そろそろ半田ゴテと格闘を始めねばならぬようですな。

リファラ見てるとH8のページ目指して飛んでくる人がいるようなので残しておきます。

H8 writer

| トラックバック(1)

Open H8 writerを改造したのを置いときます。-3672と -3694 を追加したのとエラー処理を少々追記。

h8write.c。頭のほうの #ifdef FreeBSD の下にある RSLINE の定義を環境に合わせて書き換えておきましょう。

cc -o h8write h8write.c

できたファイルは /usr/bin あたりに放り込んで chmod 755 を忘れずに。

SH-gcc on Mac OS X

| コメント(3)

途中まではH8用と同じなので H8-gcc on Mac OS X を参照。展開( ln -s ../newlib-hogehoge) まで終わらせる。H8用のを作ってある場合はそのままで良い。

~/.bash_profile に次の行を追加

export PATH=/usr/local/cross/sh/bin:$PATH

で、source ~/.bash_profile で読み込む。

binutils構築。

cd ~/cross/work
mkdir sh-binutils
cd sh-binutils
../binutils-2.15/configure --prefix=/usr/local/cross/sh --program-prefix=sh-coff-hms- --target=sh-coff-hms
make CFLAGS="-O2" all
sudo make install

gcc。

cd ~/cross/work
mkdir sh-gcc
cd sh-gcc
../gcc-3.4.3/configure --prefix=/usr/local/cross/sh --program-prefix=sh-coff-hms- --target=sh-coff-hms --with-newlib
make CFLAGS="-O2" all
sudo make install

sh-coff-hms-gcc -v でバージョン情報が表示されれば完了。

Mac OS X 10.3.8, Xcode 1.1。

作業用ディレクトリとして ~/cross/arc/ と ~/cross/work/ を用意。

インストールディレクトリとして /usr/local/cross/h8/ を想定。適宜読み替えるべし。

下準備としてあらかじめパスを通しておく。~/.bash_profile を編集。次の行を追加。

export PATH=/usr/local/cross/h8/bin:$PATH

source ~/.bash_profile で読み込んどく。

以下のファイルをダウンロード。最新版はリリースでも動かないものがたまにあるので動作確認したバージョンも書いとく。~/cross/arc/ に放り込む。

別にtar.gzでもtar.bz2でもいいんだけど。bz2のほうが軽いっぽい。で、展開。

cd ~/cross/arc
bzip2 -d binutils-2.15.tar.bz2
bzip2 -d gcc-core-3.4.3.tar.bz2
cd ../work
tar -xf ../arc/binutils-2.15.tar
tar -xf ../arc/gcc-core-3.4.3.tar
tar -zxf ../arc/newlib-1.13.0.tar.gz
cd gcc-3.4.3/
ln -s ../newlib-1.13.0/newlib .

まずはbinutilsを構築。

cd ~/cross/work
mkdir h8-binutils
cd h8-binutils
../binutils-2.15/configure--prefix=/usr/local/cross/h8 --program-prefix=h8300-hms- --target=h8300-hms
make CC='cc -no-cpp-precomp' CFLAGS="-O2 -fomit-frame-pointer" all
sudo make install

続いてgcc。

cd ~/cross/work
mkdir h8-gcc
cd h8-gcc
../gcc-3.4.3/configure --prefix=/usr/local/cross/h8 --program-prefix=h8300-hms- --target=h8300-hms --with-newlib
make CC='cc -no-cpp-precomp' CFLAGS="-O2 -fomit-frame-pointer" all
sudo make install

h8300-hms-gcc -v でバージョン情報が表示されれば完了。

gdb-6.3はintl(国際化なんとか)がファイル群から外されたためNON-GNUなシステムではコンパイルできないそうな。なにそれ。そんなわけで6.2.1をsh-coff-hms用に作ってみた。

……シミュレータがスタートアップルーチンの最初でバスエラー起こして止まる。なにそれ。んで正常動作する(はずの)プログラムをシミュレータにかけたら同じところで落ちた。なにそれ。リンカスクリプトに独自のモノを使うとダメとか書いてあるページもあるんです。なにそれ。

とりあえずobjdumpで逆アセンブルして眺めてみたら最初に設定したはずのアドレスが㌧㌦。スタートアップルーチンの .align 指定がなかった。warning出てたのはこれか。ほかにもいろいろと凡ミスしてますよ。なにそれ。

まだSH2が動かない。昨日の時点でわかったことは単純なポート出力のプログラムも動いていないことくらい orz

gdbでも使ってみようかと思ったがコンパイルが通らないので窓から投げ捨てた。

objdumpで逆アセンブルしてみたら割込ベクタが全部スタートに飛んでた。よく見たらリンカスクリプトで定義してる関数と実装してる関数の名前が違ってた。ポート出力もできないのには関係ないと思うが(これで直ったらいいなあ……今日は実機触ってないのでなんとも)、この調子じゃ動くまでにかなり時間がかかると思った。

愚痴っぽい今日この頃。

SH2用のモニタが動かないんです。よく見たら関数書くだけ書いて呼び出してないんです。ちょっと吊ってくる。

スイッチ監視部分どう書いてるのかわからなくて既存のモニタのソースを見たら……コメントしか書いてない……もしや実装されてないんですか (・∀・) ? H8モニタの方は文字入力関数の中でスイッチ監視という荒技のようです。スマートとは言いたくありませんが確実な方法ですな。どーせ使わないNMI割り込み使うってのもアリですがどっちが良いのかしら……?

勧誘用のビラとか作る時期です。とりあえずはんだごてとか箱っぽいのとか。今年は日替わりとか無茶なことはやめようと思った。

このアーカイブについて

このページには、過去に書かれたブログ記事のうちロボットカテゴリに属しているものが含まれています。

前のカテゴリはネタです。

次のカテゴリは日記です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。