SAPのすみっこ

SAP業界のすみっこに住んでます。すみっこから小さな声で発信します。

SAP業界のすみっこから小さな声で発信します

ドローンで品目を移動したら、SAP ERPで在庫転送する

勉強しているものを無理矢理つなげるシリーズ、第二弾です

 

※ちなみに第一弾はこちら↓

www.sapsumikko.jp

 

 

 ありがとうございます。調子にのります♪

 

今回は以下を繋げてみました。
・ドローン(Tello)
・MAMORIO
・Raspberry Pi
・SORACOM Air
・SAP ERP

 

 

 

【経緯】

・Raspberry Piで何かやりたかった
SORACOM Airを使いたかった
・SORACOMの玉川社長がSAP TechJamで持っていたドローン(Tello)を触りたかった
・ブログ的にSAPを使わないといけない気がした

 

ドローン(Tello)はこちら

【国内正規品】 Ryze トイドローン Tello Powered by DJI
 

ascii.jp

 

 

SORACOMは、こちらを使用しています。

3G USBドングル AK-020 SORACOMスターターキット

3G USBドングル AK-020 SORACOMスターターキット

 

 

 

SORACOMに関する過去記事はこちら

www.sapsumikko.jp

www.sapsumikko.jp

 

 

  

【仕様検討】

さて、今回のデモ内容の検討です。

ドローンを飛ばして、Raspberry PiからSORACOM経由でデータ飛ばして、SAPで何かする。。。

 

SORACOM Beamを使って、SAP Cloud Platformに飛ばして、そこでゴニョゴニョがカッコイイなと思ったのですが、私の現時点での技術力が足りず。。。


なので、まずSAPはERP(オンプレ)を採用。


SORACOMは、SORACOM Airでデータを送信するだけとする。

 

ドローンを飛ばすのだから、位置情報を使って何かしたいなと思いましたが、実装方法が思いつかず悩みました。Raspberry Piをドローンに載せて飛ばす必要があるのかなとか、落ちたら壊れちゃうかなとか。

 

悩んでいた中、先日参加したIBMイベント「Think Japan」にて、首から下げる受講票にBeacon機器がついていたので、これだ、と。


Beaconをドローンに載せて位置情報を発信、Raspberry Piで受信することに決定。
(Beaconは固定された位置から発信するものだと勝手に思い込んでいました)

 

Beacon発信について調べてみると、以前から別で気になっていた忘れ物防止の「MAMORIO」が使えそうだったのでこれに決定。

 

 

 

上記で検討した内容をもとに、SAP ERPで行える処理を考えてみたところ、在庫管理モジュールでの在庫移動が簡単に実現できそうだなと。


そこで、上記をつなぎあわせた「プラント内の在庫移動を想定したデモ」をやってみようと思いました。

 

つなげたイメージはこちら

 

 つなげたイメージはこちら

 

f:id:mahko2:20180628084839j:plain

なんのこっちゃですよね。

 

ざっくりですが、今回のデモの手順は以下

  1. 保管場所Aから保管場所Bにドローンで品目を移動
  2. 保管場所Bで、ドローンに載せているMAMORIOのBeaconを受信したら、Beacon情報をGmail(添付ファイル付き)で送信
  3. SAPサーバ機でGmailの添付ファイルを取得
  4. 添付ファイルの情報をもとに、SAP ERPで入出庫伝票登録(在庫転送)

 

 

 

【検討補足】

 

ネットワーク

・保管場所B内のWifiでRaspberry Pi⇔SAPサーバを通信するとSORACOMを使用しないで済みますが、今回はあえてSORACOMで。
・SORACOMの別サービス(Canal?)や、中継サーバを用意することでRaspberry Piを固定IP⇒サーバからのSSH接続ができそうだが、今回はパス(勉強不足)

 

SAP ERP
・保管場所は同一プラント内に存在する想定で、保管場所転送を行う
品目のロット:Mamorio = 1:1 を前提とする(移動前の保管場所に存在するロットの全数量を移動)

 

自動化
・可能な限り実装する (Raspberry Piでの処理、サーバ機のファイル取込、SAPのプログラム実行)

 

品目の選定
・せっかくなので、ドローンに何か品目を載せよう。重いとドローンの飛行に影響がありそうなため、小さくて軽いもの。「小さくて軽くてみんなが知っているもの」を想像したらチロルチョコが浮かんだので、こちらを採用

チロルチョコ チロルチョコ<バラエティパック> 27個×10袋
 

  

 

言い訳
・色々無理があることは十二分に承知
・そのうちQiitaにまとめ、、たい気持ちはあります

 

さて、実装します

 

 【実装】

以下の内容で実装。

 

※実装時、以下の値を使用

 保管場所A = '0100'

 保管場所B = '0200'

 


ドローン(Tello)の制御

 

保管場所Aから保管場所Bへの飛行をプログラミングで制御します。
使用したのは、iOSアプリの「DroneBlocks」

DroneBlocks

DroneBlocks

  • Dennis Baldwin
  • 教育
  • 無料

 

 

こちらを参考にさせていただきました↓

【Drone Blocks】iPhoneアプリで簡単にできる!ドローンTelloのプログラミング【設定方法と使い方】 - スカイフィッシュのドローンブログ -DJIのDroneで空撮する一般人のBLOG-

 

このような制御に(保管場所間の距離は短めに)

f:id:mahko2:20180629001931p:image

 

 

飛ばしたドローンはこちら。

Telloに、チロルチョコとMAMORIOを載せてます。

f:id:mahko2:20180629001901j:image

 

※重さによる飛行への影響はあったのかな?

Tello = 80g

チロルチョコ = 3g

MAMORIO = 3g

 

動画はうまくとれなかったので、そのうち、、

 

 

保管場所Bへの移動の検知

市販のMAMORIOを使用。

 

MAMORIOのBeaconをRaspberry Piで受信(Node.js使用)。
MAMORIOの距離がRaspberry Piに近くなったら、ファイルに情報を書き出す。

 

こちらを参考にさせていただきました↓

RaspberryPi3でMAMORIOの信号を受信する - uepon日々の備忘録

Raspberry PiでiBeaconを受信する(Node.js + bleacon)

 

ファイル項目は「MAMORIOの個体情報(uuid/major/minor)」と「入庫先となる保管場所のコード(固定値)」。

 

MAMORIOの個体情報については、以下参照

MAMORIOが届いたので解析したかった - もみあげあしめ

 

※以下、上記より引用

iBeacon本体のデータ構造
割り当て内容 備考
b9407f30-f5f8-466e-aff9-25556b57fe6e UUID 企業・組織の識別
0xBE49 Major iBeaconのグループ
0xF747 Minor グループ内のID
0xB5 RSSI 1m 地点で -75dB

 

 


Raspberry Piの電源は、モバイルバッテリーを使用。ディスプレイの電源はRaspberry PiのUSBポートからとってます。

 

保管場所Bへの設置イメージはこんな感じ↓ 

f:id:mahko2:20180627230925j:image

 

 


移動情報ファイルの送信
Raspberry Piで受信した位置情報をファイルに書き出し、SORACOM AirでGmail送信。Gmail送信は、Pythonで。

※Cronで定期処理化

 

こちらを参考にさせていただきました↓

node.jsからExcelのCSVやTSVファイルを書き出す方法を解説します

Cronの使い方 - Raspberry Pi 3 & Python 開発ブログ☆彡

 

 

実際のGmailはこんな感じ

f:id:mahko2:20180627080850j:image

 

 

添付ファイルは、これ↓

f:id:mahko2:20180627080853j:image

 

 

 


移動情報ファイルの受信
サーバにて「Mail Attachment Downloader」を使用し、Gmailの添付ファイルをサーバに転送。

Mail Attachment Downloader の評価・使い方 - フリーソフト100

 ※「Mail Attachment Downloader」のスケジュール機能で定期処理に。

 

こんな感じ

f:id:mahko2:20180627233328j:plain

 

 

引き続き、SAP ERPの実装を行います

 

 
SAP ERPの在庫転送

アドオンテーブルとプログラムを作成。

アドオンテーブルで「Mamoriteの個体情報(uuid/major/minor)」と「品目/ロット」の紐付けを管理。

アドオンプログラムの処理は以下(最低限の処理のみ)。

  • ファイル読込
  • 品目情報取得
  • BAPI_GOODSMVT_CREATEを実行し、入出庫伝票を登録

入庫先の保管場所は、ファイルより取得。
出庫元の保管場所は、テーブルMCHBより取得(品目のロット:Mamorio = 1:1の前提より)。

 

入出庫伝票登録については、このへんを参照 

入出庫予定を使用しないワンステップ処理: 保管場所 (SAP ライブラリ - 商品ロジスティクス)

 

アドオンテーブル

f:id:mahko2:20180629011911j:plain

 

プログラム実行前の在庫

f:id:mahko2:20180629011651j:plain

 

アドオンプログラム実行

f:id:mahko2:20180629011348p:plain

 

登録した入出庫伝票f:id:mahko2:20180629011518j:plain

 

 プログラム実行後の在庫

f:id:mahko2:20180629012200j:plain

 

 

ということで、無事に在庫移動ができたので、デモ終わり。

最後まで繋げることができました。

 

最後までお読みいただき、ありがとうございました。

 

感想等ありましたら、コメント欄もしくはTwitterでお待ちしております。