はじめに
いよいよ新年度も間近に近づいて来ました。皆さんそれなりにフレッシュな気持ちになっていると思います。特に、春から大学に進学する方や社会人になる方は心機一転といったところでしょう。私は学生なので何とも言えませんが...
それはさておき、私は大学でロボット制御を少しだけ学んでいるのですが、今年度はサークル等で新入生に教える際に自分でも全体像が把握しきれていなくて、かなり迷走したような気がします。私が断片的かつ一方的にべらべら喋るばかりで何も伝わっていなかったり、特にやらせることが思いつかなくて放っておいたり、まあ色々ありました。
あるあるなのが、適当にマイコンを触らせてモーターやセンサを弄らせつつC/C++を勉強させ、放置という流れですね。ロボコンに出る機会がそれなりにあったりすればまた違うと思うのですが、全員がそういう機会があるわけではないので今は一旦そこは考えないことにします。
私は次学部3年生でロボット歴は1.5年ほどしかない雑魚ですし当てになるかはわかりませんが、基本的にほぼすべての事は独学でやってきたつもりです。良い教育がある環境であればあまり気にすることはないと思うのですが、ロボット制御とその周辺について何をやったらいいか分からない方への多少のヒントになれば良いかと思っています。
P.S.
本当はTODO形式にもうすこし丁寧に書こうと思ったのですが、だらだら書き始めると止まらなくなってしまいました...
対象読者
-
大学新入生などロボットどころかプログラミングもほぼ知らない人
-
下級生に教育したいけど何をしたら良いか見当もつかない人
注意
特にfactcheckもせず数時間で書いたものなので信憑性はあまりないです。主観もかなり入っています。制御の雰囲気を掴むというのと、キーワードに若干目を通してもらえればそれで良いかなと思っています。AIは若干書く前に壁うちに使った程度で本文には殆ど使っていません。
何言ってるのかわからないところもあると思うので、そこは飛ばしてください。
知らないこととかわからないことがあれば積極的に自分で調べると良いと思います。
制御とは何なのか
まず、制御の意味をざっくり知っておきましょう。
ロボット制御の「制御」とは英語controlの訳語です。では、controlとは本来どういう意味だったのでしょうか?語源を見てみましょう。
Etymonlineによれば、元々ラテン語でcontra(対抗)+rotulus(巻物)でcontrarotulus、ここでは「帳簿を照合する」という意味だったようです。
この時点で既に対象物が帳簿ではないという点を除けば、対象と目標を照合して修正するというのは制御の基本であるFB(フィードバック制御)にかなり近いと思います。(厳密には修正の意味までは含まれていないでしょうが、自然とでてくる発想だと思います)。それが古フランス語や中世英語などを経て、今のcontrolの形になったんですね。
また、JIS規格によると制御とは「ある目的に適合するように,. 対象となっているものに. 所要の操作を加えること」と定義されています。これはフィードバック制御だけに留まらない広義の定義になっています。
今はふわっとした理解で大丈夫です。後々モータ制御をしたり、PID制御を学ぶとしっくりくると思います。
人間の制御原理
制御についての解像度を若干高めたいと思うのですが、いきなりロボットの話をするとイメージがつき辛いかもしれません。ただ、幸いなことに人間もロボットも似たようなシステムとして解釈することができるので、我々の身体を題材にしましょう。
まず、自分の手が届く範囲にジュースが入ったペットボトルがあるとします。あなたの目標は手でペットボトルを掴んで一定の高さまで持ち上げることとします。ペットボトルがある場合は実際にやってみてください。非常に簡単ですね。持ってない場合は想像することにしましょう。
あなたがペットボトルを持ち上げたとしましょう。
では、ここで何が起こったでしょうか?
まず、ペットボトルを「目で見た」と思います。そして次の瞬間「手を伸ばし掴んだ」。少し詳しく言えば、目で見て情報を受け取り、脳に信号を送って処理し、適切な程度で筋肉を動かしてペットボトルを掴んで持ち上げることに成功したわけです。
ここで先ほどの制御の話を思いだしましょう。まず、JISの定義を振り返ると「ある目的に適合するように」とあるので今の操作が制御であれば目的、目標が必ずあるはずです。今回の目標はペットボトルを掴んで持ち上げることですね。これは先程も書いたばかりです。
次に、「対象となっているもの」とはなんでしょうか。思いつきそうなのは、腕かペットボトルでしょうか。文脈にもよりますが、今回は「腕」です。対象とか言っているのでペットボトルっぽいですが違います。この対象とは制御対象(プラント(plant))のことで、コントローラ(脳)によって制御されるもののことです。脳から指令を出して直接動かせるものは腕しかありません。この指令を受けて動くものをアクチュエータといいます。人間の場合は筋肉が相当します。
最後に「所定の動作を加えること」とありますが、これは単に制御対象である腕を指令によって動かしてペットボトルを掴むというだけですね。ということで、この一連の流れは歴とした制御であることがわかりました。
ここで少しだけ補足をします。このJIS規格の定義を読むと、「感覚器官やセンサから情報を取得し」のようなまたはそれに準ずることは全く書いてありません。なので「目で見る」という部分はオプションなんですね。しかし、完全に感覚を断ち切ってノールックでペットボトルを掴むことは容易ではありません。しかも実際は目だけでなく我々は触覚や聴覚も使っていますから、感覚を使えなければ掴めたかどうかすらわからないわけです。
この流れにおいて目は非常に大切な感覚器菅です。人間は目でペットボトルの位置と手の位置のズレを常に監視し、その情報を元に常に修正し続けています。それにより、精度高くペットボトルを掴めるわけです。更に言うとペットボトルが動こうが掴めますよね。この感覚器官から取得した今の情報と目標の誤差(偏差)を修正(フィードバック)し続けることによる制御をフィードバック制御といいます。そういう意味で、controlの語源は既にフィードバック制御っぽい発想だと言っているわけです。フィードバック制御は制御の基本中の基本です。
フィードバック「ループ」なので大体一定の制御周期で動いているわけですが、人間が目で見てから筋肉を動かすまでの反応時間(単純反応時間)は、一般的に0.2秒~程度です。5Hzとかそれくらいですね。これはコンピュータなどと比べると非常に遅いです。モータ制御ループだと1kHz以上は普通にあります。5Hzの制御周期だともっとカクカクしそうなものですが、人間の視覚フィードバックがこれだけ遅いのにこんなにもなめらかに動けるのには秘密があります。
結論から言ってしまうと、その秘密とは「予測(フィードフォワード)」です。人間は腕の重さ、モノの重さや距離感、筋肉の動かしかたを学習しており、脳内にある種のシミュレータを持っています。例えば先程の例だと、脳が今の腕の姿勢から目標位置まで腕を伸ばすには、これくらいの強さで肩と肘をこのタイミングで動かしetc..という計画を立て、その計画どおりに一気に電流を流し腕を動かします。ここでいちいち目の確認を待っていないので高速に動作することができます。これがフィードフォワード制御です。ただ、必ずしも一発でいけるわけではないですし、ペットボトルが何らかの力で動いたりすることもあるのでそこはフィードバック制御で修正します。
制御工学の言葉を使うと、人間はフィードフォワード制御とフィードバック制御を無意識に完璧に組み合わせて動いている高性能システムと言えるでしょう。
ロボットはどうなのか
人間とは、感覚器官を用いて外界の情報を電気信号に変換し、脳で計算をし、その出力を元に筋肉というアクチュエータを駆動するシステムでした。ロボットもそれぞれの要素が異なるだけでやっていることは全く一緒です。人間の感覚器官がセンサ、脳が計算機(コンピュータ)、筋肉がモータやシリンダーに変わるだけです。
ロボットはセンサで外界の情報を文字通り電気信号に変換し、コンピュータで計算し、出力をもとにモータを駆動する。これだけです。そもそもsensorとはsense(知覚する)モノですから、人間の感覚器官もロボットのセンサも全部sensorです。actuatorも動作させるものという意味ですが、筋肉もモータもこれの一種です。また、フィードバック制御だのフィードフォワード制御だの言ってましたが、その計算をしているのがcontroller(制御器)であり、脳や計算機もこの言葉でまとめられるでしょう。
難しいことは覚えなくていいので、
[ Sensor -> Controller -> Actuator ]
この流れだけ覚えましょう。
以下の図はブロック線図といって制御系の流れを表した図です。
Inputは目標値、Feedbackはセンサで取得した現在の値です。
Error(偏差) = Input(目標値) - Feedback(現在値)
この偏差をもとに、例えばその偏差を小さくする方向に制御値を出力し、モータを駆動し、またそのモータの回転数をエンコーダで計測し、目標に追従させていくといった流れになります。
こういった話に興味がある、また数式を使って追ってみたい場合は古典制御論を勉強すると良いです。更に発展した現代制御論というものもあります(こちらは実用まで持っていくのはかなり難易度が高いです)。現代制御論は古典制御論をベースにした学問という感じでもないので、どっちから先にやるとかはあまり関係ないと思います。古典制御論をさっとやっておくとかなり解像度が高くなります。制御工学は幅が広い感じがしますが、中心はこれだと思います。
教科書を買っていきなり勉強していくのは難易度が高いので、以下のサイトで少しずつまなんでいくと良いと思います。
結局何をすればいいのか
一言で言うと、Controllerを実装し動かすこと。これに尽きると思います。つまり、PCやマイコンといったハードウェア上で自分でプログラムを書いて実装したソフトウェアを載せ動作させるということです。ここでやっとプログラミングがでてきます。
もう少し詳しく言うと、一般的にすることは以下の3つだと思います
1. センサから適切にデータを取得する
2. 制御計算をする
3. モータへ駆動指令を出す
よくわからない人は「計算をして指令をだすもの」。これだけ覚えましょう。
勘違いしないで頂きたいのは、制御器のハードウェアは別にPC/マイコンに限らないということです。アナログ回路かもしれませんし、CPUが必要とも限りません。ただ、一般的にはPC+マイコンという構成が多いです。工場だとPLCといった専用のコンピュータを使っていますし、超高速制御ではFPGAという回路を自分で設計できるチップが使われることがあったりもします。ただ、我々が普段普段触れるのは専らマイコン/PCです。
ここで、マイコンについて少し整理しておきましょう。
マイコン(Microcontroller)
リアルタイム性に優れた組み込みコンピュータ。
CPU, メモリ、タイマ、通信機能、GPIO、ADCは大抵入ってます。
センサからのデータ取得やモータ制御など下レイヤーの制御はこれを使います。
RTOSという専用のOSが載ることもありますが、基本的にはPCと違ってOSなしです。
CPU -> 計算する脳
メモリ -> データ保存
GPIO -> ピン(外部とやりとりする)
タイマ -> 時間管理
通信 -> センサやモータと通信する(UART, I2C, SPI, etc.)
ADC -> Analog(連続)からDegital(離散)変換。センサ読む。
Pros
- リアルタイム性に優れている
- モータやセンサに直結してハードを直接叩ける
- 軽い、安い、安定
- 余計なものがないのでシンプル
Cons
- 計算力は弱い
- メモリが少ない
Examples
- Arduino
教育用。初心者にやさしい。遅い。制御性度はあまり良くない。 - STM32
高性能。タイマ、割り込みが強い。制御用途向き。 - ESP32
Wifi, Bluetooth内臓。割と高性能。IoT寄り。
P.S.
RaspberryPiはSBCと呼ばれるものでマイコンとは言いづらいです(OSのりますし)。
一般的にCPUはarmなので皆さんが使っているintelやamdのPC(x86_64/amd64)とはアーキテクチャが違います(macの人は一部armです)。この違いは様々なところで顔を出してきます。ラズパイもarm64です。
ロボットはPC+マイコンで構成されることが多いと言いましたが、前述のとおりマイコンが基本的にセンサからのデータ取得やモータ制御を担当することになります。となるとPCいらなくね?となりそうですが、そうでもないです。
まず、PCには圧倒的な計算力があります。CPU/GPUのパワーで色々とゴリ押しできます。行列計算、画像処理、AI全部いけます(実際はどれも中身は行列なんですが...笑)。これはマイコンだと厳しいです。複雑な処理、例えば経路計画を立てたり重い制御計算をするのも得意です。メモリが大きいのもメリットですね。
開発しやすいという点もあります。基本的には私たちが普段使っているパソコンと一緒なのであまり困ることはありません(ただ、Windowsだと厳しい場面もあります)。デバッグが楽だったり、GUI(普段パソコンで見ている画面)が使えたり、まあ色々とメリットはあります。
勿論デメリットもあります。まず高い。重い。電力も食います。リアルタイム性もマイコンと比べるとかなり悪いです。まとめるとすれば、PCは「賢い」、マイコンは「確実」です。とはいえ、センサを扱ったりするときにピン(GPIO)が必要になることが多かったり、特定の通信方式に合わせる必要があってマイコンを使っているということも多いです。
で、マイコンにしろPCにしろプログラミングをしてソフトウェアもとい制御器を実装する必要があります。プログラミングをするというのはアルゴリズムを記述するということです。その手段としてC言語だのPythonだのがあるわけです。
マイコンのファームウェア(書き込むプログラム)は大抵C言語で記述されます。C++を使うこともあります。巷で有名なPythonはGILとかInterpreterとか色々な理由で速度が遅いので使われません。Cは70年代からある言語であり莫大な資産があることも大きいと思います。最近は安全性や生産性の問題でRustなど他の言語も台頭してきてはいますが、今は知らなくて良いです。興味があったら調べて見てください。プログラミング言語の種類は知っておくに越したことはないと思います。
最初はとりあえずC言語+その拡張であるC++言語を勉強すると良いと思います。ロボットのコードを書く上では避けられません。変数、if, for, 関数、ポインタ、struct(構造体)あたりを抑えれば一旦基礎はできたものだと思って良いと思います。まずはC言語で基礎構文を学びながらその知識を使ってマイコンでLチカ、距離センサや温度センサ、スピーカなどの制御やモータ駆動などをしてみると良いと思います。慣れてきたら、他人のコードを読んでみたり、記事をあさってコードの書き方を見直してみたり、オブジェクト指向やアルゴリズムを勉強してみたり、ライブラリを使ってみたりと色々とトライしていければいいかなと思います。
ここでは敢えて解説はしませんが、モータを制御する際にはマイコンのピンと直結するのではなく、一般的にMD(モータドライバ)というものを使います。乾電池でモータを回したことがあると思いますが、あれでは向きを制御したり、速度を制御することができません。それらを制御するため、また十分な電流を確保するためにMDがあるといって御幣は無いと思います。ここで絶対に抑えて欲しいのはH-bridge回路とPWM(pulse width modulation)です。余力があればそのうちBJTやMOSFETのようなトランジスタについても調べてみましょう。直接役に立つことはなくても、様々なところでつかわれているので学んでおくに越したことはないです。
あと、H-bridge回路で駆動するモータは一部ということは言っておかなければなりません。モータにも勿論種類があります。皆さんが普段目にする小さいモータはブラシ付きDCモータなどといいます。普段はDCモータとかブラシモータなどと言っていますが、これはH-bridgeで駆動します。ブラシ付きDCモータ用のモータドライバの中身はこの回路になっています。回路図を見てみるとよくわかります。
これに対して、最近流行っているのがブラシレスDCモータ通称BLDCです。低速でも高トルク(回転方向の力のことです)が出ることや、ブラシモータと違って物理的に摩耗しないことなどのメリットがあります。ただ、値段が高いです。これはまた別のESCといった全く別のタイプのMDが必要になります。三層モータの制御は通常のモータとは大分違います。
サーボモータについても触れておきましょう。モータの制御は基本的に角速度を指定することになりますが、サーボモータは角度を指定することができます(サーボだからといって角度だけとは限りませんが)。安いサーボだと0-180degくらいで角度を指定して制御することができます。無限に回るものもあって、無限サーボとか言います。中身は大抵ブラシDCモータが入っているので別のモータというよりは亜種みたいな感じでしょうか。これは是非仕組みを勉強してもらいたくて、中でフィードバック制御が回っています(これをservo mechanismなどといいます)。目標角度を送ると、今の角度を可変抵抗(ポテンショメータ)やエンコーダで計測して偏差を小さくする方向にモータが駆動し、正確な位置決めができます。これはPID制御のPにかなり近い動きです。
ステッピングモータというのもあります。これは指令した分だけ決まった角度で動くモータです。これは位置決めしやすいですがフィードバックではなくオープンループ(結果を確認せずに指令だけで動かす)です。一般的にサーボより安いですが、負荷がかかるとズレる(脱調)してしまいます。高速にもあまり強くありません。周波数を変えることで音が変わるのでyoutubeで探したらステッピングモータで音楽作ってる人もいます笑。
他にもモータの種類は沢山あるので、今紹介したものを重点的に抑えつつ調べていけたら良いと思います。センサなども同様です。IMU、Lidar、エンコーダ、カメラ、スイッチなどは特に制御に関わってくると思います。センサは種類が多いので実機が回りにあるものから試してみると良いと思います。IMU, encoderは確実に抑えましょう。
IMUはジャイロ+加速度の6軸ですが、よく売ってあるのは磁気も含めた9軸です。9軸センサとよく呼びます。値を積分することで自己位置推定に役に立ったりしますが、時間が立つとドリフトといって誤差が溜まるので注意しなければなりません。おそらくエンコーダとならぶか何なら一番重要なセンサです。慣性センサともいいますかね。
センサやモータまわりでもう一つ大切なのは通信方式です。センサからデータを取るときにI2Cという通信プロトコルが要求されたり、パソコンからMDに指令を出すときにUART(これ自体はプロトコルではないですが..)で特定のデータを送る必要があったりします。勿論プログラミングによってこのデータ加工や取得などをするのですが、通信方式自体についてそれなりに知っておくべきでしょう。
詳しくは解説しませんが、まずUARTは抑えるべきでしょう。配線が2本(TX/RX)で、baudrateという通信速度を合わせるだけで通信でき、データを1ビットずつ送ります。とりあえず単純です。パソコンとマイコンをつなぐときはよくこれで通信するんですが、ちょっと罠なのは大抵マイコン側にUART-USB変換チップが乗っていて、UARTはUSBに変換されてPCと通信するってことですね。なのでPC側からはマイコンはUSBデバイスみたいに見えますし、物理的な線でも実際USBを使ってます。Arduinoでも簡単にできるので最初に勉強するべきでしょう。マイコン側でUARTは実相が楽かつUSBは非常に複雑で、PCは基本的にWifi/Ethernet/USBみたいな世界なのでこういう風に解決しているわけです。UARTは他の通信方式と違って厳密なプロトコル(通信規約)のようなものがありません。最低限のルールはありますが。なので自分で決めたり、決められていたりします。
あとI2CとSPIは学ぶべきだと思います。結局IMUとかと通信する時は大抵これなので。配線、プロトコル、あと若干の仕組みとメリットくらい把握していれば良いと思います。必要になったらCANやRS485を学んだら良いと思います。実際にその通信方式を用いるセンサを持っている場合は積極的にマイコンを使って手を動かして学んでいけば良いと思いますし、無い場合はさっと学んでおいて備えておけば良いでしょう。
ですかね。
同列に語って良いかはわかりませんが、EthernetやWifiと書いたのでついでに書きますが、ネットワークについて学んでおくと後で役にたつと思います。マイコンだけを弄っている時はそこまでメリットを感じないかもしれませんが、PCを使って開発していくようになるとROS2(有名なロボット向けフレームワーク(的な何か))が使いたくなったり、ルータの設定をしたり、sshしたり、websocket/grpc/zenoh..とプロトコルも色々使っていくでしょうし、その中で色々とデバッグも必要になってくるので知っているに越したことはないです。TCP/IP, OSI基本参照モデル, DHCP, DNS, IPaddr, Firewallの基礎、あとはアプリケーションプロトコルを色々おさえていけば問題ないと思います。優先度はそこまで高くありません。悩むなら制御の勉強をしたほうが良いです。
また流れで書きますが、CLIになれましょう。CLIというのは、GUIの対の概念みたいなもので、WindowsでいうところのコマンドプロンプトとかPowershellとかいうアレです。黒い画面のコマンド打つアレ。CUIと呼ぶ人もいますがこれは和製英語みたいなものなので私は使いません。で、WindowsのPowershellははっきり言って制御で使うことはないのでLinuxを学びましょう。
一応知らない方もいると思うので解説すると、OSの一種(みたいなもの)です。Windows, macOS, android, Linux,みたいな感じですね。本当はOSの中核であるカーネルのことなんですが、カーネルだけでは何もできないので周辺要素がセットになっているディストリビューションというものを使います。周辺要素のバリエーションによってディストロも変わってくるので沢山あるのですが、Ubuntuというのが一番有名かつロボットによく搭載されています。
他にもディストリビューションにはArchとかFedoraとかMintとかGentooとか色々あるのですが、私のLinuxオタクぶりが加速してしまうので止めます。ちなみに、マイコンには基本的にこういうOSは乗りません。ラズパイはOSがのりますが、よく使われるRaspberrypiOSはLinuxです。AndroidもLinuxベースです。macOSはLinuxと先祖が同じです(Unix-likeっていいます)。ChromeOSもLinuxベースです。スーパーコンピュータには大抵Linuxが積んであります。世界中のサーバの何割かはLinuxです。組み込みでもよく使われます。デスクトップではあまり使われませんが、かなり身近な存在です。
こいつはGUIも勿論のりますが、ターミナル(あの黒い画面)が本体みたいなものです。構成がシンプルで、コマンドが強力です。フリーのソフトウェアも多く、ロボット開発でもよく使われます。ということでLinuxを入れていただきたいところなのですが、メインのPCに入れることはおすすめしません。一応OSを一つのストレージに共存させるdual-bootというのもあるのですが、責任が取れないのでおすすめしません。
さすがにWindowsを消すわけにもいかないので、妥協案としてWSL2というものを入れましょう。こいつはWindows上(若干御幣があるが)でLinuxのターミナルを動かせるツールです。ネットワークやデバイスの設定が若干だるいので出来ればネイティブのLinuxが使いたいところですが、Windowsユーザは一旦これでいきましょう。もしパソコンを何台か持っていたり古いPCがある場合はUbuntuを入れると良いと思います。windowsユーザならiso落としてきてRufusあたりで焼いてインストールですかね。
Linuxまわりで覚えていただきたいことは、FHS(ファイル構造)、基本コマンド、OSの仕組み。これくらいです。自分で調べてもらいたいですが、FHSというのは/etc, /home, /varみたいなやつです。OSの仕組みとはプロセス、スレッド、デバイス管理、メモリ管理、ファイルシステム、ネットワークまわりを少し勉強してもらえればという感じです。コマンドは、基本的なオペレーションをするための30-50個くらいのコマンドと、パイプ、リダイレクトあたり覚えれば問題ないです。ShellScript[bash]というのも知っておくと良いかもしれません。あとsystemdですかね。udevくらいは知っておくと良いかもしれません...dockerとかその辺はその都度で良いですかね..。
Linuxで思いだしましたが、git/GitHubは使い方を覚えましょう。ファイルの管理記録がつけられるツールみたいな感じですね。一旦の目標は、git/GitHubの違いと簡単な仕組みを知ること、gitコマンドで簡単な操作ができるようになることですかね。add, commit, push, status, merge, branch, switch remoteくらい覚えておきましょう。GitHubに関してはUI慣れするということと、Issue, PullRequestですね。これは割と優先度高いです。
あまり思いつかないので制御まわりは一旦これくらいでしょうか。PID制御だけは維持でもやりましょう。雰囲気で理解して、実装できれば一旦上等です。他は興味があれば他の制御に手を出してみるなり、ROS2やってみるなりってところですかね。あとは腕やりたいならFK/IK(順運動学/逆運動学), 自動運転したいならPurepursuitとかMPCとか、最適制御ならLQRとかAdaptive Controlとか。
足回り制御についても一応言及しておきます。勿論アームロボットとか4足2足色々ロボットはあるんですが、ロボコン等でよく見る車輪のロボットの制御はいずれやることになると思うので、オムニホイールとメカナムホイールは知っておきましょう。あとクローラと独立ステアリングくらいですかね。オムニとメカナムはとりあえず抑えましょう。それに関してやることなんですが、例えばjoystick(PS4のコントローラとか)で制御する場合、速度ベクトルw=[Vx, Vy, Wz]tを考えると、それをどんな車輪ロボットだとしてもそれぞれのモータの角速度に変換する必要性がでてきます。これは行列計算で表されますが、これを導出したり、実機が実際にあれば動かしてみるのが良いと思います。
あまり書くことがぱっと思いつかなくなってきたのでここらで区切りをつけようと思います。とりあえず、プログラミングやりつつマイコンを使って組み込みまわりを勉強してみることと、CLIに慣れる、制御工学の勉強をちょっとしてみる、余力があれば高度な制御とかネットワークとか色々やってみるくらいで良いと思います。どれも深追いすると沼なので、一つ一つマスターするというよりは今興味あるものとか、できそうなところとか、自分のモチベーションとも相談しながらのんびりやっていったら良いと思います。
おわりに
何時に起きたか忘れましたが、ぶっ続け4時間くらい?で余裕持って1万字以上書けたのは自分でも少し驚きました。あまり止まった記憶もない..。勢いでだらだら書いてみるのも悪くないかもしれません。本当はもう少し全体的に突っ込んだ話をしたかったのですが、リライトする元気が出ないのでしません。そのうちまともな形でまとめたい感はあります。モデル化とか数学の要素とかは流石にもうちょい触れたほうがよかったかも…。
