ユビキタス鉄道模型
赤外線リモコン戦車
レーザ・グラフィックス
USB加速度センサマウス
ビジョンシステム
リアルタイムOS
LCD表示パネル
相撲ロボット
├ ハードウェアについて
├ プログラムの説明
└ プログラム作成の注意点
多自由度ロボット
 開発事例 TOPへ
 HOMEへ
イエローナビ
 ページTOPへ
 開発事例 TOPへ
 HOMEへ
YellowSoft.com
製品紹介 Q&A ダウンロード 開発事例 ユーザ ご購入 価格表 お問合せ
 相撲ロボット


  相撲ロボット「リンパオスA」の開発
    大内 孝司


  プログラム作成時の注意点

相撲ロボットのプログラムを作成する際に、私はソースファイル自体が良いドキュメントになるように心がけています。年に一回の大会が迫ってから前年のプログラムを見るのですが、この程度のプログラム量でもほとんど完璧に内容は忘れています。ソースだけで内容を思い出せるよう、見やすく、かつ、ドキュメントとしての価値を高めるようにしています。

具体的に心がけていることとしては、

1. ITUなど周辺機能の各レジスタごとに構造体(ビットフィールド)を宣言し、各フィールド名はハードウェアマニュアルに記載されている信号名称にあわせる(購入時にH8/3048F全レジスタのビットフィールドが定義されたヘッダファイルが付属していると大変うれしいんですけどね>イエローソフト様)
2. 定数は数字をそのまま書かずに、マクロ定義で意味のある単語にしてプログラムに記述する
3. (複合)代入演算子を使わない
これは普段Pascal(Delphi)を使っているためです。
4. 各関数にヘッダとして、その関数の機能概要と引数の説明、戻り値の説明を記載する
5. 基本的にソースの一行一行に簡単な(全角12文字以内を目安)コメントをつける
「ソースを見れば明らかな箇所にはコメントをつけるべきではない」と先日立ち読みした本には書いてありましたが、そんなことは一切気にしないで書きまくります。逆に「ソースは全然見なくても、コメントだけ見れば内容が分かる」ようにしています。

ということで、見ていただければ分かるとおり、かなりコメントのうるさいソースになっています。


  デバッグの方法

基本は「ロボットを実際に動かしてみる」というやり方で進めました。と言っても、プログラム全部を作ってから動かしたのでは訳が分からなくなってしまいます。そこで、デバッグ対象となる関数のみを実行するテストプログラムを作成し、関数単独で実際に動作させて完成度を上げていきました。特にPWM関連はオシロスコープ等で想定した出力波形になっているか確認しながらやっていく方がよいと思います。

白線検知関数のように入力状態で処理が異なるものは、各部にputs文でメッセージを埋め込んで、分岐先をパソコン側で表示し確認を進めました。

今回のデバッグではほとんど必要ありませんでしたが、内部変数の値が知りたい場合は、printfを使うことになります。しかし、printfを使うと、オブジェクトファイルのサイズがputs使用時に比べ大きくなり、デバッグボードへの転送時間も長くなるため、なるべく使わないようにしていました。

いずれにしても、私のデバッグ方法ではプログラムの「作成・修正→コンパイル→転送→実行・デバッグ」を何回も繰り返すことになります。H8/3048FのフラッシュROM書き換え回数Max値は100回ですから、毎回ROM書き換えをしたのではこの回数を越えてしまう可能性があります。デバッグボードを使用することで、RAMへの転送でデバッグをおこなえるため、書き換え回数を気にすることなく作業を進めることができました。


  おわりに

つい先日、私の在住県でロボット相撲に取り組んでいる人たちの練習会に参加しました(NRSCの皆さん、お世話になりました)。

そのレベルの高さにうちのロボットは全く歯が立たない状態でした。より強く、多彩な攻撃パターンをもつ相撲ロボットを目指し、今後も色々な面から取り組んでいきたいと思っています。



← プログラムの説明 4/4