1.この記事の対象の方と完成品
1-1 この記事の対象の方
- トラックや長台車の積載率向上にお悩みの方
- ドローンが大好きで非エンジニアから情報システム部へ異動された初心者の方
- ドローンは物を運ぶだけじゃないと思っている方
- 画像認識などを活用しDXに取り組んでいる方
- 「あれっ?物流業界の問題っていちいち大規模開発の必要っていらないよね?」と思った方
私も新米ですがアイデアを形にしようと思いノーコード開発へ挑戦しました。よろしくお願いいたします。
完成品
「カート車の積載率判定を画像認識でする仕組み, および画像を提供するドローン」
(注意)人が多い営業中の現場でドローンを飛ばすのが難しかったため
・実際の現場での計測
・安全な場所で現場の実物写真を使用した、定点およびドローンでの計測
二回に分け計測いたしました。(学習画像は現場から調達しています)、
1-2 使用したツール
・使用したツール IoT系統
Node-Red,Teachable Machine,DJI社製ドローン「Tello Boost Combo」
・Node-Red説明記事
https://blog.secondselection.com/column/how-to-node-red/
・Teachable Machine説明記事
https://ledge.ai/teachable-machine-try/
・使用したツール Python系統
Python3.7,ANACONDA NAVIGATOR,Jyupyter,及びドローンを飛ばすためのSDK「Tello.py」
・Pythonとは
https://atmarkit.itmedia.co.jp/ait/articles/1904/02/news024.html
・ANACODAやJyupyterとは
https://and-engineer.com/articles/YRXgARAAACRz12i3
https://udemy.benesse.co.jp/development/python-work/jupyter-notebook.html
・tello.py説明
https://qiita.com/hsgucci/items/3327cc29ddf10a321f3c
・SDKって何?
https://www.redhat.com/ja/topics/cloud-native-apps/what-is-SDK
*所要時間 各ユーザー登録~制作まで、合計30H程度(この記事書いてる時間や調整にかかった時間は除く)
1-3 この記事の狙いと構成
この記事はブラックボックスになるケースが多いトラック(台車)の積載率を画像認識を利用することにより「見える化」へ挑戦しています。
ですので
・ドローンのセッティング、Pythonを使用したプログラミング
・現場での計測、機器設定
二つの話が必要に応じて交錯します。
2 このコンテナ、あとなんぼ積めるんや
2-1 「あとどれぐらい積めるか」わからない
物流業界は「陸」「海」「空」それぞれが違う基準で動いているうえに団塊の世代に代表される大ベテラン勢が「創意と工夫」で戦後から営々と日本の繁栄を支えてきました。
しかし、令和に入り引退される方が多くなる中で残されたのは「昭和の時代の仕組みや仕事」でした。
結果、「現場にいなければ貨物積載率が把握できない」「あとどれだけ積めるかわからないから、完全に満荷になるまでトラックを出さない」といった働いている人への負荷を前提としたシーンが散見され、「非効率」が常態化しています。
この辺をどうにかできないかなぁ、と思い自分で積載率を判定できる仕組みを作ることに挑戦しました。
3 要件定義~~画像認識・ドローン導入~ユーザーテスト
3-1 要件定義
まず何がKPIなのか?実態をインタビューするところから始まりました。
「積載率」といっても大型トラックから貨物用コンテナ、運搬用台車まで様々です。
これを「作る人の独断と偏見」進めてしまうとろくなことになりません。
結果
- 実務では長台車の積載効率を気にしている
- 店舗向けへ小分けされた瞬間が台車が重要である
- 人手不足でいちいちチェックすることはできない。見に行ってくれる仕組みが欲しい
といったことがわかりました。
よって、押さえる数値は「長台車の積載率」
方法論は「ドローン等を使用した積載率判定」
となりました。
3-2 ドローン実装
さて、いよいよドローンの実装です。
そして、私が勢いで買って未開封のままだったDJI社製ドローン「Tello Boost Combo」が一年ぶりに開封される時が来ました!
そして、ドローンからの画像に用があるのでPythonというプログラムを使ってパソコンから操作できるように設定開始。
実際の設定画面
#!/usr/bin/env python
import socket
import time
#Create a UDP socket
socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
tello_address = ('192.168.10.1' , 8889)
#command-mode : 'command'
socket.sendto('command'.encode('utf-8'),tello_address)
print ('start')
socket.sendto('takeoff'.encode('utf-8'),tello_address)
print ('takeoff')
socket.sendto('streamon'.encode('utf-8'),tello_address)
time.sleep(5)
socket.sendto('left 50'.encode('utf-8'),tello_address)
time.sleep(5)
socket.sendto('forward 200'.encode('utf-8'),tello_address)
time.sleep(5)
socket.sendto('flip l'.encode('utf-8'),tello_address)
time.sleep(5)
socket.sendto('land'.encode('utf-8'),tello_address)
print ('land')
そして、見よ!この雄姿!!(事務所を飛ぶドローン)
他の人も物珍しさに集まってきます。
が・・・・・・・・・・・・・・・・・・・・・
ここで問題が発生
ドローンからのライブストリーミング設定がどうしてうまくいきません。
そして、できたとしても「積載率判定」する機械学習へ同期することが技術的に厳しいことが判明。
プランBとしてドローンが送ってきたライブ動画をいったんスマホで受けて積載率判定へかける方法へ変更
3-3 現場での学習と数値計測
同時に現場での学習素材収集や機械学習構築も進めていました。
Node-Red画面
3-4 測定結果
「これって測定成功ですよね」(現場に同席したIさんの言葉)
人が沢山いる現場で撮影や実際にドローンを飛ばすことができないので、PCのカメラを使って測定を開始。
実際にこちらで振り分けた積載率に近い数値へ収まっています。
今回の目的は「積載率の判定」だから最低限の目的は達成できたー。
(翌日 紙を使った再測定でも似たような数値が出ました)
6月8日追記 そしてドローンからの画像はこんな感じ(保存した測定プログラムが呼び出せなくなってしまったので実際の撮影動画からのキャプチャ)
4.まとめ
最期は無事に終了できましたが、途中は期限内に終わりそうになくひやひやしました。
この記事が初心者でも「ここまでできる」と全国の物流関係者へ届けば幸いです。