Amazon Web Services ブログ

Brisa Robotics が AWS を使用してロボティクスの運用を改善する方法

この投稿では、Brisa Robotics がアマゾン ウェブ サービス (AWS) を活用して、さまざまな車両からデータを収集、保存、処理し、顧客業務を改善する方法について説明します。

Brisa は、自動運転ではない産業機械を自動運転車両に改造して、データを収集して顧客が主要なパフォーマンス指標を追跡し、業務を改善できるようにしています。彼らの使命は、スクラップを売って新しい機械を購入する代わりに、既存のインフラを活用して古い機械を再利用することで、顧客の効率を高めることです。Brisa は、フォークリフト、パレタイザー、テレハンドラーなどのマテリアルハンドリング機器 (MHE) を強化するための独自のモジュラーロボットキットを提供しています。これらのロボットキットは、Brisa 独自のデータ収集プラットフォームを含むように MHE に後付けされます。キットは、在庫管理ユニット (SKU) の追跡、検査 (欠陥、物体検出、バーコード)、資材の移動など、さまざまなユースケースをサポートします。これらのユースケースをデータとメトリクスでよりよく可視化することで、Brisa の顧客は倉庫のレイアウトを最適化し、より適切に計画を立てることができます。

課題: 柔軟なデータ収集ソリューションの構築

世界最大の醸造会社は、生産性と安全性を向上させるために、倉庫業務と在庫の可視性を高める必要がありました。そこで Brisa は、顧客がより良い意思決定を行うためにデータを収集してストリーミングするソリューションの作成に着手しました。

お客様のオーバーヘッドやメンテナンスコストが増加しないようにするため、Brisa はお客様のインフラストラクチャを変更しないように努めています。彼らは、既存のインフラストラクチャを一切変更せずに顧客を支援したいと考えていました。さらに、Brisa は、さまざまなワークフローや要件を持つ顧客に役立つ単一のソリューションを提供する必要がありました。

Brisa が考慮すべき要件は、お客様によって異なります。たとえば、データダッシュボードを工場内のネットワークでのみ利用したい顧客もいれば、オンラインで利用したい顧客もいます。さらに、クラウドに送信する前にデータを収集するローカルコンピューターが必要なお客様もいれば、ロボットから直接データを送信したいお客様もいます。Brisa は、さまざまなシナリオに合わせてさまざまなプラットフォームで実行できる柔軟なツールを必要としていました。

目標は、顧客がインフラストラクチャを変更することなく、さまざまな顧客のデータやメトリクスを収集して利用できる柔軟なソリューションを開発することでした。

ソリューションの概要

Brisa は、MHE ロボットからデータを収集し、そのデータを AWS でストリーミング、処理、保存し、顧客向けのライブカスタムダッシュボードに取り込むソリューションを開発しました。これはお客様のインフラストラクチャを変更することなく実現し、ワークフローは安定したインターネット接続の有無にかかわらず機能します。

  1. AWS IoT Greengrass V2 コンポーネントは、ストリームマネージャーなどのビルド済みコンポーネントと共に、ロボットにデプロイされます。
  2. データは、サーバー (ロボットまたはロボットネットワーク上の外部マシン) で実行されているクライアントアプリケーションから収集されます。このアプリケーションは、カスタム Greengrass コンポーネント、または Greengrass 外部のどちらでも実行できます。
  3. ストリームマネージャーコンポーネントは、Amazon Kinesis Data Streams (Amazon KDS)Amazon Simple Storage Service (Amazon S3) にデータを直接ストリーミングします。
  4. Python ベースの AWS Lambda 関数は、Kinesis Data Streams からの未加工データを処理し、Amazon Timestream データベースに保存します。

データが AWS に保存されると、Brisa の Web アプリケーションは Amazon Timestream にクエリを実行してダッシュボード用のデータを収集できます。このワークフローの詳細については、以下で説明します。

データの収集

Brisa は、物体検出、ロボットの位置、ロボットの速度、フォークの動き、システム監視など、ロボットに関するデータを収集します。そのためには、ロボットアプリケーションを構築するためのオープンソースのライブラリとツールセットである Robot Operating System 2 (ROS2) を使用しています。ROS2 により、Brisa はシミュレーション、ビルドツールなどのコミュニティで構築されたノードやデバイスを使用して、ロボットアプリケーションをより迅速に構築および開発できるようになりました。ROS2 の設立時の技術運営委員として、AWS はコミュニティに欠かせない存在です。そのため、AWS で ROS2 ツールを実行するためのさまざまな選択肢が提供されています。AWS は Brisa に ROS2 と最も深く統合された、最もスケーラブルなクラウドプラットフォームを提供しています。

データのストリーミング

Brisa は ROS2 トピックをサブスクライブし、AWS IoT Greengrass V2 ストリームマネージャーを使用してそれらのイベントを Kinesis Data Streams に転送します。AWS IoT Greengrass は、オープンソースの Internet of Things (IoT) エッジランタイムおよびクラウドサービスであり、デバイスで IoT アプリケーションを構築、デプロイ、管理するのに役立ちます。AWS IoT Greengrass を使用すると、エッジデバイスを AWS サービスまたはサードパーティのサービスに接続できる、コンポーネントと呼ばれるビルド済みまたはカスタムのソフトウェアモジュールを使用してエッジアプリケーションを構築できます。ストリームマネージャーコンポーネントを使用すると、Greengrass コアデバイスから AWS クラウドに転送するデータストリームを処理できます。

Brisa が Greengrass ストリームマネージャーを選んだのは、断続的なネットワーク条件下でもオフラインで実行でき、データのバッファリングや AWS への送信について心配する必要がないからです。データはローカルに保存され、インターネット接続がアクティブになるまで圧縮されます。このようなワークフローを管理する代わりに、Brisa はデータを用意されたストリームに送信し、独自のロボットワークフローに集中できます。Greengrass ストリームマネージャーはロボット自体で実行されるか、ロボットがデータを送信するローカルコンピューターで実行されるため、この設定はさまざまな顧客のニーズに柔軟に対応できます。

Brisa では、クライアントアプリケーションが実行されており、ストリームマネージャーを起動するサーバーがあります。お客様によっては、このサーバーはロボット上に配置することも、ロボットネットワーク上の外部マシンに配置することもできます。ストリームマネージャーの設定の詳細については、ストリームマネージャーのドキュメントと AWS IoT Greengrass V2 による ROS ロボットのデプロイと管理を参照してください。

Brisa は ROS2 ノードを使用してセンサーからデータを収集しました。彼らはROS2 パッケージを作成することでこれを実現しました。

新しい ROS2 パッケージを作成するサンプルコマンドは、下記のとおりです:

cd ~
mkdir -p ws/src
pip install stream_manager
cd src
ros2 pkg create \
  --package-format 3 \
  --build-type ament_python \
  sm_upload

Brisa は Greengrass ストリームマネージャーを通じて Kinesis Data Streams と Amazon S3 バケットにデータを送信します。これは、ROS ノードでストリームマネージャーの Python SDK を活用することで実現しています。以下は、ROS からストリームマネージャーにデータを送信する Brisa の実装と同様の ROS ノードのサンプルです。

import json
import rclpy
from rclpy.node import Node
from stream_manager import (
      ExportDefinition,
      KinesisConfig,
      MessageStreamDefinition,
      StrategyOnFull,
      StreamManagerClient,
)

STREAM_NAME = "SomeStream"
KINESIS_STREAM_NAME = "MyKinesisStream"


class StreamManagerPublisher(Node):
      def __init__(self):
      super().__init__("aws_iot_core_publisher")
      timer_period = 3  # seconds
      self.client = StreamManagerClient()

      exports = ExportDefinition(
            kinesis=[
                  KinesisConfig(
                  identifier="KinesisExport" + STREAM_NAME,
                  kinesis_stream_name=KINESIS_STREAM_NAME,
                  )
            ]
      )

      # Create the Status Stream if it does not exist already
      try:
            self.client.create_message_stream(
                  MessageStreamDefinition(
                  name=STREAM_NAME,
                  strategy_on_full=StrategyOnFull.OverwriteOldestData,
                  export_definition=exports,
                  )
            )
      except ConnectionRefusedError as e:
            self.get_logger().error(f"Could not connect to the stream manager: {str(e)}")
            raise
      except Exception:
            pass

      # Create the message stream with the S3 Export definition.
      self.client.create_message_stream(
            MessageStreamDefinition(
                  name=STREAM_NAME,
                  strategy_on_full=StrategyOnFull.OverwriteOldestData,
                  export_definition=exports,
            )
      )

      self.timer = self.create_timer(timer_period, self.timer_callback)

      def timer_callback(self):
            self.client.append_message(STREAM_NAME, json.dumps({"robot_id": "C3PO","timestamp": datetime.datetime.utcnow().isoformat(),"x": 1.0, "y": 1.1, "z": 3.0}).encode("utf-8"))
      self.get_logger().info("Successfully appended S3 Task Definition to stream")

def main(args=None):
      rclpy.init(args=args)
      sm_publisher = StreamManagerPublisher()
      rclpy.spin(sm_publisher)
      sm_publisher.destroy_node()
      rclpy.shutdown()
if __name__ == "__main__":
      main()

この ROS2 パッケージをビルドします。

colcon build --packages-up-to sm_upload
source install/setup.bash
ros2 run sm_upload sm_upload

データの保存

Brisa はストリームマネージャーを使用して、画像や動画など、一部のデータを Amazon S3 にストリーミングしてオブジェクトストレージに保存します。テレメトリーデータなどの残りのデータは Amazon Kinesis Data Streams にストリーミングされ、AWS Lambda 関数で処理された後、専用の時系列データベースである Amazon Timestream に保存されます。

Amazon Kinesis Data Streams は、アプリケーションやサービスのログからデータを取り込んで収集し、データレイクにデータを配信するのに役立ちます。ストリームの作成の詳細については、「データストリームの作成」を参照してください。

Brisa は AWS Lambda 関数を使用して、Amazon Kinesis から Amazon Timestream への抽出、処理、ロード (ETL) オペレーションをオーケストレーションします。Lambda を選んだ理由は、サーバーレスであるため、コストがリクエスト数と実行時間 (コードの実行にかかる時間) によって決まるためです。AWS のマネージド ETL 機能を使用する他のオプションも検討しましたが、シンプルな Lambda 関数を使用することが、現在の ETL 要件に最も適したアプローチであることがわかりました。

新しく保存したデータのダッシュボード上でのクエリ

データが Timestream に保存されると、Brisa は時系列関数を活用してシンプルで効率的なクエリを実行し、カスタムの時間ベースのメトリクスを表示できます。Amazon Timestream コンソールから、SQL ライクなリクエストをテストできます。これらの概念の詳細については、「Timestream の概念」と「コンソールの使用」を参照してください。

Brisa が実行している、興味深いビジネスデータを抽出できるクエリの例を次に示します。このクエリでは、機器の位置が 5 秒のフレームでグループ化され、X 座標と Y 座標の平均が取得できます。常にすべてのデータポイントをフェッチしないことで、クエリのコストを最適化するのに役立ちます。

SELECT ROUND(AVG(x), 2) AS avg_x,
	ROUND(AVG(y), 2) AS avg_y,
	BIN(time, 5s) AS binned_timestamp
	FROM database.table
WHERE x IS NOT NULL
	AND y IS NOT NULL
	AND robot_name="C3PO"
GROUP BY BIN(time, 5s)
ORDER BY binned_timestamp ASC

Python の場合は boto3、JavaScript の場合は AWS SDK for JavaScript など、さまざまな SDK を用いて、収集したデータをクエリすることもできます。利用可能なプログラミング言語の全リストは、「AWS での構築ツール」でご確認いただけます。

次に、これらのクエリを使用して関連データを顧客ダッシュボードに取り込みます。

Brisa は、AWS SDK for pandas (旧称 AWS Data Wrangler) を使用してバックエンドから Timestream クエリを実行し、ダッシュボードと API 用のデータを取得して整理しました。その後、取得したデータをフロントエンドのダッシュボードに表示します。

結果

データが AWS に保存されると、Brisa は収集した情報を簡単にクエリして調整し、ライブダッシュボードや KPI レポートとして顧客に提供できます。Brisa のメトリクスとビジュアライゼーションのライブラリはモジュール式かつ動的であり、お客様のニーズに応じて新しい統合やユースケースに対応できるように継続的に更新されています。この機能により、お客様は倉庫内の全体的な安全状況と効率を改善することができます。

Brisa のソリューションを導入する前は、冒頭の醸造会社では主にトラッキングを手動で処理していました。ダッシュボードとレポートのおかげで、Brisa は次に示す価値をお客様に提供できるようになりました。

  • より高い精度: 倉庫のボトルは高さ 5 メートルまで積み上げられているため、人が簡単に識別できません。これにより、追跡が困難になっていました。Brisa のソリューションは顧客のためにカメラ画像を収集し、保管されているボトルを正確に識別できるようにします。
  • データ頻度の増加: 自律型ロボットは、人の手動スキャンと比較して 2 倍の頻度でスキャンすることができます。
  • 安全性の向上: 多くの場合、フォークリフトと在庫確認の作業者は同じ場所で業務を行っています。ロボットにカウントを任せることで、危険なフォークリフトと作業者の間の事故のリスクがなくなるため、安全性が向上します。
  • 運用に関するより良い洞察: ライブダッシュボードのヒートマップにより、Brisa のお客様は業務のボトルネックを特定し、スケジュールを改善できます。このような運用上の洞察は、人間による観察では不可能でした。

以下は Brisa のダッシュボードのスクリーンショットです。

Brisa の社内テストエリアにおける、重機の位置ヒートマップ。理想的には、ロボットが停止するエリアは存在しないはずですが、このヒートマップを見ると、ある場所でロボットが他のエリアよりも頻繁に停止していることがわかります。これには複数の理由が考えられます。ロボットのルートが最適化されていない、標識に不備がある、作業計画が不十分、人や他のロボットがエリアを塞いでいる、あるいはより深刻な問題などです。この問題を解決するために、Brisa はカメラの画像も収集して、顧客が何が起こったのかを見られるようにしています。画像により、醸造会社はレイアウトを改善する方法や計画を変更する方法を理解できるため、ロボットは作業を一時停止することなく安定動作することができます

カメラ画像とロボットビューを含むダッシュボード。ダッシュボードは、ストリームマネージャーによってデータが保存された Amazon S3 からこれらのファイルを取得します

顧客サイトの画像を表示するダッシュボード

Brisa が顧客に表示するいくつかのメトリクスを示すダッシュボード。これらのメトリクスはすべて Timestream からクエリされます

標準的なメトリクス (所要時間や距離など) とは別に、AWS を使用したモジュラー設計により、Brisa は次のようなカスタムインテグレーションを顧客に簡単に提供できるようになりました。

  • 車両の停車回数: 車両の停車数は、醸造会社の社内で使用されるメトリクスです。ダッシュボードには、停車のたびの停止時間が表示されます。お客様はダッシュボードの結果をクリックすると、その時点で発生した関連イベントを確認できます。たとえば、車両が停止しているときに、人が検出された写真が表示される場合があります。その後、ユーザーは画像をクリックして、倉庫内のどこでいつ発生したかを確認できます。これにより、顧客は時間の経過に伴う停止パターンを理解し、倉庫の効率を向上させることができます。
  • 負荷のサマリー: ロボットは、充電中や停止が制限されている場合を除いて、ほとんどの時間移動するはずです。

Brisa は、車両や稼働するロボット、各顧客にとって重要な KPI に応じてダッシュボードをカスタマイズします。

このデータストリーミングパイプラインにより、Brisa は、ワークフローを変更することなく、在庫を追跡し、運用上の問題についてより深い洞察を得るためのツールを顧客に提供できるようになりました。この機能により、醸造会社などのお客様は倉庫の運用効率と安全性を向上させることができます。

Brisa は、より多くのクライアントや種類のロボットと統合し、洞察力に富んだカスタマイズされた指標をダッシュボードに絶えず追加しています。

Brisa は、在庫をより頻繁かつ正確に管理し、運用 (手動/自動) のボトルネックを特定して解決し、実際のデータに基づいて意思決定を行うことを支援します。詳細については、www.brisa.tech の Web サイトをご覧ください。

著者について

Erica Goldberger

Erica Goldberger は、アマゾン ウェブ サービス (AWS) でロボティクスを専門とするソリューションアーキテクトです。ソリューションアーキテクトになる前は、技術カリキュラム開発者として AWS 向けにコンテナや IoT などのトピックに関するトレーニングコースを作成していました。エリカはペンシルベニア大学でロボット工学の修士号を取得しています。

Sophie Pagalday

Sophie Pagalday は、AWS for Robotics のシニアプロダクトマーケティングマネージャーです。製品マーケティングのキャリアのほとんどをロジスティクスとサプライチェーンの分野で過ごし、エンタープライズワークマネジメントシステムから産業オートメーションやロボット工学に至るテクノロジーに焦点を当ててきました。Sophie は、お客様の支持者として、お客様が直面している課題や、当社のサービスがお客様をどのように支援できるか伝える方法について絶えず学んでいます。

この記事は How Brisa Robotics uses AWS to improve robotics operations の日本語訳です。ソリューションアーキテクトの岡本晋太朗が翻訳しました。