common lisp を使った...
TRANSCRIPT
![Page 1: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/1.jpg)
Common Lispを使ったローバー制御プロトタイプ
ICFP'08コンテストへの挑戦
Salvi Péter, 黄涧石
Image from NASA
![Page 2: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/2.jpg)
概要
ICFPって何 ? コンテストについて 今年度の課題 解答方法の概略 Common Lisp参上 デモ 結論
Original animation from www.sooner-robotics.org
![Page 3: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/3.jpg)
ICFPって何?
国際関数型プログラミング学会(International Conference on Functional Programming)
1998年以来毎年プログラミングコンテストも主催− 成績は学会にて発表される
優勝に伴うプログラミング言語の名誉− 1位:目が効くハッカーの言語− 2位:多くのソフトのためのナイス・ツール− 雷光派:迅速なプロトタイピングに相応しい
![Page 4: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/4.jpg)
– 前のコンテスト 2004年
主催大学:ペンシルバニア大学蟻コロニー(蟻のオートマトンを設計)
![Page 5: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/5.jpg)
– 前のコンテスト 2005年
主催組織: PLT警官・強盗ロボット・プログラミング
![Page 6: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/6.jpg)
– 前のコンテスト 2006年
主催大学:カーネギーメロン大学 (CMU)− 発掘された古文書を基に古代文明のパソコンをエミュレート
− 古代人が残した課題
![Page 7: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/7.jpg)
– 前のコンテスト 2007年
主催大学:ユトレヒト大学二段階のオートマトンで DNAを変えて非常着陸した異星人を地球に順応させる
![Page 8: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/8.jpg)
今年度のコンテスト
7月 11日〜 14日(金【土】〜月) 主催大学:ポートランド大学・シカゴ大学火星ローバーを障害を避けながら基地に導く( TCP/IPを通じて)
雷光派の締切りまでは 24時間 Linux LiveCDで実行できるファイルを提出
...そして我がチーム「 Epsilon」が形成された
![Page 9: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/9.jpg)
…主催者がやってくれたのは
Wikiページ( FAQ等) メーリングリスト IRCチャンネル ホームページの更新通知( RSS) 実験用のサーバー(グラフィカル)〔 SMLで開発された物〕
コンテストの間:− LiveCDに新しいソフトを追加− サーバーのバグ修正
![Page 10: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/10.jpg)
使われたプログラミング言語
ICFP'08 (9月 22日〜 24日 )で発表 ネットで様々なビデオが見られる 336 提出 (+ 140 雷光派 ) プログラミング言語 :
− Java, Python, C++− Haskell, ML所属− ...− Lisp (7つだけ )− 他にも色々 (LaTeX (!))
![Page 11: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/11.jpg)
参加者
世界の各地から 日本 : 106 (!) [アメリカ合衆国 : 192]
![Page 12: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/12.jpg)
今年度の課題
TCP/IPを通じてローバーと通信 情報速度: 1秒当たり約 10メッセージを受信 内容は地形データ:
− 巨礫、クレーターと火星人(全て円形)− 楕円形の視野
![Page 13: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/13.jpg)
ローバー・モデル
制御:左折・右折・加速・減速(ブレーキ) ローバーは二重オートマトン:
![Page 14: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/14.jpg)
地図
各地図でローバーが5回走る(スタート位置が違う)
一番いい三つしかカウントされない
基地は真ん中にある 地図の大きさ、障害や火星人の数などは地図ごと異なる
![Page 15: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/15.jpg)
解答方法の概略
モジュール:− 通信器− 構文解析器− 地図製作器− 経路生成器− ビークル制御器− ロギング・グラフィック(デバッグ用)
抽象的から具体的へ
通信器
ビークル制御器 構文解析器
経路生成器 地図製作器
データベース
![Page 16: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/16.jpg)
経路生成
簡単な方法:基地を目指せ! 実際にこれを利用していた(少々改修して)
− 障害があると、近い方の正接点を目指す
火星人は円形の物体として扱われる
(半径は速度に従属)
![Page 17: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/17.jpg)
経路生成
問題例
この方法の長所:− 「よっぱらい運転」の現象はない− 簡単で早い
解決策:両側が閉ざされた場合障害が(短距離で)見えなくなるまで左折・右折を繰り返す
選択した方向を記憶
![Page 18: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/18.jpg)
経路生成
問題点:− 火星人モデルが簡単過ぎる
楕円で近似移動予測シミュレーション
− 考慮範囲が浅い(一点だけ)
− 目的点までは辿り着けないかもしれない
理想的なルート
![Page 19: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/19.jpg)
経路生成
A*サーチでやってみよう!− ノード:ダイナミック格子の点− 基地まで(今の世界の知識だと)絶対辿り着ける
![Page 20: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/20.jpg)
経路生成
A*サーチでやってみよう!− ノード:ダイナミック格子の点− 基地まで(今の世界の知識だと)絶対辿り着ける
![Page 21: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/21.jpg)
地図製作
保存するのは:− 永続性の物(火星人とローバーを除く)− 火星人
最後の幾匹だけ固定サイズのキューに入れる見えなくても最近みた火星人は覚えている
保存方法− ただのリスト(簡単の経路生成には充分)− ダイナミック格子( A*には必要)
![Page 22: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/22.jpg)
ダイナミック格子
四分木(二分木の2次元版) 各セルに同じ点数 どの物体の周りにも点があるように
![Page 23: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/23.jpg)
運動制御
運動モデルは次のパラメータで定義される− 速度 (S
t)
− 加速 / ブレーキの (a, 初期値不詳 )− ドラッグ係数 (k, 初期値不詳 )
方向の計算に必要なのは:− ソフト角加速度− ハード角加速度
パラメータの推定は毎回自動的に計算される
![Page 24: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/24.jpg)
運動制御
目的は与えられた経路でローバーを走らせる
![Page 25: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/25.jpg)
運動制御
制御器の三つの要素− ローバーのモデル− 入出力の決定− 制御アルゴリズム
![Page 26: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/26.jpg)
運動制御
モデル− ローバーの運動モデルは理想的 (課題により )− 運動方程式
![Page 27: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/27.jpg)
運動制御
入力− 経路との最短距離− 経路の切線との角度
出力− 加速度− 角加速度
![Page 28: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/28.jpg)
運動制御
微分方程式は解かなかった!:) シミュレーションを基にした制御アルゴリズム
− 簡単で効率的− 比例ゲインだけで十分− パラメータチューニングはより少ない− ただし、計算量が多くなる (ここは問題ない )
![Page 29: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/29.jpg)
運動制御
他について− 動作装置の仕組みは加速度と角加速度を連続値からサーバの受けられるコマンドに変換する
− パラメータチューニング trial-and-errorの方法だけ使ったもっとも重要なパラメータ
− シミュレーション期間− ターンの閾値(ソフト角加速度とハード角加速度)
![Page 30: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/30.jpg)
運動制御
問題点− 振動が発生するかもしれない− ブレーキは考えてない
速く走りたい!最適化で探索する空間は二次元になる(最適化アルゴリズムを導入する必要)
![Page 31: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/31.jpg)
メッセージ
メッセージというのは:− 識別子の一文字− データ(物体はまた識別子で分けられている)− セミコロン
物体はセミコロンなしのメッセージ I dx dy time-limit min-sensor max-sensor ... ; T time-samp vehicle-ctl ... object* ; b x y radius m x y direction speed
![Page 32: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/32.jpg)
内部のメッセージ形式
以下のようなメッセージは
T 123 aL ... b 13.5 23.47 4.3 m 3.2 4 45 4.1 ;
... このような形式になる:
![Page 33: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/33.jpg)
構文解析
こんな書き方ができたらいいなぁ: これはメッセージ
これらは物体
![Page 34: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/34.jpg)
構文解析
展開するとこんな感じになって欲しい:
メッセージ・ハンドラのハッシュテーブル
セミコロンを食うかエラーを投げる
結果はデータの連想リスト
![Page 35: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/35.jpg)
構文解析
マクロ自体は:
parser-telemetryみたいな名前を生成する
![Page 36: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/36.jpg)
構文解析
構文解析のメイン関数は簡単:
…これは無論一つの段階に過ぎない抽象化を更に進めることもできる
![Page 37: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/37.jpg)
ロギング
デバッグには欠かせない 大切な条件:
− 消すのは簡単(効率面ではないと同然)− ログ形式などのオプションが選択できる− グラフィック表示(後で)
Lispのマクロを活かす絶好のチャンス− C(++)でもこれは普段マクロを使う:
#ifdef DEBUG ...#endif
![Page 38: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/38.jpg)
ロギング・マクロの使用例
![Page 39: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/39.jpg)
ロギング・マクロの性質
ロギングを設定するには一つの関数を編集してコンパイルすれば充分
− ログはどこへ書くのか− どの部分がロギングすべきか等
*LOGGING*変数を NILにして完全リコンパイルすると、元々ないと等しい
WITH-LOGSはただWITH-LOGを繰り返して呼び出す:
![Page 40: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/40.jpg)
ロギング・マクロ
設定マクロ:
Hash of streams/options
![Page 41: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/41.jpg)
ロギング・マクロ
ロギング・マクロ:
簡単で効率的 重複コードが減って、整理がアップ!
![Page 42: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/42.jpg)
PostScriptでグラフィック・ログ
PostScriptでグラフィックログは簡単!
PostScriptは Forthみたいなスタック指向言語
![Page 43: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/43.jpg)
PostScriptでグラフィック・ログ
カラーを幾つか定義して地図の大きさをセットアップ:
これで苦労なく、読みやすく地図が書ける!
![Page 44: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/44.jpg)
PostScriptでグラフィック・ログ
ログ自体はこう言う感じになる:
![Page 45: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/45.jpg)
PostScriptでグラフィック・ログ
出力:
![Page 46: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/46.jpg)
CL-SDLでグラフィック・ログ
…しかしコンテストでは CL-SDLを使用 ログは CLOSオブジェクトとして(ほぼ)直接に読めるような形式で書く
ログの第 k行は:
…ここの ROVER、MARTIAN、 BOULDER等は CLOSのクラス
![Page 47: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/47.jpg)
CL-SDLでグラフィック・ログ
READで読み込んでMAKE-INSTANCEを呼び出してオブジェクトを作る
メインループ:− フレームを一つずつ読み込んで− すべてのオブジェクトで表示メソッドを呼び出す
最適化のため、新しい物体だけをログする(そしてローバーと火星人)
グラフィック表示担当のソース全体は100LOC(行数)位
![Page 48: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/48.jpg)
デモ
![Page 49: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/49.jpg)
結論
SBCLを使って実行ファイルを作成 コンテストではレベル7まで行った … ♪けど 楽しかった 来年はエディンバラで!
− http://icfpconference.org/
− リスパーが増えればいいが スライド(英語・日本語)はここに:
The slides (in both English and Japanese) are here:
http://www.den.rcast.u-tokyo.ac.jp/~salvi/archives/text.html
![Page 50: Common Lisp を使った ローバー制御プロトタイプsalvi.chaosnet.org/texts/icfp2008j.pdf · Common Lispを使った ローバー制御プロトタイプ ICFP'08コンテストへの挑戦](https://reader034.vdocuments.mx/reader034/viewer/2022042916/5f57b969007a1c51071fcaad/html5/thumbnails/50.jpg)
御清聴ありがとうございました !