こんにちは。haraです。
前回の投稿から間がいてしまいましたが、前回はPi:Co Classic3を組み立て、サンプルプログラムを実行してハードウェアの動作チェックまで行いました。
Step7までのサンプルプログラムを実行した結果を見ると、組付けたセンサとモータなどは動いているようです。
しかし、Pi:Coの組立中は、最終的にセンサの精度がどうなるかなどは考えずサクサク進めてしまったので、取り敢えず、現状でどのくらい動くのかチェックする必要があります。
サンプルプログラムのStep8とStep9に、迷路走行のプログラム(左手法と足立法)が実装されていました。
ゴールが壁に接した場所に設定した迷路であれば左手法で走破可能なはずです。
ちなみに、左手法とはスタートとゴールが外周の壁に接していた場合に使える迷路探索方法で、
左の壁沿いに進んでいけば必ずゴールに到達するというものです。
また、足立法は、ポテンシャル法でゴールを目指しつつ、行き止まりがあれば、そこを枝切りするような迷路探索手法です。
まずは、サンプルプログラムのStep8の左手法での迷路を走らせてみます。
結果は、何とかヨタヨタしながら、迷路を進んでいったのですが、ゴール付近で壁にぶつかってしまいました。
迷路の壁沿いための検知と前壁の検知の精度と走行制御パラメータの調整ができていないようです。
これではフルの迷路の走破は夢のまた夢なのですし、今後の動作の最適化を考えるとプログラムのパラメータの調整をやみくもにする前に、全体の把握しておいた方が良いと思いますので、Step8のプログラムを読んでいきたいと思います。
Step8のプログラムは、Sample_Program\step8_running_maze_usb\PiCoCLassic3 にソースコードがありました。ここにあったファイルの一覧は下のようになっていました。
- adjust.c
- パラメータ調整用の関数群(センサデータの表示と設定、直進と回転の検証関数など)
- dbsct.c
- B,R Sectionのセッティング例
- demo.c
- ゴール到達時のデモ行動
- fast.c
- 足立法で迷路を探索した結果を速度を上げてトレースする
- glob_var.c
- global.hの読み込みのみ
- glob_var.h
- ロボットの基本的な行動を決めるグローバル変数の定義
- hwsetup.c
- ハードウェアのセットアップですが中身は空でした
- init.c
- グローバル変数などの初期化処理
- init.h
- init.cで定義した関数のエントリなど
- interrupt.c
- 割り込み処理の関数、モータ制御とセンサの制御処理
- interrupt.h
- interrupt.cの関数のエントリなど
- intprg.c
- 割り込み処理のエントリ用の関数
- iodefine.h
- I/Oレジスタの定義
- lowlvl.src
- 低レベルの関数、アセンブラで記述されている
- lowsrc.c
- I/Oストリーム関連の関数
- lowsrc.h
- lowsrc.c の関数エントリなど
- macro.h
- マクロ関数
- misc.c
- msecの待ち関数
- mytypedef.h
- 迷路探索などで使う独自型の定義など
- parameters.h
- ロボットの行動を規定するパラメータ群(基本的に個々の内容を調整する)
- PiCoClassic3.c
- メイン関数など
- portdef.h
- ポートレジスタのマクロ定義
- resetprg.c
- PowerOnReset(リセット関数)
- run.c
- 直進、回転などの基本的な運動を行うための関数
- run.h
- run.cの関数のエントリ
- sbrk.c
- sbrk関数
- sbrk.h
- sbrk関数エントリ
- sci.c
- シリアル接続経由で情報を表示するための関数など
- sci.h
- sci.cで定義した関数のエントリ
- search.c
- 左手法、足立法の迷路探索プログラム
- stacksct.h
- search.cで定義した関数のエントリ
- static_parameters.h
- 静的なパラメータ、迷路の幅など決まったパラメータの定義
- typedefine.h
- 整数型のエイリアス定義
- usb.c
- USBポートのための関数
- usb.h
- usb.cで定義した関数のエントリ
- usb_define.h
- USBのための変数、パラメータなどの定義
- usb_int.c
- USBの初期化関数
- usb_int.h
- usb_init.cで定義した関数のエントリ
- vect.h
- 割り込みベクタの定義
- vecttbl.c
- 割り込みベクタテーブルとMDEレジスタの初期化
このプログラムを見てみるとparameter.hで定義されているパラメータを調整すれば、迷路の走破はできそうな感じです。
迷路を走破するためのプログラムの全体像は大体つかめたので、パラメータの調整とプログラムの修正は次回以降に行います。