オープンソースカンファレンス2024 東京・秋
(1) 基本情報
(2) OSASK計画のブース
- 前提:
- OSASK計画では30年前くらいからOS開発を志していますが、自分が元気なうちに完成するかどうか自信がなく、できれば次世代に引き継ぎたいと思っています。
- それで、小学生くらいからプログラミングに興味を持ってもらえたらいいかなと考えました(私も小学4年生から始めたので)。
- 小学生にプログラミングを教えようと思って、いざPCを与えて、これからこの機械でゲームを作ろうと言っても、
小学生からすれば「急に外から何かを与えられてしかもその中で何かする」という、あまり興味が持てない状況になります。
- 小学生視点で考えると、すでに自分の知っているおもちゃが先にあって、「これを自動運転するためにプログラミングをやろう」と言われるほうがやる気が出やすそうです。
- 今回は「お父さんが趣味でやっている鉄道模型を、プログラムで自動運転しよう」というストーリーです。以下のことに気を配っています。
- (1)鉄道模型一式とPCはすでに持っている前提。
- (2)鉄道模型はお父さんの大事なコレクションなので(たとえ子供の英才教育のためでも)改造はしたくない(中古価値がなくなる & 改造失敗が怖い)
→鉄道模型をやっている人からは、すごく共感されました!
- 今回、以下のような展示をしたのですが、電車は一切改造せず、鉄道模型用のコントローラも改造せず(そもそも使わない)、
線路は1本だけセンサーを付けるために穴をあけましたが、それは200円の線路です(これは十分に許容範囲ですよね?)。
- またラズパイピコやモータドライバモジュールをAmazonで買いましたが、それは合計2000~3000円程度のものであって、
つまりお父さんが楽しい飲み会を1回お休みする程度で賄えます。こんなに安いのなら、もうやるしかないと思いませんか?
- 安く済むのはソフトウェアで頑張るからというのもありますが、それはオープンソースなので、ノウハウはすべて公開します(当然です)。
- 配布していたパンフレット#1(鉄道模型を自作言語で動かす):
- 展示の写真:
(3) 関連する情報
- [3-1] この鉄道模型は、easy-C にコマンドを追加して制御しています。だからC言語の構文と混ぜ書きができます。
- ダウンロード: https://essen.osask.jp/files/easyc20241026a.zip (191KB)
- Raspberry Pi Pico にuploadしたスケッチはこちらに書いてあります → https://essen.osask.jp/?a24_picoTrain1
- プログラミング言語で動かすので、操作感は普通の鉄道模型とは全く異なります。
- 「車庫から電車を出して駅に止めろ(STATION)」「本線を反時計周りに2周回って駅に止まれ(CCW)」「車庫に戻れ(YARD)」「操作する電車を切り替える(SELECT)」などです。
- つまみを回して前後に動かすとか、レバーを操作してポイントを切り替えるなどの操作はありません。PCのプロンプトに簡単なコマンドを打ち込むだけで、電車もポイントも自動で制御されます。
- コマンド一覧など、詳しいことは上記のパンフレット#1に書いてあります。
- 電車が動くと画面内の電車の位置もリアルタイム更新されます。センサーが1つしかないので、この位置表示はソフトウェアで推定した位置を表示しています。
- [3-2] ポイントの制御は7.5Vを48ミリ秒だけ印加することで切り替えてます。ただしこれはTOMIXのポイント(N-PL541-15 F)で実験して、6V-32ミリ秒で確実に切り替わることが分かったので、本番では少しマージンを足して運用していました。
- OSC2025東京春ではKATOの電動ポイントの切り替えに挑戦する予定です。
- [3-3] なぜこの展示内容になったのか?
- OSC展示スペースは限られます。ここで円形のレールを敷設しようとすれば、かなり曲率の高いカーブレールを使用しなければいけません。そうすると普通の電車は使用できなくなります。
- 設置できる駅の長さなども考慮して、さらに身近にあって実際に小学生と一緒に視察できるかどうか、模型の入手性などを加味すると、結果として「箱根登山鉄道」になったのです。
- ということで実際に箱根登山鉄道に乗って、実際に見えた建物に似た建物を揃えてあります。
- 展示スペースに関していえば、事務局に事前に相談すればたぶんもっと大きな展示スペースも割り当ててもらえそうな気はしますが、私の趣味としては制約の中で工夫するのが大好きなので、これはこれでいいのです。
- [3-4] Twitterでの紹介
(4) 反響は?
- きわめて好評でした。前を通った人に話しかければ 100% 話を聞いてもらえました。もちろんお客さん側から話しかけられることもありました。鉄道模型の集客力はすごいです!
- 「川合さんは本当にいろんなことに興味をもっていろいろやられていますよね。尊敬しています。秘訣はありますか?」
- どうもありがとうございます。秘訣というか心がけていることはあります。それは「やりすぎる」ことです。
この展示だって、単に言語で電車が動いているところを見せるだけなら、直線一本引いて電車が命令で前後に動くだけでも十分だったはずです。
でも曲率の高いレールをわざわざそろえて円を作り、車庫も作り、それに合わせた電車も揃えて、建物や木々まで並べました。どう見てもやりすぎです。
でもこのやりすぎのおかげで、「これはいいな、おもしろいな」って思うじゃないですか。私はそこまでやりすぎるのが好きなんです。
- 「センサーを1個じゃなくて2個とか3個にすれば、位置推定精度が上がると思うのだけど、そうしなかったのはなぜ?」
- →よくぞ聞いてくれました!そうなんですよ、増やせば精度上がるんですよ。しかし、それをやったらコード(配線のこと)をもっとたくさん引き回すことになって、
せっかくのかっこいい街の雰囲気が壊れると思うんです。それに会場準備の際の誤配線リスクも増えます。・・・だったら逆にセンサー1個でどこまでやれるかを極めたくなったのです。
→そのこだわりいいですね。いかにも日本人らしい。おもしろい。すばらしい。
- (お客さん同士の会話)「知ってる?これって線路以上に建物にお金がかかるんだよ。自動運転を見せたいだけなら建物なんかいらないんだよ。
だけどちゃんとコストをかけてやる。この出展者、鉄道模型の何たるかがちゃんとわかっているよ。好感持てるなー。」
- 「単純な円じゃなくて、ヤード線がある。しかも2本も!」(この質問は鉄道模型がわかっている人ならではのもの)
- →そうなんです。ヤード線が2本あれば、電車の入れ換え運転ができますよね。入れ換え運転はカッコいいと思うので、ここは頑張りました!
- 「これさ、鉄道模型とPC以外は2000円程度っていうのはわかったし感心したけど、鉄道模型はいくらくらいするの?」
- →え?それ聞いちゃいますか?あははは・・・すみません、なんとなく察してください(笑)。
- 電車の選択肢は少なくなりますが、AmazonでTOMIXのスターターセットとかを買えば、まず8000円程度で、分岐のない周回路線のための一式はすべてそろいます(電車は後から買い足してもいいですね)。
- 電動ポイントは、1つあたり、コントロールボックスとセットで2700円程度です(最初からRaspberryPiPicoで動かすのならコントールボックスは不要ですが・・・)。
- 車庫に必要なエンドレールは1本300円程度です。他のレールもそれほど高価ではありません。ポイントが高いのです。
- 電車の運転は、それまで鉄道模型で遊んだことのない小学5年生の女の子が担当しましたが、コマンドを打ち込むだけで動かせるので、電車は一度も脱線したりはしませんでした(これはすごい)。
- 簡単に思い通りに動かせるので、だんだん楽しくなってきたようで、電車も好きになったようでした。
- 上記の写真はその女の子に撮ってもらったものなのですが、写真の構図がもはや鉄道ファンっぽくなっていて、電車に対する興味が伝わってきます。
- 電車に対してあれこれと命令するというモデルは「オブジェクト指向的である」という指摘を受けたのですが、家に帰ってからこの示唆に非常に刺激を受けました。
確かにどちらの電車に対してYARDと命じるかによって挙動は異なるので、オブジェクト指向という説明はぴったりです。
(5) 補足
- このようなプログラムの場合、ダウンロードしてそのまま実行するというケースはまずないと思います。全く同じレールを準備して、同じ配線をする人はめったにいないでしょう。
だから制御方法こそ知りたいはずです。
- ArduinoIDEを使って Raspberry Pi Pico にuploadしたスケッチは、十分に汎用的に書いたので、これはレイアウトに依存せずに使えると思います([3-1]参照)。
- 位置推定の方法:
- まず電車を駅に止めます(これは駅と車庫以外に止めてしまうと不自然に見えるので駅にしました)。
- そしてそこから時計回りに2周させます。そうすると電車はCdSセンサーを2度踏みます。こうすることで1周に要する時間を悪くない精度で測定することができます
(実質的に速度を知ったようなものです)。
- より精密に説明すると、最初は速度がわからないので、適当に仮決めして、それで画面の位置推定表示はごまかします。そしてとにかくCdSセンサーを1度踏むのを待ちます。
- 1度踏んだら時間測定を開始し、位置推定をセンサー位置にリセットし、もう一度踏むのを待ちます。この間も速度はわからないので画面の位置推定表示はアバウトです。
- 2度目を踏んだら、位置推定をセンサー位置にリセットし、すぐに1周に要する時間を算出します。そしてその時間の8%を待って、電車の推定位置をレール一つ分だけ進めます。
これは正確です。これを繰り返します。
- 駅に着いたら電車を止めます。
- 最初に車庫から電車を出すとき、速度はわからないので直前の測定値を使いますが、それでもやはり多少はズレて駅に止まります。これはしょうがないです。
- 時計回りと反時計回りとでは速度は違います。だから変数は別々になっています。
- [Q]画面内の路線図はどうやって描きましたか?
こめんと欄
- 本日はありがとうございました!OSASKの後継者育成頑張ってください! -- よそのK 2024-10-27 (日) 02:54:50
- コメントありがとうございます! -- K 2024-10-28 (月) 20:31:21
|