■ はじめに

前回、SLAMをMiniGridに活用するコードを作ってみました。せっかく作ったのでこれを使ったソフトを何か作ってみたくなりますよね?

でも、出来るかな?

という事でChatGPTさんに聞いてみました。

>「頑張ればできるで!
但し、途中で投げる可能性も高いから、何か工夫が必要やな」

とりあえずは、やっていいらしいけど工夫ね…
 確かに、むづかしくなると投げる自信はあるな。

よし、これまでChatGPTさんの意見を読み飛ばしていたけど、今度は「まとめ直し」を入れて、理解度が上がる様にしよう。

この記事では、SLAMを使った配送問題に初めて取り組み、
コーディング前に仕様作成で何を考え、どこで悩んだかをまとめます。

それでは、仕様書を頑張って書きましょうか。




■ 仕様書を頑張って書きます

実はこの仕様、元ネタがあります。

名古屋・栄でイチゴの配達をロボットでやる実証実験のニュースをテレビでみました。

ちょうどいいので、これをやりますが
ただ真似るのも能がないので、若干のアレンを入れました。

・8方向自由に動けるメカナムホイール
・360°対応のカメラとLiDAR

開発と作製コストが増える?
実験用なので考えてません(笑)

地図はこうしました↓

■■■B・・▲▲▲▲・・A■■■0
■■■■・・▲▲▲▲・・■■■■1
■■■■・・▲▲▲▲・・■■■■2
■■■■・・②###・・■■■■3
■■■■・・###②・・■■■■4
■■■■・・▲▲▲▲・・■■■■5
・・・・・・▲▲▲▲・・・・・・6
・・・・・・▲▲▲▲・・・・・・7
▲#①▲▲▲▲▲▲▲▲▲▲#①▲8
▲##▲▲▲▲▲▲▲▲▲▲##▲9
▲##▲▲▲▲▲▲▲▲▲▲##▲0
▲①#▲▲▲▲▲▲▲▲▲▲①#▲1
・・・・・・▲▲▲▲・・・・・・2
・・・・・・▲▲▲▲・・・・・・3
■C■■・・②###・・受■■■4
■■■■・・###②・・■■■■5
0123456789012345

■:建物
#:横断歩道
▲:道
・:歩道
①②:信号(下は横断歩道)
ABC:配送場所
受:受け渡し場所

動くもの
・車:道を走る
   ロボットがぶつかると終了
・人:歩道を走る
   ロボットがぶつかると終了
   ロボットの視界を遮る

書いてたら鬼仕様になってきました。

全てをここに載せるのはムリなので、Githubに載せました。

→Githubリンク(↓のURLをGoogle検索に貼ってね)

github.com/logicmaker256-prog/Vehicle_Routing_Problem/blob/main/0.Overall_Specifications.txt

■仕様で揉めた件

イロイロ揉めましたが、下の件が大きいかな?

① 回転する/回転しない問題

 最終稿
 オムニホイールにしたので回転せず、
 そのままの姿勢をたもつ
 この流れでカメラとLiDARを360°対応に
 しました。

② どうやってミスらない表示にするか問題

 最終稿
 オムニホイールを履いていて、回転も
 しないので、ロボット中心の
 トップダウン表示が最適

③ 領域外をどうするか問題

 最終稿
 建物表示で埋める
 追加:領域外では何もしない

実は、この後の文章が山とありまして…

0.アクション仕様
1.step()擬似コード
2.RGBチャンネル厳密定義
3.観測仕様
4.step()の厳密定義
5.step()の詳細擬似コード
6.観測RGBの順序
7.render_observationの完全擬似コード
8.CNN+GRUの設計仕様

ここまでやって、やっとコーディングです。ここまで、決め事をしたり、いじったりしたのですが、書ききれないので列挙までとしました。

内容の知りたい方は、Githubにあげておきますので、ご参考まで。

(↓検索方法は前と同じ)
github.com/logicmaker256-prog/Vehicle_Routing_Problem/blob/main/

■さらっと知らない言葉がありますね

「えっ、そんなん無いけど」
という方は、ここは読み飛ばしてください🙏

「GRU?なんじゃいそれ?」
と、僕は思ったので、ChatGPTさんに初心者向けに解説してもらいました。

>「GRU(Gated Recurrent Unit) は 時間の流れがあるデータを扱うメモリー構造で、RNN → LSTM → GRU の流れで生まれた、シンプルで使いやすい改良版です

簡単に言うと、
・RNNでは憶えがみじかすぎ
・LSTMは憶えているけど構造が複雑すぎ
・GRUは憶えてる期間と構造が丁度いい
と言う感じですかね」

RNNとLSTMは本に書いてあった事を思い出しました。
なるほど…その流れだったんですね。

■コーディングが出てきませんね。

今回は、仕様や見え方の問題だけでコーディングまでとても行けません。

今回の仕様は、過去一(現役時代を含め)
コーディング前の準備をしていますね。

あっ、大丈夫だとは思いますが、今回のコードは全て擬似コードなので動作させても、何も起こりません。

あしからず。

■ 結果:

今回は、MiniGridをSLAMで荷物配送にトライしようとあくせく仕様決めをやってみましたが、いかがだったでしょうか?

軽い気持ちでやり始めたのですがドキュメントの海に沈みそうになってます。

また、新たに「GRU」という概念も出てきてChatGPTさんから
>「これは、もう研究レベルやね」
と脅されています。

■ 今回の学び:

今回、ちょっとした思い付きで
「SLAMによる配送問題」
をやってみました。

とりあえすで取り組んだ、
  「自分の言葉で文章を残す」
が上手くはまりコーディングまでたどりつけました。

ここで、次のような事を学びました。

・問題は コードより前に決まる
・仕様書くと「分からないこと」が見える
・投げない工夫は技術力と同じくらい大事

今、コーディングに取り組んでいますが、コーディングはコーディングでトラブルが待ってました。

今回やってるドキュメントの束とChatGPTさんが助けてくれると信じてエラーの海を乗り越えていきます!!

■ まとめ

SLAM使った配送問題に取り組んでます。

コーディング入った途端、エラーの束が出ているので、今回はコーディングなしでの話になってしまいました。

でも、諦めない限りエラーはとれるはず!

急がす、のんびりやっていきます。