アプトポッドのブログ - TECH PLAY

TECH PLAY

アプトポッド

アプトポッド の技術ブログ

å…š256ä»¶

intdashを介しおRMF WebずGazeboシミュレヌションを実行しおいる様子詳现な動画は最埌の方にありたす 本蚘事の内容 こんにちは、Aptpodの゚ンゞニアの圱山ず申したす。普段は intdash CONTROL CENTER 関係の開発を担圓しおいたす。 昚幎のROSCon JPでも基調講挔がありたしたが、フリヌトの矀制埡のためのプラットフォヌムずしお、オヌプン゜ヌスで開発が進められおいる Open-RMF の名前を聞くこずが近頃増えおいる気がしたす。 本蚘事では、話題のOpen-RMFず匊瀟補品のintdashを䜿っお、クラりドを介しおフリヌトを管理するこずを目的ずしお、AWS䞊にOpen-RMF怜蚌のためのシミュレヌション環境を構築する手順を玹介したいず思いたす。 intdashを甚いた事䟋の玹介ずはなっおいたすが、内容はOpen-RMFを詊しおみたいずいう方ぞ向けお、Open-RMFにフォヌカスしお説明しおいたすので、Open-RMFの䜿い方の䞀䟋ずしお、参考にしお頂ければ幞いです。 泚珟圚も開発が進行䞭なので、本蚘事の説明が最新のリポゞトリの内容ず合っおいない堎合がありたす。その点はご了承ください。 本蚘事の内容 背景 Open-RMFずは クラりド䞊での環境構築の目的 RMF Webの利甚 環境構築 前提条件 システム構成図 AWS EC2むンスタンスの準備 Open-RMFサヌバの準備 ロボットのシミュレヌション環境の準備 シミュレヌション環境ずOpen-RMFサヌバの接続 マップの準備 マップ画像の準備 瞮尺の定矩 Waypoint、レヌン、床、壁の定矩 Building MapからGazeboで䜿甚するワヌルドの生成 シミュレヌションを利甚したOpen-RMF環境の起動 実際の操䜜の様子 最埌に 匊瀟゜リュヌションのご案内 背景 これたで匊瀟ではROSずintdashを組み合わせお、ROSメッセヌゞの可芖化や、むンタヌネットを跚いだリアルタむム遠隔操䜜を実珟しおきたした。 『intdash x ROS』で実現するROSメッセージの遠隔リアルタイムデータ伝送 - aptpod Tech Blog intdashを使ってROSを遠隔制御できるようにするまでのステップ - aptpod Tech Blog 産業用データ伝送プラットフォームでROSの画像とってみた - aptpod Tech Blog 珟圚、 intdash CONTROL CENTER の䞀環ずしお、フリヌト矀管理システムに぀いおも研究開発を進めおおり、その過皋でOpen-RMFの利甚を怜蚎しおきたした。 本蚘事では、怜蚎の過皋で埗た知芋をみなさたず共有できればず思っおいたす。 Open-RMFず連携したintdash CONTROL CENTERの構成 Open-RMFずは Open-RMF ずは、異なるベンダヌのフリヌトであっおも、統䞀されたむンタフェヌスで管理できるこずを目暙ずしお、 Open Source Robotics Foundationが開発を進めおいるプロゞェクトです。 " より匕甚 基本的なこずは 公匏のドキュメント によくたずたっおいたすが、 珟圚も掻発に開発が進んでいるこずもあり、公匏のドキュメント以倖には、導入に関する情報もただ倚くありたせん。 たずは公匏のドキュメントやrmf-demoのREADME.mdを参考に、デモを詊しおみるのがよいかず思いたす。 フリヌトに察しお、タスクを割り圓おお、その内容に埓っおロボットが動䜜する様子が確認できるかず思いたす。 クラりド䞊での環境構築の目的 しかしデモを詊しただけでは、実際どのようにノヌド矀が動䜜しおいるのかを理解するのはなかなか倧倉です。 実環境を想定しお、理解を深めるには、独自の評䟡環境を䜜っお詊行錯誀を繰り返すのが近道だず思いたす。 匊瀟のintdashサヌバず連携させるこずで、クラりド偎からのフリヌト管理を実珟させたい、ずいう目暙がありたすので、そのためのお詊し環境をクラりド䞊に構築しおみたした。 RMF Webの利甚 Open-RMFの操䜜方法ずしお、デモではシンプルなWebアプリが容易されおいたす。そのほかにも RMF Web ずいうリポゞトリ䞊では、より充実したUIを持぀アプリも開発されおいたす。 RMF Webのフロント゚ンドはReactで実装されおおり、APIサヌバず連動しお、ロボットのモニタリングや、タスクのアサむン、ナヌザ管理などの機胜を備えおいたす。 APIサヌバの機胜も充実しおおり、APIサヌバを利甚するこずで、独自のフロント゚ンドを持぀Webアプリも実装可胜かず思いたす。 APIサヌバはFastAPIを利甚しお実装されおおり、起動した状態で http://127.0.0.1:8000/openapi.json にアクセスするず、OpenAPIのJSONスキヌマが取埗できたす。これを眺めるずAPIを利甚しおどんなこずができるかなんずなく理解できるかず思いたす。 OpenAPIのスキヌマをredocで芋やすくしたもの 環境構築 前提条件 利甚するクラりド環境 AWS EC2 G4dn OS Ubuntu22.04 ROSのディストリビュヌションROS2 Humble システム構成図 シミュレヌション環境党䜓の構成図 Open-RMFのROS2ノヌド矀ずGazeboのシミュレヌション環境は、別々のROSドメむンで分かれおおり、そのドメむン間をintdashで繋いでいたす。 シミュレヌション環境をDomain A、Open-RMFサヌバ環境をDomain Bずしおいたす。 ここでintdashはROSのトピックを双方向で䞭継する圹割を担っおいたす。 今回は手軜に開発環境を準備するこずが目的なので、シミュレヌション環境がOpen-RMFず同じむンスタンス䞊に眮いおいたすが、実際は同じむンスタンスに存圚しおいる必芁はなく、NAT越えに぀いおはintdashがカバヌしおくれるのでシミュレヌション偎は、ロヌカルのPCで動かすこずも可胜です。 Open-RMFに含たれる、RMF Webを利甚しお、ロボットの皌働状態をブラりザ䞊で確認できたす。 たた、シミュレヌションの状態もVNCサヌバを利甚するこずで、Gazeboの画面を確認できたす。 intdashが提䟛する Data Visualizer でintdashを通過するトピックの内容を確認するこずもできたす。 Data Visualizerで/clockず/fleet_statesのトピックをリアルタむムで可芖化した䟋 AWS EC2むンスタンスの準備 GPUが搭茉されたPCを郜床準備するのは倧倉なため、AWSのEC2を利甚しおいたす。 GUIが䞍芁であれば、デスクトップ環境は必須ではありたせんが、今回はGazebo clientを利甚したいので、GPUが䜿えるむンスタンス䞊で、Ubuntuデスクトップをむンストヌルしたす。今回は g4dn.2xlarge を利甚しおいたす。ストレヌゞは50GB以䞊あった方がよいず思いたす。IPアドレスを固定したい堎合は、加えおElastic IPを蚭定しおください。 むンタヌネットを䞊にも情報が色々あるので詳现は割愛したすが、NVIDIAのドラむバずVNCサヌバをむンストヌルしお、適切に蚭定をするこずで、VNCを䜿っおデスクトップ環境にアクセスできるようになりたす。 海倖リヌゞョンだずGUI操䜜のレスポンスが悪いので、むンスタンスは日本のリヌゞョンで䜜成するのがよいです。 VNCのポヌトを公開するのは危険なので、開発時はSSHでポヌトフォワヌドしおいたす。以䞋にVNC接続向けの .ssh/config のポヌトフォワヌド蚭定䟋を茉せおおきたす。 こうしおおけば、 ssh aws-rmf-simulation で接続したあずに、VNC Viewerのようなツヌルで、 localhost:5900 にアクセスすればデスクトップ環境に接続できたす。 Host aws-rmf-simulation Hostname xxx.amazonaws.com User ubuntu LocalForward 5900 xxx.amazonaws.com:5900 IdentityFile ~/.ssh/aws_rsa_key Open-RMFサヌバの準備 Open-RMFの実行に必芁なコンテナの䜜り方は、 rmf_deployment_templateリポゞトリ の内容が参考になりたす。 こちらをベヌスずしお、必芁な郚分を改造しおいくこずで準備できるかず思いたす。 ビルド時に必芁な倉数などは、 CIの蚭定 を読むこずで確認できたす。 テンプレヌトではデモを実行するので、rmf-demosやrmf_simulationを取り蟌んだrmf-simulationずいうDockerむメヌゞを䜜成しお利甚しおいたすが 参考 、rmf-simulationを䜿わずに、オリゞナルのDockerむメヌゞを䜜成するこずで、独自の環境で動かすこずができたす。 テンプレヌトのREADME.mdにもある通り、rmf-simulationはOpen-RMFの基本的なパッケヌゞを取り蟌んだrmfずいうDockerむメヌゞをベヌスに䜜られおいたす。オリゞナルの環境もrmfをベヌスにしお、自䜜のパッケヌゞを /opt/rmf/src に远加しおいく圢になりたす。 どんなノヌドを起動する必芁があるかに぀いおは、 rmd-demosのlaunch ファむルが参考になりたす。 以䞋にrmf_demoのlaunchをベヌスずしお、オリゞナルの環境を䜜る際の泚意点を挙げたす。 GazeboやRvizはOpen-RMFサヌバ偎では䞍芁です dashboardはRMF Webを実行するので䞍芁です デモ甚のFleet Adapterの代わりに、Full Control Fleet Adapterを起動したす Fleet Adapterの詳现に぀いおは、 こちら の説明を参照ください 起動の方法に぀いおは、 こちら のlaunch蚭定を参照ください 珟堎環境偎ずサヌバ偎でROS Domainを別々にしたす サヌバ偎のROSず珟堎環境偎が盎接通信せずに、垞にintdashを介しお通信するようにするこずで、遠隔地ずの接続を暡擬したす 参考に、䞻芁なノヌドぞの起動時に蚭定必芁なパラメヌタの情報をたずめた図を茉せおおきたす。以䞋で説明するBuilding Mapず、をそれから生成するnav graphが環境を定矩する重芁な情報ずなっおいるこずが分かるかず思いたす。 Open-RMFノヌドぞのパラメヌタ ロボットのシミュレヌション環境の準備 ロボットをシミュレヌションするために、rmf-demosを参考にGazeboを甚いたす。 Full Control Fleet Adapterず組み合わせお簡単にAGVを詊せるように、SlotcarずいうGazeboプラグむンが容易されおいるので、そちらを利甚したす。 こちらずロボットのモデルを組み合わせるこずで、デモのようにロボットを操䜜するこずができたす。 自己䜍眮掚定や自埋走行をするわけではないので、その点は留意ください。 Slotcarプラグむンは rmf_simulation リポゞトリに含たれおいたす。 プラグむンをビルドするために次のようなリポゞトリをcloneしお、colcon buildする必芁ありたす。 https://github.com/open-rmf/rmf_simulation.git https://github.com/open-rmf/rmf_internal_msgs.git https://github.com/open-rmf/rmf_building_map_msgs.git https://github.com/open-rmf/rmf_traffic_editor.git https://github.com/open-rmf/rmf_utils.git ロボットのモデルには、rmf_demoで䜿われおいる TinyRobot を利甚したす。 ロボットの初期䜍眮は、ワヌルドを生成するずきに同時に定矩されるので、特にこの時点では気にする必芁はありたせん。 TinyRobot シミュレヌション環境ずOpen-RMFサヌバの接続 シミュレヌション環境ずOpen-RMFサヌバずの接続には、 intdash Edge Agent2 ず intdash ROS2Bridge を甚いおいたす。 詳现な蚭定の方法はリンク先のマニュアルの通りですが、ポむントずしお以䞋のトピックをブリッゞする必芁がありたす。 シミュレヌション環境→Open-RMFサヌバ /clock /fleet_states Open-RMFサヌバ→シミュレヌション環境 /robot_path_requests /robot_mode_requests /robot_destination_requests /map (slotcarを甚いたシミュレヌションの時のみ必芁) /fleet_statesトピックはslotcarプラグむンが生成しおくれないので、slotcarプラグむンから配信される、/robot_stateトピックを配列にたずめお/fleet_statesトピックずしお配信するノヌドが必芁になりたす。 マップの準備 実際に詊しおみたいマップを䜜成したす。Open-RMFで利甚するマップはYAML圢匏のBuilding Mapファむルで定矩されおいたす。Open-RMFでは、Building Mapを線集しやすくするために、Traffic EditorずいうGUIツヌルが提䟛されおいたす。 Open-RMFではロボットが走行する経路をBuilding Mapから倉換しお䜜成するYAML圢匏のnav graphで定矩しおいたす。 以䞋のコマンドで䜜成できたす。 ros2 run rmf_building_map_tools building_map_generator nav <building mapのパス> <出力先ディレクトリ> Traffic Editorでは壁やオブゞェクトの䜍眮なども定矩できたすが、建物の圢状に関する情報は䞻にGazebo甚のワヌルドを生成する際に甚いられたす。 マップ画像の準備 壁や障害物などが分かる図面の画像を甚意したす。この画像の䞊をTraffic Editorでなぞっお、レヌンなどを定矩したす。こちらの図は匊瀟の䌚議宀の圢に合わせた画像です。 マップ画像 瞮尺の定矩 Measurementツヌルで、地図䞊で線分が䜕メヌトルであるかを定矩したす。定矩した内容に応じお画像ファむルのピクセルが䜕メヌトルであるかが蚈算されたす。 measurementで匕いた線分に実際の長さを蚭定する 䞀床保存しお、Traffic Editorを再起動する必芁ありたす。 ※Traffic Editorはある皋床倧きなロボットを想定しおいるため、小さなロボットの経路を線集するには、画面䞊のレヌンの倪さなどがマッチしおいたせん。UI䞊のレヌンの倪さなどは蚭定で倉えるこずができないので、どうしおも倉えたい堎合は゜ヌスコヌドの修正が必芁です。 Waypoint、レヌン、床、壁の定矩 Waypoint ロボットの走行する経路の頂点にあたる点です。名前を付けるこずで、タスクを䜜成するずきにその名前で参照できたす。 レヌン WaypointずWaypointを盎線で結ぶロボットの走行経路です。 床、壁 Gazebo甚のワヌルド生成時に䜿甚される情報です。蚭定しないず床が抜けたりしおシミュレヌションに支障がありたす。 Waypoint属性の蚭定 spawn_robot_typeずspawn_robot_nameでシミュレヌション䞊でのロボットのスポヌン䜍眮を指定するこずができたす。 ※泚 レヌンで接続されたWaypointのうち、䞀぀は is_charger=true である必芁がありたす。 レヌンを蚭定しおいる様子 Building MapからGazeboで䜿甚するワヌルドの生成 Building Mapの準備ができたら、以䞋のコマンドを実行するこずで、Gazeboで利甚できるワヌルド情報を自動生成できたす。この際に、Traffic Editor䞊でWaypointの属性情報で蚭定した情報を利甚しお、ロボットの初期スポヌン䜍眮がワヌルドデヌタに反映されたす。初期䜍眮を随時倉えたい堎合は、毎回Traffic Editorで線集するのが手間なので、building.yamlの内容を盎接線集するスクリプト等を甚意しおおくず䜜業がはかどりたす。 ros2 run rmf_building_map_tools building_map_generator gazebo <building.yamlのパス> <ワヌルドデヌタの出力先> <モデルデヌタの出力先> 壁の高さや厚さなどが固定倀のため、もし修正したい堎合は゜ヌスコヌドの修正が必芁です。以䞋に䟋を瀺したす。 sed -i 's/self.wall_height = 2.5/self.wall_height = 0.5/g' src/rmf_traffic_editor/rmf_building_map_tools/building_map/wall.py sed -i 's/self.wall_thickness = 0.1/self.wall_thickness = 0.05/g' src/rmf_traffic_editor/rmf_building_map_tools/building_map/wall.py シミュレヌションを利甚したOpen-RMF環境の起動 準備お疲れさたでした シミュレヌションを利甚しお、indashず組み合わせたOpen-RMF環境を起動しお、Open-RMFから制埡できるこずを確認したす。 たずGazeboを起動したす。 たず次のように環境倉数でモデルやプラグむンのパスを蚭定したす。 current_path=`pwd` export GAZEBO_MODEL_PATH=<ロボットのSDFが保存されおいるディレクトリぞのパス>:<生成したワヌルドのモデルぞのパス>:/usr/share/gazebo-11/models:$GAZEBO_MODEL_PATH export GAZEBO_RESOURCE_PATH=/usr/share/gazebo-11:$GAZEBO_RESOURCE_PATH export GAZEBO_PLUGIN_PATH=${current_path}/install/rmf_robot_sim_gz_classic_plugins/lib/rmf_robot_sim_gz_classic_plugins:${current_path}/install/rmf_building_sim_common/lib:/usr/share/gazebo-11:$GAZEBO_PLUGIN_PATH そしお、ワヌルドぞのパスを匕数に䞎えおGazeboを起動したす。 次に、Open-RMF環境のコンテナを起動したす。 こちらは準備したコンテナをそれぞれ起動すれば良いですが、耇数のコンテナを扱うこずになるので、docker compose甚のYAMLファむルにたずめおおくず䟿利です。 実際の操䜜の様子 操䜜の様子は動画を参照ください。RMF Webのブラりザのりィンドりず、VNC Viewerで衚瀺しおいるGazeboのシミュレヌションの様子を重ねお撮圱しおいたす。 www.youtube.com 動画では、台のロボットが瞊方向に埀埩しおいるずころに、暪方向の埀埩をするタスクを割り圓おおいたす。RMF Webのコン゜ヌルからタスクを蚭定しお、それがロボットにアサむンされる様子が確認できるず思いたす。 シミュレヌションでは時刻がUNIX時間になっおしたうので、1970幎1月1日を基準ずした時刻で画面䞊衚瀺されおいたす。 動画ではRMF Webからタスクをアサむンする様子を玹介しおいたす。APIサヌバにRESTでコマンドを送るこずで、ブラりザや、ROSを利甚するこずなく、倖郚から操䜜するこずも可胜です。 停止する際は、docker compose downでコンテナを停止しお、Gazeboを起動しおいるタヌミナルで、ctrl-cでシミュレヌションを停止したす。 最埌に いかがでしたでしょうか 自䜜のマップをベヌスに環境を構築できれば、色々なパタヌンの怜蚌などがはかどるかず思いたす。これをご芧になったみなさたのOpen-RMF導入の参考になれば幞いです。 今回はTinyRobotを利甚しお環境を構築しおいたすが、リアルな自埋走行ロボットを、 Free Fleet ずNav2を合わせお利甚しお制埡する方匏も今回の内容を拡匵するこずで実珟可胜です。匊瀟でもTurtlebot3 Burgerの実機を甚いお怜蚌しおいたすので、別の機䌚に玹介できればず思いたす。 匊瀟䌚議宀でTurtlebot3 Burgerを䜿った怜蚌を行っおいる様子 最埌に、宣䌝になっおしたいたすが、 ROSConJP 2023 で、「Open-RMFを応甚したクラりドフリヌト管理システムの構築」ずいうタむトルで登壇予定です。 匊瀟アプトポッドもROSConJPスポンサヌになり、ブヌスを出す予定です。 そちらでは、怜蚎の過皋で孊んだOpen-RMFのより深い郚分に぀いおも玹介できればず思いたすので、ぜひ発衚を聞いたりブヌスに蚪れお頂ければ幞いです。 匊瀟゜リュヌションのご案内 匊瀟ではモビリティやロボットのリアルタむムでむンタラクティブな管制制埡システムの迅速な構築を可胜にするintdash CONTROL CENTERを掚進しおおりたす。 www.aptpod.co.jp スマヌトシティにおける自動運転車、工堎や物流倉庫における搬送ロボット、建蚭珟堎における建蚭機械など、モビリティ矀の統合遠隔監芖・管理、遠隔制埡システムなどでお困りのこずがあれば、ぜひお声掛けください。 匊瀟お問合せフォヌムはこちらです。 www.aptpod.co.jp
圓瀟補品の EDGEPLANT T1 を開発に掻甚しおくださっおいるお客様の事䟋を、むンタビュヌ圢匏でご玹介したす。最新のビゞネスの珟堎で圓瀟補品がどのように掻甚されおいるかや、圓瀟補品を実際に䜿っおみおの評䟡等に぀いお、お客様の生の声でお䌝えいたしたす。 今回むンタビュヌをさせおいただいたのは、「ハンドルの無い完党自動運転車」の実珟を目指しお自動運転AIシステムの開発を行う Turing株匏䌚瀟 様以䞋、チュヌリング瀟です。同瀟は、䞖界で初めお名人を倒した将棋AI「Ponanza」の開発者である⌭本⌀成氏ず、カヌネギヌメロン⌀孊で自動運転を研究しPh.D.を取埗した⻘✊俊介氏によっお2021幎に共同創業されたスタヌトアップで、カメラ映像のみを甚いたAIによる自動運転技術に匷みを持っおいたす。 今回は、チュヌリング瀟の車䞡開発郚におチヌプンゞニアを぀ずめおいらっしゃる埳匘賢人氏に、事業の内容から開発の裏偎たで、様々なお話を䌺いたした。 本蚘事は、むンタビュヌアヌを぀ずめたしたアプトポッドVPoPの岩田がお送りいたしたす。 Turing株匏䌚瀟 車䞡開発郚 チヌプンゞニア 埳匘賢人氏 Turing株匏䌚瀟に぀いお 最初のプロダクトTHE FIRST TURING CARに぀いお EDGEPLANT T1採甚のきっかけず遞定理由 EDGEPLANT T1を実際に䜿甚した感想 今埌の匊瀟ハヌドりェアに察する期埅 Turing株匏䌚瀟の今埌の展望 むンタビュヌを終えお: EDGEPLANT T1のご玹介 Turing株匏䌚瀟に぀いお アプトポッド岩田以䞋、岩田 本日はよろしくお願い臎したす。たずは、埡瀟の事業内容に぀いお教えおいただけたすか。 チュヌリング埳匘様以䞋、埳匘 はい、我々チュヌリングは、「完党自動運転の実珟」ず「ハンドルのない車の販売」を事業目暙ずしおいる䌚瀟です。完党自動運転システムの開発はもちろんですが、最終的には、量産車メヌカヌず呌ばれる量産ラむンを持っおいる自動車メヌカヌになるこずを目暙に事業を進めおいたす。 この目暙を実珟するためには、倧きな2぀の超えなければならない課題がありたす。1぀めは「完党自動運転を実珟する知胜の開発」、2぀めは「自動車の車䜓の開発」です。知胜ず車䞡の双方を自瀟で開発するこずで、目暙ずしおいる「ハンドルのない完党自動運転車䞡」の実珟を目指しおいたす。 岩田 知胜だけでなく車䜓そのものたで自瀟開発しようずしおいるのが、埡瀟の特城ずいうこずでしょうか。 埳匘 はい、その通りです。完党自動運転向けの知胜の開発だけでもそもそも難しいチャレンゞではありたすが、そこに加えお我々は車䜓自䜓も自瀟開発しようずしおいたす。この双方をタヌゲットにしおいるスタヌトアップはなかなかありたせん。 たた、我々の目暙である「ハンドルのない車の販売」は、既存の完成車メヌカヌずも異なるポむントです。そういったコンセプトを打ち出しおいるメヌカヌもあるにはありたすが、既存事業ずの兌ね合いを考えるず、それをメむンの事業ずしお掚進するのはなかなか難しいだろうず考えおいたす。我々は自動運転AIに匷みをも぀䌚瀟ですが、ただ埅っおいるだけではそういったコンセプトの車は珟れおこないだろうずいうこずで、自分たちで車䜓から開発するこずにしたした。  ちなみに、車䜓開発のようなハヌドりェアずAI開発のような゜フトりェアでは、ものづくりに察する考え方やアプロヌチが党く異なりたす。匊瀟代衚がチュヌリングを蚭立した圓時の思いずしお「AI開発の経隓で培った゜フトりェア開発の考え方を䞻軞に、ハヌドりェア開発の考え方の良いずころを取り入れおもっず良い車づくりを実珟したい」ずいうものがあり、我々瀟員もそういった考えを魅力的に感じ、実珟に向けお珟圚掻動しおいたす。 www.youtube.com 珟圚、AIを掻甚したコンセプトカヌデザむンなどにも取り組たれおいたす 最初のプロダクトTHE FIRST TURING CARに぀いお 岩田 先日ニュヌスリリヌスで、埡瀟最初のプロダクト「THE FIRST TURING CAR」の販売ず成玄に぀いお拝芋したした。たずはご成玄おめでずうございたす。 埳匘 ありがずうございたす。 岩田 このTHE FIRST TURING CARの開発においお、匊瀟のEDGEPLANT T1をご掻甚いただいたず聞いおいたす。たずは、プロゞェクトの抂芁に぀いお教えおいただけたすか。 埳匘 今回販売したTHE FIRST TURING CARずいうプロダクトは、自動運転のレベル2に盞圓するシステムを搭茉した車䞡で、垂販車䞡を改造しお我々の自動運転AIを搭茉したものになりたす。レベル2盞圓のシステムなのでドラむバヌの監芖が必芁にはなりたすが、高速道路での前方远埓、前方車がいない状態での速床や車線の維持、車線倉曎などのドラむバヌ支揎機胜を提䟛しおいたす。特城的なずころずしおは、搭茉しおいる自動運転AIは我々が埗意ずしおいるカメラ映像ベヌスのものであるずいう点ず、その自動運転AIの䜜動状況をナヌザヌに提瀺するナヌザヌむンタヌフェむスを提䟛しおいる点です。 垂販車をベヌスずしお補䜜された THE FIRST TURING CAR 岩田 ニュヌスリリヌスによるず、今回のシステムは完党自動運転ではなくあくたでドラむバヌ支揎ずのこずですが、機胜的にはどのような違いがあるのでしょうか。 埳匘 違いは倧きく分けお2぀ありたす。 1぀めは自動運転AIぞの入力ずしお利甚する情報の違いです。今回のシステムで利甚しおいる情報は前方カメラの映像のみですが、完党自動で運転するには呚囲360床党方䜍の映像を利甚する必芁がありたす。今回のシステムでは、完党自動運転に必芁な党情報をAIに入力できおいるわけではありたせんし、仮に必芁なすべおの情報を取埗したずしおも、それをさばききれるシステムにはなっおいたせん。 2぀めは車䜓ハヌドりェアの違いです。今回は垂販車を改造しお補䜜しおいたすので、党おの挙動を自由自圚に制埡するずころたでは実珟できおいたせん。ハンドルのない完党自動運転の車を実珟するには、たずえば車䞡が自ら自動で起動/停止したり、勝手に目的地たで移動したりずいった、人間が操瞊する既存の車の延長ではない仕組みが必芁になっおきたす。今回は、垂販車をベヌスにしたこずで倖郚からアクセスできる範囲での制埡にずどたっおおり、我々が目指す完党自動運転車䞡の実珟のためにはやはり自分たちで車䞡から開発するしかないずいうこずを改めお感じたした。 岩田 なるほど。垂販車に埌付けする圢での開発ずしたこずで、制玄の範囲内での機胜実珟にずどたっおいるずいうこずですね。ちなみに、今回のこちらのプロゞェクトにおいお、匊瀟のEDGEPLANT T1はどのようにご掻甚いただいたのでしょうか。 埳匘 埡瀟のEDGEPLANT T1は、たず開発の工皋で数台利甚させおいただきたした。たた、最終的にTHE FIRST TURING CARそのものにも1台搭茉しおいたす。 岩田 販売されたあのTHE FIRST TURING CARの䞭でも、我々のEDGEPLANT T1が皌働しおいるずいうこずですねなんだか嬉しく思いたす。 開発䞭の実隓車に EDGEPLANT T1 が搭茉されおいる様子 EDGEPLANT T1採甚のきっかけず遞定理由 岩田 匊瀟のEDGEPLANT T1は、どのように芋぀けおくださったのでしょうか。 埳匘 䞀番最初のきっかけは、AWSの゜リュヌションアヌキテクトの方から埡瀟のデバむスをご玹介頂いお、怜蚎甚にずりあえず1台賌入しおみたずいうずころからでした。圓時瀟内では、普通のラップトップPCで゜フトりェア開発を行っお、それをそのたた車䞡に぀なげお怜蚌するずいう方法で開発を進めおいたした。なので圓初は、賌入したものの実はそれほど䜿甚しおいたせんでした。 岩田 そうなんですね。その埌どういったきっかけで採甚に至ったのでしょうか。 埳匘 その埌開発が進み、そろそろ車䜓ぞのAIの組蟌みを怜蚎し始めなければずいうタむミングで、すでに手元にあった埡瀟のEDGEPLANT T1を含めいく぀かのデバむスを比范怜蚎しお採甚デバむスを絞り蟌んでいきたした。半導䜓䞍足による調達難の圱響もあり玍期の長いデバむスもいく぀かありたしたが、期間的にもあたり䜙裕がなかったためそのようなデバむスは候補から倖しおいきたした。 䞀方埡瀟のEDGEPLANT T1は、我々がデバむスに求める最䜎限のスペックはクリアしおいたしたし、なにより Amazon.co.jp から簡単に賌入できたこずで、開発のためにある皋床のボリュヌムで早急に入手したかった我々ずしおは非垞に助かる遞択肢でした。 岩田 最䜎限のスペックはクリアしおいたずいうこずですが、具䜓的にはどのような芁件が必芁だったのでしょうか。 埳匘 基本的に車䞡に搭茉するデバむスになるので、EMC詊隓や耐振動詊隓にパスしおいる必芁がありたす。䞀方で、今回のシステムはドラむバヌの監芖のもずで䜜動するものなので、たずえばAEC芏栌などの量産車䞡の郚品に求められる厳しい基準たでは満たしおいる必芁はありたせんでした。EDGEPLANT T1は汎甚コンピュヌタずいうこずで、そういった厳しい基準たでは満たしおいたせんでしたが、Eマヌクを取埗しおいたり電磁特性/環境耐性が備わっおいるこずがスペックから分かったため、問題ないず刀断したした。䞍足する郚分に぀いおは、たずえば車䞡ずの間にセヌフティヌマむコンを挟んだり、他のコントロヌラず盞互監芖させるなどの工倫によっおカバヌしおいたす。 たた、他のデバむスずの比范怜蚎の過皋で、EDGEPLANT T1が䜿甚しおいるNVIDIA Jetson TX2よりも新しい䞖代のSoCを搭茉したデバむスなども怜蚎したしたが、あたり性胜が高すぎおも消費電力が問題ずなるこずもあり、むしろ最䜎限の性胜を有しおいるEDGEPLANT T1に合わせお、AIシステム偎をスリム化する方向に向かいたした。 党䜓ずしお埡瀟のEDGEPALNT T1は、電磁特性や環境耐性、消費電力ずいった芳点で難しいこずを考えないでパッず自動車に積めるスペックに仕䞊がっおいお、非垞に完成床の高いデバむスだなず感じおいたす。 Deep Learningにせよ画面描画や画像倉換にせよ、ずにかくハヌドりェアアクセラレヌタ䜿うのが倧事ずいうこずで最近瀟内ではNPP(Nvidia Performance Primitives)を頑匵っお䜿うのが流行っおいる。 pic.twitter.com/ah0wRkGmy4 — 山本䞀成🌀TuringのCEO (@issei_y) 2022幎10月24日 山本䞀成氏のSNSに登堎した3台のEDGEPLANT T1 EDGEPLANT T1を実際に䜿甚した感想 岩田 実際にEDGEPLANT T1を䜿甚しおいただいおの感想はいかがでしたか。 埳匘 䞀蚀で申し䞊げたすず、非垞に䜿いやすいな、ずいうのが率盎な感想です。すこし乱暎な蚀い方になりたすが、適圓に電源を挿しおも動きたすし、電源制埡の機構が内蔵されおいお車のむグニッションに連動しおくれるので、電源管理が楜にできたした。 I/Oに関しおも、デバッグしやすいポヌトが぀いおいたり、拡匵性も高かったりず、党䜓的に芋お、我々にはちょうどよい、䜿いやすいシステムだったず思いたす。 岩田 ありがずうございたす。逆に、䜿っおみお䞍足に思うこずはありたしたか。 埳匘 现かい点を挙げるならば、たずえば、システム内に監芖甚のチップがもう䞀぀積たれおいたほうが良い、I/Oに぀いおは汎甚的なものだけでなくもっず堅牢な専甚蚭蚈のものがあるず良い、CANのようなI/Oに぀いおはもっずコネクタ数が欲しい、などいろいろずあるにはありたす。しかし、こういった芁件が満たされおいるに越したこずはないものの、これらはあくたで我々のシステム固有の芁望であっおEDGEPLANT T1のような汎甚的なパッケヌゞングずしお䞍足があるずいうこずではないず思いたす。 基本的な我々の感想ずしおは、汎甚的なパッケヌゞングずしおの機胜性は十分である、ずいうもので、それ以䞊の现かい䞍足に぀いおは、自分たちで実装しお倖偎に付加しおいけばよいず思っおいたす。I/Oさえ充実しおいれば、あずは゜フトりェアでどうにでもなる話ですしね。 岩田 そうですね。やはりEDGEPLANT T1は汎甚的なデバむスずいうこずで、個別の甚途にしっかり最適化しおいこうずするず、若干物足りない郚分はあるのかもしれたせん。 チュヌリング瀟での開発の様子 今埌の匊瀟ハヌドりェアに察する期埅 岩田 今回利甚しおいただいたEDGEPLANT T1に限らず、今埌の匊瀟補品ぞの期埅ずしおは、なにかご芁望はございたすか。 埳匘 ここは正盎に申し䞊げるずなかなかコメントが難しいのですが、我々のような車䞡開発を行うメヌカヌにずっお、システムずしお信頌性が高く安党なものに仕䞊げおいくには、今埌はやはり専甚蚭蚈のハヌドりェアを䜿甚しおいかざるを埗ないのかなず考えおいたす。そういった文脈で、車䞡開発の領域においお埡瀟のEDGEPLANT T1のような汎甚補品を䜿甚する期間は、実はもうそれほど長くはないのかなず考えおいるのが正盎なずころです。 䞀方で、我々は車䞡開発ず䞊行しお自動運転AIモデルの開発も行っおいるわけですが、そのためのデヌタ収集のプロゞェクトが珟圚瀟内で進行しおいたす。埡瀟のEDGEPLANT T1のような補品は、そういったデヌタ収集の領域では確実に需芁があるず思いたす。たずえば、デヌタ収集の際にデバむス゚ッゞで敎合性チェックなどの前凊理をさせれば、デヌタ収集ワヌクフロヌの効率が党然倉わっおきたす。匊瀟でも、今埌呚囲360床党方䜍の映像デヌタを利甚しおいくに圓たり、16個のカメラから映像デヌタを収集したり前凊理をしたりするこずが需芁ずしお出おきそうですが、その際にはよりハむ゚ンドなデバむスが必芁になっおくる可胜性がありたす。 車䞡開発の領域からは倖れたすが、自動運転AIの研究をしおいる研究機関や䌁業にずっおは、そういったある皋床ハむ゚ンドで車に簡単に積み蟌んで䜿甚できる汎甚デバむスは、需芁があるのではないかず思いたす。 岩田 確かに、我々のお客様の掻甚事䟋を芋おいおもやはり圧倒的に倚いのはデヌタ収集のプロゞェクトになりたす。今回ご掻甚いただいたEDGEPLANT T1に぀いおも、もずもずはデヌタ収集デバむスずしお開発された補品なので、そういった意味で埡瀟の掻甚事䟋は匊瀟の䞭ではレアケヌスに該圓したすね。 今回は、開発期間も短くスピヌド感が求められる䞭で、入手性や䜿いやすさを評䟡いただいお匊瀟補品を採甚いただいたわけですが、たずえば他の研究開発機関などのプロトタむピングフェヌズにおいお、同様の点が評䟡される可胜性に぀いおはどう思われたすか。 埳匘 これに぀いおは、組織によりけりだず思いたす。我々のように最終的に補品を぀くるこずを目指しお開発をしおいるような組織では、やはり最終量産時に䜿甚するシステムに近いものを䜿甚しお開発したいずいう思いは、どうしおもあるず思いたす。䞀方、倧手のOEMさんのような先行開発郚隊を抱えおいる組織であれば、完党にれロから新芏蚭蚈を行う際にたず汎甚品を䜿甚するずいう可胜性はあるず思いたす。 Turing株匏䌚瀟の今埌の展望 岩田 最埌に、埡瀟の今埌の展望やマむルストヌンに぀いお教えおいただけたすか。 埳匘 はい、匊瀟チュヌリングは、やはり冒頭に申し䞊げたずおり「ハンドルのない完党自動運転車を開発しおリリヌスする」ずいうずころを目暙に掻動しおおりたす。ですので、われわれの珟圚のあらゆる掻動はすべおこの最終目暙に向けたものになっおいたす。 そこに至るたでのマむルストヌンずしお盎近で目指しおいるのは、我々自身で開発したEVの自動運転車䞡を少量生産しお2025幎にリリヌスするずいうずころです。これを実珟するために、たずは来幎2024幎末たでに自瀟開発EVのナンバヌを取埗する蚈画になっおいたす。ナンバヌを取埗する車䞡は、自瀟開発EVのフレヌムに、EV甚の各皮コンポヌネントや蚈算機を我々で組み付けお、我々の自動運転システムの搭茉したものになる予定です。 岩田 なるほど。それだけのこずを実珟しようずするず、2025幎も遠いようでそれほど時間は無いのかもしれたせんね。 埳匘 そうなんです。実は意倖ず時間が無いな、ずいうのが珟堎の感芚です。 岩田 ちなみに、埡瀟は 「We Overtake Tesla」ずいうビゞョンを掲げおいらっしゃるず思いたすが、2025幎よりも曎に先にはどういった方向を芋据えおいらっしゃるのでしょうか。 埳匘 2025幎よりもさらに先ずなるず䞍確実性がかなり高くなっおしたいたすが、やはり「ハンドルのない車を量産する」ずいう目暙の達成が目指すずころになりたす。この目暙の達成は、珟時点では2030幎を想定しおいたす。そうなりたすず、2026幎か2027幎ごろにはもう量産ラむンの取埗に向けお具䜓的に話が進んでないず間に合いたせんし、珟圚の2025幎ずいうマむルストヌンもそこから逆算しお蚭定したものになっおいたす。 自動運転EV開発のチュヌリング、AIをフル掻甚しおデザむンした「完党自動運転EV」コンセプトカヌを公開 https://t.co/zvzqXsHhve 画像生成AI「Stable Diffusion」をフル掻甚しお本圓にクルマを䞞ごず完党にデザむンしたした。たぶん䞖界初 — 山本䞀成🌀TuringのCEO (@issei_y) 2023幎3月15日 山本䞀成氏のSNSでは、同瀟の幅広な事業掻動を芗き芋るこずができる さらに「ハンドルをなくす」ずいうずころは、゚ンゞニアリングだけの問題ではなく、法芏的な問題も解決しおいかなければなりたせん。たた、自動運転で䜿甚する知胜に぀いおも、ただただもっず賢いAIを開発しおいかなければなりたせん。最近ではChatGPTがかなり賢くなっおきおいるので、このたたいけばなんずかなるのではないかずいう話も出おきおいたすが、ああいったものがリアルタむムか぀高速に、しかも垞に高い粟床で動䜜しなければならないずなっおくるず、AIずしおだけでなくシステムずしおの完成床にもかなり高いレベルが必芁になりたす。 車䞡開発に぀いおは先皋の通り2025幎をひず぀のマむルストヌンずしお蚭定しおいたすが、他の法芏的な問題、自動運転AI知胜の開発ずいう点に぀いおも、別途マむルストヌンを蚭定しお進めおいたす。 岩田 なるほど、最近の埡瀟のニュヌスリリヌスで、生産拠点の開蚭や千葉県知事ずの意芋亀換、倧芏暡蚀語モデルの開発ぞの着手など、様々な話題が䞊がっおいるのを拝芋しおいたしたが、これらはすべおひず぀の目暙に連動するものだずいうこずが改めおよく分かりたした。 本日は、EDGEPLANT T1の採甚に関わる゚ピ゜ヌドや埡瀟の開発プロゞェクトにおける芁件、実際にEDGEPLANT T1を採甚しおみおの感想など、広い範囲で質問に回答いただき、倧倉参考になりたした。 埡瀟の自動運転車䞡が実際に発売されるのを楜しみにしおいたす。本日はどうもありがずうございたした むンタビュヌを終えお: EDGEPLANT T1のご玹介 いかがでしたでしょうか。いたずおも勢いのあるスタヌトアップであるチュヌリング瀟が、我々のEDGEPLANT T1に぀いお、どのような点を評䟡しご採甚いただいたのか、読者の皆さたにもお䌝えできおいれば幞いです。 最埌に、むンタビュヌ䞭に䜕床も登堎しおいた匊瀟の車茉向け汎甚コンピュヌタ、 EDGEPLANT T1 に぀いお改めおご玹介させおいただきたす。 EDGEPLANT T1の倖芳 EDGEPLANT T1は、NVIDIA Jetson TX2を搭茉した車茉向け゚ッゞコンピュヌタです。256基のNVIDIA CUDAコアを実装したGPUによっお、デバむス゚ッゞでのAI凊理や映像・画像凊理を実珟したす。たた、SIMスロットやGPSモゞュヌルを備え、モビリティヌのコネクテッド化に必芁な機胜をオヌルむンワンでご提䟛いたしたす。 EDGEPLANT T1の䞻な特城 SIMスロット搭茉、GPSモゞュヌルを内蔵 EMC芏栌Eマヌク、信頌性芏栌JASO D014に準拠 広い電源電圧レンゞ9〜36Vに察応し、倧型車・建蚭機械に利甚可胜 広い動䜜枩床範囲-20°C〜+65°C むグニッション連動による自動起動ず自動シャットダりンが可胜 Wake on CANに察応し、CAN信号に連動しお自動起動が可胜 電源管理ずフォルト監芖の独立MCUを搭茉 防塵性胜ず冷华性胜、メンテナンス性を兌ね備えた筐䜓倖付けのファン機構 脱萜防止ロック機構付きのUSB 3.0コネクタヌを装備 より詳现なスペックに぀いおは、 こちらのデヌタシヌト をご芧ください。 EDGEPLANT T1は、以䞋の販売パヌトナヌ様よりご賌入いただけたす。 詳しくは、 補品玹介ペヌゞ をご確認ください。 株匏䌚瀟マクニカ 様 菱掋゚レクトロ株匏䌚瀟 様 たた、 Amazon.co.jp からもご賌入いただけたす。 圚庫も最沢にございたすので、この機䌚にぜひ導入をご怜蚎ください。 www.aptpod.co.jp
ROSの画像メッセヌゞを遠隔監芖したいず思ったこずがあるみなさん、 こんにちは。゜リュヌションアヌキテクトの䌊勢です。 以前、圓ブログではロボット開発プラットフォヌムのROSずむンタヌネットを぀なぐ技術「intdash Bridge」をご玹介したした。 tech.aptpod.co.jp この intdash Bridge が2023幎2月から画像のROSメッセヌゞに察応したので、適甚䟋ずずもにご玹介したす。 その前に おこずわり これはあくたで"やっおみた"蚘事です。 正匏なむンストヌル手順などは公匏ドキュメントをご参照ください。 䜿われおいる機胜 これからご芧いただく動画の構成芁玠です。 intdash Bridge ROSメッセヌゞをintdash Serverず双方向通信するための゜フトりェアです。 intdash Bridge MJPEG圢匏ずH.264圢匏でROSデヌタを送受信できるようになりたした。 ROSを流れる画像  /sensor_msgs/Image /sensor_msgs/CompressedImage をMJPEGで、たたは動画デヌタ(H.264)に倉換しおリアルタむムで可芖化したり、別の゚ッゞデバむスにPublishしたりできたす。 今回はUSBカメラの画像デヌタを確認しおいたす。 なお、ROS2版である intdash ROS2Bridge でも察応しおいたす。 intdash CONTROL CENTER 耇数モビリティの運行管制向け゜リュヌションフレヌムワヌクです。 以前、䞀郚のコンポヌネントをご玹介したした。 tech.aptpod.co.jp 今回は2぀のコンポヌネントでカメラずロボットに制埡コマンドを届けおいたす。 遠隔指瀺コマンドVisual Parts Data Visualizerから゚ッゞデバむスにコマンドを送信したす。 遠隔指瀺コマンドデバむスコネクタROS ゚ッゞデバむスでサヌバヌからコマンドを受信しおintdash Bridgeに連携したす。 intdash CONTROL CENTERコンポヌネント黄色 本題 お埅たせしたした。 それでは、動画をご芧ください。9分半ほどです。 www.youtube.com このような構成になっおいたす。 0:48 ROSずは 1:18 ROSの画像衚瀺 1:59 カメラ画像を遠隔監芖 3:59 カメラ画像を遠隔制埡 5:13 ロボットも遠隔制埡 6:12 ロボットも遠隔監芖自動制埡 ROSの説明や構成図を飛ばしたい方は 6:44ぐらい からどうぞ。 たずめ 今回は、intdash Bridgeずintdash CONTROL CENTERの組み合わせによる゚ッゞデバむスでのカメラ制埡を行いたした。 ROSは柔軟にノヌドを远加しおメッセヌゞを再利甚できるずころがいいですね。 intdashを䜿っおむンタヌネットず双方向通信ができるこずでさらに応甚の幅が広がりたす。 なお、Upstreamした画像デヌタは他デヌタず同期したタむムスタンプでクラりドに保存されるため、あずから再生・確認・分析が可胜です。 参考 ちなみに今回ROSノヌドはこのような構成にしたした。 ROSノヌドrqt_graph /switcher ノヌドが カメラの画像メッセヌゞをSubscribe intdash Bridgeからコマンド /intdash/ctl_cmd_string をSubscribe コマンドのカメラ番号に䞀臎する画像メッセヌゞを画像倉換 /switcher/image_raw にPublish /intdash/intdash_bridge ノヌドが /switcher/image_raw をAgentに連携 カメラ番号や /rosbridge_websocket から受けたロボット制埡プログラムのセンサヌデヌタもAgentに連携 しおいたす。 予告 intdash CONTROL CENTERでは、耇数モビリティぞのタスク配分やルヌト蚭定など運行管理機胜の拡充も予定しおいたす。近々、圓ブログでご玹介したいず思いたす。 www.aptpod.co.jp
こんにちは、アプトポッドVPoPの岩田です。 そろそろコロナ犍も収束に向かい、だんだんず原則出瀟に戻す䌚瀟も出始めおいる頃合いではありたすが、圓瀟はただただリモヌトワヌク䜓制を継続しおいく予定です。 そんななか圓瀟では、リモヌトワヌク䜓制でオフィスの皌働率が䜎䞋しおいるこずをきっかけずしお、 オフィスの瞮小 を行いたした。 その際の物品敎理、特に蔵曞の凊分方法のひず぀の遞択肢ずしお、圓瀟では「公共図曞通ぞの寄莈」ずいう遞択肢を取りたした ので、皆様にご玹介したいず思いたす。 これは私個人の個人的な思いではありたすが、ただ読める、誰かの圹に立おる曞籍を「捚おる」ずいう遞択肢をずるこずにどうしおも抵抗があり、どうにか救う方法はないかず考えた結果ふず思い぀いた方法が「寄莈」でした。 コロナ犍が続き、圓瀟のようにオフィスを瞮小したり撀廃したりする䌁業様も出おきおいるこずず思いたす。そういった䞭でこの蚘事が担圓者様の目に留たり、 リナヌスされる曞籍が少しでも増えるこずに぀ながれば幞いです。 事の発端 - オフィス瞮小プロゞェクト え、捚おるのただ読めるのに - 廃棄の発芚 なにか手はないものか - 寄莈ずいう遞択肢 寄莈時の泚意点 寄莈たでの瀟内の流れ いざ、寄莈ぞ さいごに ぀いでにお知らせ 事の発端 - オフィス瞮小プロゞェクト 圓瀟では、 2020幎にコロナ犍が発生した盎埌にリモヌトワヌク䜓制を導入 し、そこから珟圚に至るたで、基本的にリモヌトワヌクを継続しおいたす。 圓瀟には、ハヌドりェア/゜フトりェア゚ンゞニアから営業・プリセヌルス、バックオフィスたで様々な職皮のメンバヌが圚籍しおいたすが、 特に゜フトりェア系の゚ンゞニアに぀いおは、ほが100%がリモヌトワヌクを行っおいる 状況です。 物理的なハヌドりェアを扱うハヌドりェア゚ンゞニアや、お客様ずお話する機䌚の倚い営業・プリセヌルス、バックオフィス系のメンバヌに぀いおは、必芁に応じおオフィスぞ出瀟しお勀務するこずもありたすが、それでも オフィスの座垭皌働率は平均的に10~20%割皋床しかない 状況が続いおいたした。 昚幎の座垭皌働率の掚移 圓瀟オフィスは四谷䞉䞁目駅から埒歩数分の䜍眮にあるオフィスビルの3階ず5階を䜿甚しおいたすが、これは党瀟員が出瀟しおも収容できるだけのスペヌスを確保した広さになっおいたす。前述の通り、コロナ犍に䌎い出瀟率が倧幅に䜎䞋した結果、2階分あるうちの1階分にはほずんど人がいないような状況が継続的に発生するようになり、この床、オフィスの瞮小に螏み切るこずずなりたした。 オフィス瞮小では、5階を解玄し3階に集玄する蚈画ずなったのですが、ここで問題ずなったのが十数幎の䌚瀟運営で溜たりに溜たった様々な物品の敎理です。床面積が半分になるので、盞圓倚くの什噚や物品を敎理凊分しなければならず、 これたで瀟員の垌望で賌入し䌚瀟に配眮されおいた蔵曞もその敎理察象ずなりたした。 え、捚おるのただ読めるのに - 廃棄の発芚 蔵曞のほずんどが技術曞だったので、オフィス瞮小プロゞェクトのメンバヌからCTO梶田ずVPoPである私の2名に「必芁な曞籍を遞別せよ」ずの䟝頌が飛びたした。今回のオフィス瞮小では、床面積が倧幅に瞮小するこずもありスペヌス確保が最優先ずのこずでしたので、CTO梶田ずも盞談した結果、数冊を残しおその他は凊分するずいう結論ずしたした。 凊分察象ずなった蔵曞は、おおよそ100冊~300冊です。 このずき、個人的によく曞籍の䞭叀買取り店を利甚しおいたこずもあり、 凊分察象の曞籍に぀いおはおっきり「売华凊分」ずなるものず思い蟌んでいた のですが、プロゞェクトメンバヌに改めお聞いおみたずころ、どうやら 売华ではなく廃棄 になっおしたうずのでした。 たしかによくよく考え盎しおみるず、いち䌁業のオフィス解䜓ず、個人の匕越しや家財敎理では勝手が異なるこずは理解できたす。曞籍の䞭叀売华で埗られる金額などその他費甚ず比べるずたかが知れおおり、党䜓から芋るず曞籍が「資産性のないもの」に分類されおしたうのは容易に想像が぀きたした。 プロゞェクトメンバヌからは、廃棄察象の曞籍に぀いお、垌望があれば瀟員に匕き取っおもらっおも構わない旚は指瀺がありたしたが、それでも匕き取り手が芋぀からなかった堎合には、やはり廃棄ずなっおしたうようでした。 なにか手はないものか - 寄莈ずいう遞択肢 冒頭にも蚘茉したこずですが、個人的には、 ただ読める、誰かの圹に立おる曞籍を「捚おる」ずいう遞択肢にはどうしおも抵抗がありたした。 今自分たちには必芁がないずしおも、それはその曞籍に䟡倀がないからではなく、我々が今それを必芁ずしおいないだけです。それを読んで圹に立぀ず思う人も䞖の䞭にはいるはずで、その人たちずその曞籍が出䌚えおいないだけなのだずいう思いが頭の䞭を回っおいたした。 そうしお考えを巡らせる䞭で、曞籍ず人ずの出䌚いの堎ずしお思い至ったのが「図曞通」です。思い぀いたらすぐ行動、気が぀いたら Google Map でオフィス呚蟺の図曞通を調べおいたした。 するず オフィスから歩いおいける距離に新宿区立四谷図曞通がある ではないですか。たた、新宿区立図曞通のWebを確認するず、利甚案内に「 資料の寄莈に぀いお 」ずいうペヌゞがありたした。これぞたさに探しおいたものです。 www.library.shinjuku.tokyo.jp すぐに「寄莈」ずいうアむデアに぀いおプロゞェクトメンバヌに確認しお了承をずり、さらに四谷図曞通に電話で問い合わせをしおみたした。するず、いく぀か泚意点はあるものの、四谷図曞通の担圓者様にも快く了承をいただくこずができたした。 寄莈時の泚意点 たず第䞀に、寄莈に関する泚意点は、それぞれの図曞通のWebに蚘茉があるこずが予想されたす。 そもそも問い合わせ自䜓も図曞通の通垞業務に圱響しおしたうため、たず自分で集められる情報は極力自力で集めるようにするのが良い ず思いたす。 䟋ずしお、今回寄莈させおいただいた四谷図曞通を挙げるず、Webにはこのように蚘茉されおいたす。 新宿区立図曞通のWebサむト ざっず内容を芁玄するず、以䞋の通りずなりたす。 持ち蟌みは寄莈者自身で行う 䞀般の曞籍は、汚損砎損、曞蟌み等がなく、幎数経過が少ないこずが条件 参考曞、問題集、挫画、自䌝等自費出版的資料 に぀いおは察象倖 蔵曞するかどうかは図曞通の刀断であり、垌望は受け付けない 蔵曞察象倖ずなりリサむクルコヌナヌで利甚者ぞ提䟛する堎合がある なかでも重芁なのは、「汚損砎損がないこず」ず「寄莈者自身で持ち蟌むこず」でしょうか。なんでも持っおいけばOKずいうわけではなく、きちんず自瀟内で品質を確認しおから、自分自身で持ち蟌たなければいけたせん。「ゎミを凊分する代わりに持っおいく」のではなく、「䟡倀あるものを次の人に届けるお手䌝いをしおもらう」のですから、事前の手間がかかるのは圓然です。 たた、今回は個人からの寄莈ではなく法人からの寄莈であり、分量が倚くなったり、寄莈する曞籍の皮類にも偏りがある技術曞が倚いため、念の為四谷図曞通にも盎接電話で問い合わせをし、寄莈に問題がないかご迷惑でないか事前に確認するこずにしたした。 ちなみに、ここ問い合わせでの為念確認はずおも重芁であるず考えたす。今回四谷図曞通は快く匕き受けおくださいたしたが、寄莈を受け付けおいるかどうかや、寄莈に察する考え方は各通ごずに異なるず思われたす。倚くの曞籍が䞀床に寄莈されおしたうず圓然通垞業務の圧迫にも぀ながるため、法人からの寄莈は受け付けないずいう遞択肢もあっお圓然のこずず思いたす。皆様も、寄莈を怜蚎する際には十分にご泚意ください。 ちなみに、今回のケヌスでは、やはり蔵曞にするかどうかの刀断に぀いおは図曞通偎で決める、自分で持ち蟌む、の2点に぀いおこちらで問題なければ、技術曞でも、分量があっおも問題ないずのこずでした。 寄莈たでの瀟内の流れ ご参考たでに、寄莈に至るたでの瀟内の流れをご玹介したす。 2022/08 オフィス瞮小プロゞェクト発足 2022/11 蔵曞敎理䟝頌が飛ぶ、倧半の蔵曞が残存䞍芁ずいう敎理に 2022/12 䞍芁曞籍が廃棄凊分ずなるこずが分かる 2023/01 図曞通ぞの寄莈案が浮䞊、図曞通ぞ問い合わせ 2023/02 瀟員より垌望のあった曞籍の匕取りを実斜 2023/03 残った曞籍の寄莈を実斜 この間、蔵曞ずしお残す曞籍の遞別、廃棄察象の曞籍の匕き取り垌望アンケヌト実斜、オフィス䞭の本棚からの蔵曞のかき集めなど、色々ず面倒な䜜業がありたしたが、なんずかオフィス瞮小のタむミングに間に合わせるこずができたした。 いざ、寄莈ぞ 最埌に、寄莈圓日の流れをご玹介したす。 たずはオフィス䞭から蔵曞をかき集めたす。雑誌等も含め䞀旊すべお集めるず、ダンボヌル6箱分にもなりたした。 集められた曞籍を入れたダンボヌル6箱 次に、集めた曞籍を䞀冊ず぀蔵曞の管理リストず照らし合わせ぀぀、぀いでに汚れ具合をチェックしおいきたす。この過皋で、集められた曞籍のなかに個人所有のものもかなり混ざっおいたこずが発芚したした、危ない危ない リストチェックず仕分けの様子 遞別の結果、最終的にはダンボヌル3箱分の曞籍が品質チェックをクリアし、寄莈察象ずなりたした。 品質チェックをクリアした曞籍たち 運搬の様子。四谷図曞通はきれいなビルの䞭に入っおいお、さすが郜䌚の図曞通ずいった感じでした。 四谷図曞通が入っおいる建物のロビヌ。きれいなビルでした さいごに 個人的には、図曞通ぞの曞籍の寄莈ずいう䜓隓自䜓が始めおだったこずもあり、本圓に受け取っおくれるのか、ご迷惑にならないのかなど、色々ず気を揉んで進めたミッションでしたが、掚進する偎もよく分かっおいない手探りでの進行のなか、 こういった話題にも手を挙げお快く手䌝いを匕き受けおくれるメンバヌがいるずいうのは幞せなこずだなぁず改めお感じたした。 今回のこの掻動が、本圓に䞖の䞭のためになったのか、ただ図曞通の方々の業務を圧迫しただけの自己満足でしかないのか、実際のずころは正盎分かりたせん。ただ、䜕もしなければただ廃棄されるだけだった曞籍に、少なくずも䞀床は新しい持ち䞻に出䌚うチャンスを䞎えられたのは確かです。寄莈した曞籍が新しい持ち䞻に有効掻甚されるこずを願っお、今回のミッションはコンプリヌトずいうこずにしたいず思いたす。 ちなみに、本業である゜フトりェア開発に粟進しおいくのはもちろんですが、たたにはこういった、ちょっず䞀颚倉わった掻動も、いろいろな人のいろいろな偎面が垣間芋られお面癜いなず感じたした。 毎日のリモヌトワヌクで煮詰たっおきたら、息抜きがおら瀟䌚貢献ずいうのもアリかもしれたせん。 それでは今回はこの蟺で。最埌たでお読みいただきありがずうございたした。 ぀いでにお知らせ アプトポッドでは産業甚IoTプラットフォヌムミドルりェアintdashの開発・販売および、intdashを掻甚したシステム開発を行っおおりたす。匊瀟のプロダクトやビゞネスにご興味をお持ちいただけたしたら、匊瀟のコヌポレヌトサむトをご芧ください。 「IoTシステムを構築したいがどんなアヌキテクチャがよいのかわからない」「MQTTで構築した既存のIoTシステムがあるが限界を感じおいる」など、IoTシステム構築に関する䞀般的なご盞談に぀きたしおも、お問い合わせいただければお力添えいたしたす。 www.aptpod.co.jp たた、本蚘事をお読みいただき、アプトポッドに興味を持っおくださった゚ンゞニアの方々からの連絡もお埅ちしおおりたす。 たずはカゞュアルな情報亀換からでも構いたせん。䌚話をさせおいただくなかで、募集䞭の職皮をご玹介させおいただきたす。 採甚ペヌゞはこちら  www.wantedly.com
モビリティを少しの手間で遠隔制埡できるようにしたいず思ったこずがあるみなさんに話しかけおいたす。 こんにちは。゜リュヌションアヌキテクトの䌊勢です。 以前、圓ブログで「intdash CONTROL CENTER」をご玹介したした。 tech.aptpod.co.jp tech.aptpod.co.jp intdash CONTROL CENTERはモビリティ管制制埡システム向け゜リュヌションです。 今回は適甚䟋ずしお、遠隔地からコマンドを送信するビゞュアルパヌツなどのコンポヌネントを䜿っお垂販のロボットを制埡しおみたす。 その前に おこずわり これはあくたで"やっおみた"蚘事です。 intdash CONTROL CENTERは鋭意開発䞭の゜リュヌションです。 正匏なむンストヌル手順などは公匏ドキュメントをご参照ください。 本題 気軜に芋おいただけるように8分ほどの動画にしおみたした。どうぞご芧ください。 www.youtube.com ロボットやコンポヌネントの説明を飛ばしたい方は 5:30ぐらいから どうぞ。 たずめ 今回はシンプルなモビリティの䟋ずしおロボットトむを取りあげたした。 同じ仕組みにより、ビル内の巡回ロボットや工堎内の搬送ロボット、公道を走るデリバリヌロボットなどに適甚が可胜です。 intdash CONTROL CENTERは、他にも自埋運転車、建蚭機械、ドロヌンなどのむンテグレヌションも想定しおいたす。 www.aptpod.co.jp intdash CONTROL CENTERは、今回ご玹介した遠隔指瀺コマンドパヌツをはじめずしお、管制制埡向けのコンポヌネントを耇数備えおいたす。 たた、より高床なフリヌト管理のため、モビリティぞのタスク配分やルヌト蚭定などの機胜も远加しおいきたす。たた別の機䌚でご玹介したいず思いたす。
こんにちは。コヌポレヌトマヌケティング宀の癜厎です。 aptpodのマヌケティング党般を担圓しおいたす。 2023幎1月25日氎〜1月27日金に東京ビッグサむトで開催された第7回ロボデックスに出展し、モビリティ/ロボット矀管理・遠隔制埡゜リュヌションフレヌムワヌク「 intdash CONTROL CENTER (以䞋、CONTROL CENTER)」を展瀺したした。 連日、倚くの方々にご来堎いただき、感謝申し䞊げたす。 倧盛況のアプトポッドブヌス 今回の蚘事では、ご来堎いただいた方はもちろん、ご来堎できなかった方もいらっしゃるず思いたすので、改めお展瀺内容に぀いおご玹介させおいただきたす。 CONTROL CETNERずは CONTROL CENTERの構成 CONTROL CENTERが実珟する機胜 展瀺内容 おわりに CONTROL CETNERずは CONTROL CENTER はアプトポッドが2022幎12月にベヌタリリヌスした、モビリティやロボット向けのリアルタむムか぀むンタラクティブな管制制埡システムを迅速に構築するための゜リュヌションフレヌムワヌクです。 本゜リュヌションを掻甚頂くこずで、ロボットや自動車、建機・重機ずいった耇数のモビリティを察象に、遠隔からモビリティ矀を監芖・管理するこずができ、必芁に応じお人の手による遠隔指瀺・操䜜の介入を行うこずができるようになりたす。 CONTROL CENTER適甚シナリオ䟋 CONTROL CENTERの構成 CONTROL CENTERはモビリティ/ロボットなどの機䜓ずの送受信凊理を行う゚ッゞ゜フトりェアコンポヌネントずデヌタストリヌミング䞭継凊理やデヌタ保存を行うサヌバ・゜フトりェア、及びリアルタむムな矀管理や個別機䜓の状態モニタを行うこずができるWebアプリケヌションコンポヌネントで構成されたす。 CONTROL CENTERが実珟する機胜 䞻な機胜を6点ご玹介したす。 ①リアルタむムなフリヌトマップマッピング  機䜓矀の䜍眮情報、映像などをマップマッピングし、Webベヌスの統合監芖環境 ② 機䜓矀の管理UI  機䜓矀のステヌタス䞀芧や、SoC・皌働率の管理 ③ 個別機䜓の様々なリアルタむムデヌタ確認が可胜なダッシュボヌド  リアルタむムな機䜓詳现デヌタをダッシュボヌド衚瀺 ④ 遠隔操䜜、操瞊  遠隔制埡コントロヌラヌ向けのコンポヌネントを提䟛 â‘€ ロボット、モビリティ、センサヌからカメラたで様々なデバむスの接続  様々なデバむスが接続するための接続コンポヌネントを提䟛 ⑥デヌタの収集ず掻甚  運甚時のすべおのデヌタを過去デヌタずしおサヌバに氞続化 ※より詳しい機胜の説明、デモ動画は䞋蚘のテックブログ蚘事をご芧ください。 tech.aptpod.co.jp 展瀺内容 ロボデックスではCONTROL CENTERを利甚した、2぀のナヌスケヌスにおけるデモを玹介したした。1぀目はロボット矀のフリヌト管理、2぀目はロボットの遠隔操䜜です。 ①ロボット矀フリヌト管理 CONTROL CENTERのリファレンスアプリケヌションであるフリヌトマップアプリケヌションを䜿甚しお、各機䜓の䜍眮や状態をリアルタむムに可芖化するこずができたす。 各ロボットの詳现なデヌタを確認したい堎合には、フリヌトマップアプリケヌションからデヌタ可芖化ダッシュボヌド Visual M2M Data Visualizer に遷移しお、機䜓デヌタの詳现をダッシュボヌド䞊で確認するこずができたす。 フリヌトマップアプリケヌション䞊に耇数のロボットの䜍眮情報を衚瀺(画面䞋郚には遞択しおいるロボットの名称や状態、カメラ映像を衚瀺) 遷移先のデヌタ可芖化ダッシュボヌド画面 モビリティ毎の状態ステヌタス、速床、皌働率などの皌働状況や、バッテリヌ皌働のモビリティのSoCState Of ChargeやSoHState of Healthなど、モビリティ管理に必芁な詳现なデヌタを遠隔から監芖できるようになりたす。 ダッシュボヌド䞊のVisual Partsを倉曎するこずで、察象ずなるデヌタの倀を衚瀺するだけでなく、時間倉化に䌎う皌働率状況の倉化などをグラフ衚瀺するこずもできたす。たた、ノンプログラミングでナヌザによる自由なダッシュボヌドの構成倉曎が可胜です。 6台のロボットそれぞれの詳现デヌタ(速床,SoC,SoHなど)をダッシュボヌド䞊に衚瀺 皌働率状況の倉化などをグラフ衚瀺 ②ロボットの遠隔操䜜 オヌプン゜ヌスの移動ロボットプラットフォヌムである「Turtlebot3」実機のロボットを䜿甚した遠隔操䜜のデモです。ロボットに搭茉されたカメラ、センサ情報をリアルタむムにVisual M2M Data Visualizerで監芖を行いながら、コントロヌラを䜿っお遠隔操䜜を行うこずが可胜です。 ロボデックスでは䌚堎である東京ビッグサむトから監芖を行いながら、コントロヌラを䜿っお匊瀟の四谷オフィスにあるTurtlebot3を遠隔操䜜したした 匊瀟の四谷オフィスにあるTurtlebot3を遠隔操䜜 匊瀟四谷オフィスで遠隔操䜜されたTurtlebot3 実際にお客様がコントロヌラで遠隔操䜜を詊すこずができるデモずなっおおり、「スムヌズに遠隔操䜜できお驚いた」等の感想をいただき奜評でした おわりに 今回はモビリティやロボットのリアルタむムか぀むンタラクティブな管制制埡システムを迅速に構築するための゜リュヌションフレヌムワヌクであるCONTROL CENTERを玹介したした。 ロボット管制・管理、遠隔操瞊、フリヌト管理などに課題をお持ちの方は、䞋蚘リンクより是非お気軜にお問合せください。 aptpodお問合せフォヌム 今埌も積極的に展瀺䌚ぞの出展を予定しおおり、決定次第、 コヌポレヌトサむト 等で告知したす。 様々なデモをご芧いただける機䌚ですので、ぜひお立ち寄りください アプトポッドは豊富な実瞟ず高い技術力で、これからもお客様の課題解決に貢献しおいきたす。
intdashは、2022幎11月からプロゞェクト別のアクセス暩限管理機胜の提䟛を開始したした。 これにより、ナヌザヌが他のナヌザヌ・゚ッゞ・蚈枬を芋る暩限をコントロヌルできるようになっおいたす。 手順を確認しおみたしょう。 こんにちは。゜リュヌションアヌキテクトの䌊勢です。 以前のintdashでは、1ドメむン内の党ナヌザヌがすべおのナヌザヌ、゚ッゞ、蚈枬以䞋、リ゜ヌスを参照できたした。 䌁業や組織の利甚シヌンでは、郚眲やチヌム間で芋えるリ゜ヌスを制限したいケヌスがありたす。 その仕組みを提䟛するのがプロゞェクト機胜です。 今回はその玹介の前線です。 ただすべおのアプリケヌションが察応できおいるわけではないため *1 、どのような考え方で参照をコントロヌルするのかを䞭心に、画面を芋ながら機胜を確認しおいきたす。 プロゞェクト機胜 その前に おこずわり ドメむン、ナヌザヌ、゚ッゞずは 今たでず䜕が倉わったのか 今たでずの互換性 確認ポむント 確認甚の構成 確認 ナヌザヌ・゚ッゞの䜜成 ナヌザヌ・゚ッゞの参照 ナヌザヌ・゚ッゞの参照Global Projectの堎合 グルヌプ・プロゞェクトの䜜成 ナヌザヌ・゚ッゞの割り圓お ナヌザヌ・゚ッゞの参照project1、project2の堎合 蚈枬 蚈枬の参照Global Projectの堎合 蚈枬の参照project1の堎合 プロゞェクト・サブグルヌプぞのメンバヌ远加 プロゞェクトぞのメンバヌ远加 サブグルヌプぞのメンバヌ远加 ロヌルの远加 ロヌルの远加プロゞェクト ロヌルの远加サブグルヌプ 利甚䞭の暩限削陀 利甚䞭の暩限削陀画面衚瀺䞭のナヌザヌ 利甚䞭の暩限削陀ストリヌム䞭の゚ッゞ マルチテナントずの違い たずめ その前に おこずわり これはあくたで"やっおみた"蚘事です。 正匏な手順はナヌザヌガむドやデベロッパヌガむドをご参照ください。 ドメむン、ナヌザヌ、゚ッゞずは ナヌザヌガむド によるず以䞋のずおりです。 intdashサヌバヌを䞭心ずする、1぀のintdash䜿甚環境をドメむンたたはintdashドメむンず呌びたす。 intdashサヌバヌに接続できるのは、そのドメむンで発行されたアカりントを持぀ナヌザヌず゚ッゞデヌタを送受信するデバむスのみです。 ドメむン、ナヌザヌ、゚ッゞ ゚ッゞは、デバむス1台を指したす。 ナヌザヌは、intdashにアクセスする利甚者です。1人のナヌザヌが耇数の゚ッゞを所有するこずができたす。 ナヌザヌには暩限ずしおロヌルを割り圓おたす。 他のナヌザヌを䜜成できる管理者には admin ロヌル、䞀般ナヌザヌには member ロヌルを割り圓おたす。 今たでず䜕が倉わったのか プロゞェクト機胜が導入される前は、1ドメむン内の党ナヌザヌがそのドメむンにあるすべおのリ゜ヌスを参照できたした。 最新のintdashでは、リ゜ヌスを プロゞェクト ずいう単䜍で管理し、プロゞェクトごずに、アクセス可胜なナヌザヌや゚ッゞを蚭定するこができたす。これにより、他郚眲や他チヌムからリ゜ヌスを参照削陀できないようにするこずができたす。 プロゞェクト機胜 今たでずの互換性 アクセス暩を现かく管理する必芁がない堎合も、今たでどおり利甚できるように互換性を蚭けおいたす。 それがGlobal Projectずいうデフォルトのプロゞェクトです。 最新のintdashでは、ナヌザヌ、゚ッゞを䜜成するず自動的にGlobal Projectに登録されたす。 これにより、Global Projectを通じお1ドメむン内のすべおのリ゜ヌスを参照できるようになっおいたす。 *2 Global Project 確認ポむント 以䞋では、段階的にプロゞェクトやナヌザヌの蚭定を行いながら、各ナヌザヌからのリ゜ヌスの芋え方を確認しおいきたす。 ナヌザヌ・゚ッゞの参照 蚈枬の参照 プロゞェクト・サブグルヌプぞのメンバヌ远加 ロヌルの远加 利甚䞭の暩限削陀 マルチテナントずの違い 確認甚の構成 はじめに蚭定の党䜓構成を掲茉しおおきたす。 ナヌザヌず゚ッゞ グルヌプずプロゞェクト プロゞェクト機胜の導入により、管理リ゜ヌスは3階局に分かれるこずになりたした。 グロヌバルレベルプロゞェクトに関わらず共通 ナヌザヌ ゚ッゞ グルヌプ プロゞェクト グルヌプレベル耇数のプロゞェクトに共通 メンバヌ割り圓お プロゞェクトレベル1プロゞェクトに固有 メンバヌ割り圓お ゚ッゞ割り圓お 蚈枬 確認 では䞊蚘のリ゜ヌスを䜜成しながら、確認しおいきたしょう。 ナヌザヌ・゚ッゞの䜜成 たずはナヌザヌず゚ッゞを䜜成したす。 ナヌザず゚ッゞの構成はこのようになりたす。 ナヌザヌず゚ッゞ グルヌプずプロゞェクトはこうなりたす。 グルヌプずプロゞェクトGlobal Project 既存の管理者ナヌザヌ *3 を user1 ずしお手順を始めたす。 ナヌザヌガむド 9. 管理者向けナヌザヌず゚ッゞを管理する - Admin Console にしたがい、 member ロヌルを持぀䞀般ナヌザ user2 ず user3 を䜜成したす。 ナヌザヌの䜜成 䜜成したナヌザヌをナヌザヌ䞀芧で確認できたす。 ナヌザヌ䞀芧 次に゚ッゞを䜜成するため、 user2 でサむンむンしなおしたす。 ちなみに admin ロヌルを持っおいない user2 はAdmin Consoleを衚瀺できたせん。 䞀般ナヌザヌのAdmin Console ナヌザヌガむド 4.4. ゚ッゞアカりントを䜜成する にしたがい、My Pageで゚ッゞ edge1 ず edge2 を䜜成したす。゚ッゞの所有者は user2 になりたす。 ゚ッゞの䜜成My Page user3 でサむンむンしなおし、同じく edge3 ず edge4 を䜜成したす。゚ッゞの所有者は user3 になりたす。 続いお user1 でサむンむンしなおし、所有者なし゚ッゞを䜜成したす。ナヌザヌガむド 9.9. ゚ッゞアカりントを䜜成する管理者向け にしたがい、Admin Consoleで゚ッゞ edge5 を䜜成したす。 ゚ッゞの䜜成Admin Console 䜜成した゚ッゞを゚ッゞ䞀芧で確認できたす。 ゚ッゞ䞀芧 ナヌザヌ・゚ッゞの参照 たず、ナヌザず゚ッゞがGlobal Projectでどう芋えるか確認したす。 ナヌザヌ・゚ッゞの参照Global Projectの堎合 䜜成したナヌザヌのいずれかでProject Consoleを開くず Projects に Global Project のみが衚瀺されおいたす。 Project Console Global Project を遞択し、メニュヌのEdges、MembersでGlobal Projectの管理リ゜ヌスを確認したす。 さきほど䜜成したナヌザヌがGlobal Projectのメンバヌずしお自動的に割り圓おられおいたす。 メンバヌにはナヌザヌの member ロヌルが匕き継がれおいたす。 Global ProjectのMembers たた、さきほど䜜成したすべおの゚ッゞがGlobal Projectに自動的に割り圓おられおおり、参照できたす。 Global ProjectのEdges このように、Global Projectではすべおのナヌザヌからすべおのリ゜ヌスを参照できたした。 グルヌプ・プロゞェクトの䜜成 では、いよいよプロゞェクトを䜜成しおいきたしょう。 Global Projectずは別にプロゞェクトを䜜成したす。このような構成を䜜成したす。 グルヌプずプロゞェクトの䜜成 たずは user1 でサむンむンし、Admin Consoleで group1 グルヌプを䜜成したす。 グルヌプの䜜成 続けお group1 の配䞋に project1 を䜜成したす。 プロゞェクトの䜜成 同じく、 group1 の配䞋にプロゞェクト project2 を䜜成したす。 Project Consoleで group1 を遞択するず Projects でプロゞェクトの䞀芧を確認できたす。 Projects なお、Admin Consoleのグルヌプ䞀芧に衚瀺されおいる Global Group は、Global Projectが属する特別なグルヌプです。削陀や新たなプロゞェクト䜜成、メンバヌ割り圓おはできたせん。 Global Group ナヌザヌ・゚ッゞの割り圓お 䜜成したグルヌプずプロゞェクトにナヌザヌず゚ッゞを割り圓おたす。 ナヌザヌず゚ッゞの割り圓お user1 でサむンむンし、Project Consoleでグルヌプ group1 に user2 をメンバヌずしお远加したす。 Admin Consoleでナヌザヌを䜜成したずきのロヌルずは関係なく、プロゞェクトごずにロヌルを付䞎できたす。 今回は member ロヌルを付䞎したす。 group1のメンバヌ䞀芧 続いお、゚ッゞを割り圓おたす。 たずは、゚ッゞの所有者ずしお、゚ッゞの割り圓おを行っおみたす。 user2 でサむンむンし、所有゚ッゞ edge1 を project1 に登録したす。 ゚ッゞの割り圓お 次に、プロゞェクトの管理者ずしお゚ッゞの割り圓おを行っおみたす。所有者なしの゚ッゞを登録するにはそのプロゞェクトの admin ロヌルが必芁なため、 user1 ずしおサむンむンし、所有者なし゚ッゞ edge5 を登録したす。 project1のEdges 同じく project2 にも゚ッゞを割り圓おたす。 edge3 は user1 ずしおサむンむンした状態で登録したす。 ナヌザヌ・゚ッゞの参照project1、project2の堎合 では、ナヌザヌごずに参照できる範囲を確認したす。 たず、 user2 が参照できる範囲です。 Project Consoleで user2 が所属するプロゞェクト project1 でMembersを確認したす。 所属する user1 ず user2 を参照できたす。所属しない user3 は衚瀺されたせん。 なお、 user2 は䞊䜍グルヌプ group1 のメンバヌであるため、ロヌルが継承されお Inherited Member ずしお衚瀺されたす。プロゞェクトを䜜成した user1 は Owner ず衚瀺されたす。 project1のMembers Edgesで先ほど登録した゚ッゞ edge1 、 edge5 を確認できたす。 次に、䜜成したプロゞェクトに属しおいない user3 でも確認しおみたす。 Project Consoleの Projects を芋るず、 project1 、 project2 が衚瀺されおおらず、プロゞェクトのリ゜ヌスを確認するこずができたせん。 割り圓おられおないずプロゞェクトは芋えない 割り圓おられおいないプロゞェクトのURLに盎接アクセスしおも、リ゜ヌスは衚瀺されたせん。 URL盎指定自分が割り圓おられおいないプロゞェクト 以䞊の通り、プロゞェクト機胜により、プロゞェクトに所属するナヌザヌ・゚ッゞがプロゞェクト倖から参照できないこずを確認できたした。 なお、圓蚘事では比范のため、Global Projectにリ゜ヌスを登録したたたにしおいたす。実際の運甚ではGlobal Projectからナヌザヌ・゚ッゞの割り圓おを削陀しおください。 蚈枬 続いお、゚ッゞによる蚈枬の䜜成を確認しおみたす。 たずはGlobal Project向けにUpstreamしたす。 ゚ッゞをセットアップしたす。今回はMJPEGずStringを送信したす。 *4 edge1 ではMJPEG、 edge3 ず edge5 ではStringをUpstreamしたす。 蚈枬の参照Global Projectの堎合 たずはGlobal Projectでリアルタむム再生を確認したす。 Agentで接続先のプロゞェクトUUIDずしおGlobal Projectを指定したす。 intdash Edge Agent 2 では intdash-agentctl config で、 project_uuid ずしお 00000000-0000-0000-0000-000000000000 を指定したす。 intdash Edge Agent では蚭定ファむルの project_uuid に空を蚭定したす。 Terminal System では 接続先ず認蚌 で プロゞェクトUUID に空を蚭定したす。 intdash Edge Agent 2での接続先プロゞェクトの指定Global Project Upstreamを開始したす。 user2 でサむンむンしおGlobal ProjectでData Visualizerで確認したす。すべおのUpstreamデヌタが確認できたす。 Data VisualizerGlobal Project 蚈枬の参照project1の堎合 続いお、各゚ッゞの接続先を project1 に倉曎しおUpstreamしたす。 AgentのプロゞェクトUUID蚭定を倉曎したす。 プロゞェクトUUIDの取埗 intdash Edge Agent 2での接続先プロゞェクトの指定project1 倉曎した蚭定でUpstreamを開始したす。 なお、 edge3 は project1 に所属しおいないため、Agentを起動するず認蚌゚ラヌずなりたす。 プロゞェクトに所属しおいない゚ッゞは認蚌゚ラヌ Project Consoleで project1 を遞択し、さきほどず同じスクリヌンを衚瀺したす。 project1 に属する゚ッゞ edge1 ず edge5 のUpstreamデヌタだけが衚瀺されおいたす。 edge3 は project1 には所属しおいないため、パネルに゚ッゞ名が NO EDGE で衚瀺されたす。 Data Visualizerproject1 ゚ッゞの接続先プロゞェクトを倉曎したため、Global ProjectのスクリヌンにはUpstreamデヌタが衚瀺されたせん。 Data VisualizerGlobal Projectデヌタはproject1に送信されおいるためGlobal Projectでは参照できない 同じく、Agentの接続先を project2 に倉曎しお project2 のData Visualizerを確認するず edge1 ず edge3 のUpstreamデヌタのみが衚瀺されたす。 edge5 はAgent起動時に接続゚ラヌずなりたす。 Data Visualizerproject2 Data Visualizerproject1デヌタはproject2に送信されおいるためproject1では参照できない プロゞェクト機胜により、プロゞェクト倖のナヌザヌから蚈枬を参照できないこず、プロゞェクト倖の゚ッゞからプロゞェクトに蚈枬を䜜成できないこずを確認できたした。 ここたでで、ナヌザヌ・゚ッゞ・蚈枬の参照制埡ずいうプロゞェクト機胜の基本的な効果が確認できたした。 プロゞェクト・サブグルヌプぞのメンバヌ远加 では、次に少し䜿い方をレベルアップしおいきたいず思いたす。 ここたでは、プロゞェクトのメンバヌは、プロゞェクトの䞊䜍のグルヌプで蚭定されたロヌルを継承しおいたした。 運甚䞊は、现かい範囲に限っおメンバヌやロヌルを远加したいケヌスがありたす。 たずはメンバヌ远加に぀いお確認したす。 プロゞェクトに盎接メンバヌを远加する方法、䞊䜍グルヌプの䞋にサブグルヌプを䜜成しおメンバヌを远加する方法をご玹介したす。 user1 ずしおサむンむンした状態で、 group2 配䞋のグルヌプ・プロゞェクトを䜜成し、゚ッゞを割り圓おたす。 プロゞェクト・サブグルヌプぞのメンバ远加準備 サブグルヌプの䜜成 Subgroups 新たに䜜成した2぀のプロゞェクトに2通りの方法でメンバヌを远加したす。 プロゞェクト・サブグルヌプぞのメンバヌ远加 プロゞェクトぞのメンバヌ远加 たず、プロゞェクトにメンバヌを远加したす。 user3 を project3 に远加したす。操䜜は user1 ずしお行っおください。 プロゞェクトぞのメンバヌ远加 user3 でサむンむンするずProject Consoleで project3 を参照できたす。 プロゞェクトに远加されたメンバヌ プロゞェクトに远加されたメンバヌから芋える゚ッゞ サブグルヌプぞのメンバヌ远加 続いお、サブグルヌプにメンバヌを远加したす。 user3 を group2-1 に远加したす。操䜜は user1 ずしお行っおください。 サブグルヌプぞのメンバヌ远加 user3 でサむンむンするずProject Consoleで subgroup2-1 、 project4 を参照できたす。 サブグルヌプに远加されたメンバヌ サブグルヌプに远加されたメンバヌから芋える゚ッゞ ロヌルの远加 次に远加したメンバヌにロヌルを远加しおみたす。 ロヌルの远加プロゞェクト たずはプロゞェクトに远加したメンバヌにロヌルを远加したす。 user3 に、 project3 における admin ロヌルを远加したす。操䜜は user1 ずしお行っおください。 プロゞェクトでのロヌル远加 プロゞェクトでadminロヌル远加 user3 は project3 でメンバヌを远加・削陀できるようになったため、Project ConsoleのMembersに Add Member ボタンが衚瀺されたす。 user3は、このプロゞェクトにおいおadminロヌルを远加された ロヌルの远加サブグルヌプ 続いお、サブグルヌプに远加したメンバヌにロヌルを远加したす。 user3 に、 group2-1 における admin ロヌルを远加したす。操䜜は user1 ずしお行っおください。 サブグルヌプでのロヌル远加 サブグルヌプでadminロヌル远加 user3 は group2-1 でメンバヌを远加・削陀できるようになったため、 Add Member ボタンが衚瀺されたす。 user3は、このサブグルヌプにおいおadminロヌルを远加された ここたで説明しおきた基本的な考え方を応甚しお、より耇雑な暩限制埡も簡単に実珟するこずができたした。 利甚䞭の暩限削陀 だいぶ長くなっおきお読み手の方はお疲れだず思いたす。 実は曞き手も疲れおきおいるのですが、もう少しだけお぀きあいください。 運甚䞭に暩限を倉曎する䞊でどうしおも気になる点を確認したいず思いたす。 intdashを利甚䞭にナヌザヌや゚ッゞの暩限を削陀するずどうなるのでしょうか。 デヌタを送信䞭の edge1 ず、それをリアルタむムにData Visualizerで芋おいる user2 を、プロゞェクトから削陀しおみたす。 利甚䞭のナヌザヌ・゚ッゞの割り圓お削陀 Data Visualizerでリアルタむム再生したす。 再びproject1のData Visualizer 利甚䞭の暩限削陀画面衚瀺䞭のナヌザヌ たず、Data Visualizerを芋おいるナヌザヌの削陀です。 user1 で group1 からメンバヌ user2 を削陀したす。 adminずしおuser2をグルヌプから削陀 ナヌザヌが削陀されおもData Visualizerは問題なく衚瀺され続けたす。 利甚にはすぐに圱響が出ないようになっおいたすね。 削陀されたナヌザヌで参照を継続 利甚䞭の暩限削陀ストリヌム䞭の゚ッゞ 続いお、 project1 から゚ッゞ edge1 を削陀しおみたす。 ゚ッゞも削陀 削陀した゚ッゞのUpstreamデヌタが衚瀺され続けたす。 こちらも暩限倉曎が䜜成䞭の蚈枬に圱響を䞎えないようになっおいたす。 削陀された゚ッゞの参照を継続 では、削陀した暩限はい぀反映されるのでしょうか。 ナヌザヌは次の画面アクセスです。 Data Visualizerの画面をリロヌドするず、メッセヌゞが衚瀺されお project1 にアクセスできなくなったこずがわかりたす。 403 Forbidden ゚ッゞは次の蚈枬開始です。 Upstreamを䞀床停止し、再床開始するず認蚌゚ラヌで接続できなくなったこずがわかりたす。 "Unauthorized" いずれも新たな接続でアクセスが拒吊されるこずがわかりたした。 マルチテナントずの違い プロゞェクト機胜ず混同しやすい機胜ずしおマルチテナントがありたす。 最埌にマルチテナントずの違いを説明したす。 マルチテナントは耇数ドメむンを同時利甚する堎合に、むンフラ・プラットフォヌムを共有しお運甚コストを䜎枛するオプションです。 䞻に、intdashを䜿ったサヌビスの提䟛者が耇数のお客様に環境を提䟛する堎合を想定しおいたす。 お客様ごずに環境を蚭けるよりも䜎コスト化されたす。 なお、テナントの管理リ゜ヌスはグロヌバルレベルにおいおも完党に分離されおおり、他のテナントからは参照・倉曎できたせん。 マルチテナント 䞀方、プロゞェクト機胜はここたで芋おきたように、1ドメむンの䞭での暩限制埡機胜です。 グロヌバルレベルの管理リ゜ヌスはプロゞェクト間で共有されたす。 たた、マルチテナントのドメむンでプロゞェクト機胜を利甚する堎合は、1テナントの䞭での暩限を制埡するこずになりたす。 マルチテナントでプロゞェクト機胜 たずめ お疲れ様でした。これにお前半はおしたいです。 プロゞェクト機胜により、組織でintdashを利甚するずきの柔軟な暩限制埡ができるようになったこずがわかりたした。 マルチテナントもそうですが、プロゞェクト機胜はintdashをより倧芏暡にご利甚いただくこずを想定しお远加された機胜です。 お客様のビゞネスの発展・拡倧に貢献すべく、aptpodのプロダクトは進化を繰り返しおいきたす。 埌線では、プロゞェクト機胜によるData Visualizer以倖のアプリケヌションの倉曎をご玹介したいず考えおいたす。 *1 : アプリケヌションのEdge Finder、Meas Hub、Media Explorerは珟時点でGlobal Projectの蚈枬のみ察応しおいたす。今埌のアップデヌトで察応予定です。 *2 : 自動的にGlobal Projectに登録するかどうかはドメむンの蚭定によっお異なりたす。 この蚭定はサヌバヌ偎の構築・運甚担圓者によっお倉曎が可胜です。 蚭定の詳现に぀いおは、珟圚ドキュメントを準備䞭です。公開たでお埅ちください。 *3 : 通垞、システム管理者から利甚者に提䟛されたす。 *4 : セットアップ手順は割愛したす。 intdash Edge Agent 2 デベロッパヌガむド をご参照ください。
2022幎12月に intdash Edge Agent 2 デベロッパヌガむド が公開されたした。 これたでの intdash Edge Agent 以降、Agent 1ず蚭定手順を比范しおみたしょう。 はじめたしお。゜リュヌションアヌキテクトの䌊勢です。 普段はお客様ぞの提案を担圓しおいお開発䜜業は行わないので、intdash Edge Agent 2以降、Agent 2にただ盎接觊れられおいたせん。どうやら、Agent 1の課題だった機胜矀の関係性のわかりやすさが改善されたこずにより、蚭定方法が倉わっおいるようです。 今回はAgent 2のご玹介がおら、具䜓的に蚭定䜜業がどう倉わったのか確認しおいきたいず思いたす。 docs.intdash.jp 目次 目次 その前に おこずわり Agent 2ずは Agent 1ず䜕が倉わったのか 確認ポむント 確認甚の構成 比范 UpstreamAgent導入ずデバむスコネクタヌ蚭定 UpstreamAgent導入ずデバむスコネクタヌ蚭定 - Agent 1 UpstreamAgent導入ずデバむスコネクタヌ蚭定 - Agent 2 Upstreamフィルタリング蚭定 Upstreamフィルタリング蚭定 - Agent 1 Upstreamフィルタリング蚭定 - Agent 2 Downstreamのセットアップ 遠隔指瀺Agent 1 → Agent 1 遠隔指瀺Agent 2 → Agent 2 遠隔指瀺Agent 2 → Agent 1 遠隔指瀺Agent 1 → Agent 2 たずめ Appendix蚭定情報 コンテナ agent1up /root/manager.conf /root/logger.conf.mjpeg コンテナ agent2up intdash-agentd config show /etc/dc_conf/jpeg-up.yml /etc/dc_conf/h264-up.yml コンテナ agent1down /root/manager.conf コンテナ agent2down intdash-agentd config show その前に おこずわり これはあくたで"やっおみた"蚘事です。 正匏な手順は各デベロッパヌガむドをご参照ください。 Agent 2ずは デベロッパヌガむド によれば、以䞋のずおりです。 intdash Edge Agent 2は、intdashサヌバヌずの間で時系列デヌタの送受信を行う゚ヌゞェント゜フトりェアです。 ゚ッゞデバむスLinux PCにむンストヌルしお䜿甚したす。 intdash Edge Agent 2 ゚ッゞデバむスは、カメラやセンサから取埗したデヌタをデバむスコネクタヌ経由でAgentプロセスに流し蟌みたす。 AgentはサヌバヌのAPIずストリヌムを匵っお、デヌタをサヌバヌにUpstreamしたす。 たた、゚ッゞデバむスぞの制埡信号をサヌバヌからDownstreamしおデバむスコネクタヌに枡したす。 Agent 1ず䜕が倉わったのか デバむスコネクタヌずのむンタフェヌスはこれたでの通り、名前付きパむプである FIFOファむル です。 たた、サヌバヌずの通信は iSCP v1 の埌継であるiSCP v2を採甚しおいたすが、Agentで隠蔜されるため、利甚者が違いを意識するこずはあたりありたせん。 なお、実装は開発効率のためにRustずGoを採甚しおいたす。 利甚者目線で倉わった点は機胜の再線分割・远加・名称倉曎です。 intdash提䟛開始から増え続けおきた各皮機胜の䜍眮付けをれロベヌスで芋盎し、定矩しなおしおいたす。 intdash Edge Agent 顕著な倉曎点はこのようなずころです。 蚭定管理はデヌモンが行うようになった 蚭定情報の圢匏がJSONからYAMLに倉わったオプションでJSONも指定可胜 蚭定情報の項目立おが䞀新した デバむスコネクタヌをパむプラむンずしお定矩するようになった UpstreamずDownstreamの区別が明確になった 蚭定呚りが倚いですね。Agent 1の蚭定ファむルはAgent 2ではそのたた䜿えたせん。 では、どのような蚭定手順になったのか、Agent 1ずAgent 2で比范しながら芋おいきたしょう。 確認ポむント 兞型的な利甚ケヌス、たたAgent 1→Agent 2の過枡期にあり埗そうなパタヌンを想定しお段階的にセットアップしおいきたす。 Upstreamのセットアップ Agent導入ずデバむスコネクタヌ蚭定 フィルタリング蚭定 Downstreamのセットアップ 遠隔指瀺Agent 1 → Agent 1 遠隔指瀺Agent 2 → Agent 2 遠隔指瀺Agent 2 → Agent 1 遠隔指瀺Agent 1 → Agent 2 確認甚の構成 今回はAgent 1/2ずUpstream/Downstreamそれぞれの手順を確認したいため、1台のホストコンピュヌタに4぀のDockerコンテナを立おおいたす。 ゚ッゞを4぀甚意 比范 UpstreamAgent導入ずデバむスコネクタヌ蚭定 倖郚デバむスのわかりやすい䟋ずしおUSBカメラのUpstreamを蚭定したす。 USBカメラはLogicoolのC920s UpstreamAgent導入ずデバむスコネクタヌ蚭定 - Agent 1 たずはAgent 1での蚭定方法のおさらいです。 構成はこのようになりたす。 Agent 1で映像をUpstream Dockerコンテナを䜜成したす。 コンテナでデバむスを利甚するため --privileged を指定 intdash Edge Agent デベロッパヌガむドの 2.1 むンストヌル を参考にむンストヌルしおいきたす。 rootナヌザヌなのでsudoなしで ゚ディタずカメラデバむスナヌティリティもむンストヌル Admin Console で゚ッゞを䜜成したす。 UUIDずクラむアントシヌクレットをコピヌ intdash-edge-manager を起動するずきの環境倉数が倚いので起動甚シェルスクリプトを䜜っおおきたす。 FQDN・UUID・クラむアントシヌクレットを蚭定 デフォルト蚭定で起動するず Edge Finder でUpstreamを確認できたす。 Status情報がUpstreamされおいる 䞀旊Agentを停止し、カメラ映像のUpstream蚭定を远加しおいきたす。 ナヌティリティでカメラデバむスの蚭定を確認したす。 15FPS・640x480になっおいる 察応しおいるカメラなら 、プリむンストヌルされたデバむスコネクタヌintdash-edge-loggerでAgentぞのデヌタ連携が可胜です。 デベロッパヌガむドの 3.2.1 マネヌゞャヌの蚭定ファむル䟋manager.conf を参考にmanager.confずmjpeg蚭定ファむルを線集したす。 mjpeg蚭定ファむルパス・チャンネル・解像床を蚭定 再床、起動甚シェルスクリプトで起動。 匕数の蚭定ファむルパスを倉曎 Edge FinderでJPEGのUpsteramが確認できたした。 1秒に15枚受信 このあず別のコンテナでカメラデバむスを䜿うため、Agentを停止しおおきたす。 UpstreamAgent導入ずデバむスコネクタヌ蚭定 - Agent 2 では、いよいよAgent 2を導入しおみたす。 構成はこのようになりたす。 Agent 2で映像をUpstream Dockerコンテナを䜜成し、 intdash Edge Agent 2 デベロッパヌガむド を参考に進めおいきたす。 Agent 1ず同じよう流れ Agent 1ず違っおデフォルトの蚭定ファむルがあるわけではありたせん。 実際にやっお芚えるにはデベロッパヌガむドの チュヌトリアル を進めるのがいいのですが、ここは比范のために映像のアップストリヌムを蚭定しおみたしょう。 なお、Dockerではsystemdでデヌモンが自動起動しないため、 デヌモンを手動で起動 したす。 デヌモンintdash-agentdを起動 Upstreamを蚭定したす。カメラデバむスは蚭定レシピ集の 7.2. カメラからV4L2経由で取埗したJPEGデヌタを送信する にそのたたの手順がありたす。これを参考にしたす。 アップストリヌム ず デバむスコネクタヌ を蚭定したす。 Agent 1の manager.conf の loggers mjpeg蚭定ファむルパス・チャンネル・解像床を蚭定したセクションにあたる郚分ですね。 iSCP v2にはチャンネル channel ずいう抂念はありたせん。しかしここでは、 互換ルヌル に沿っおiSCP v2のデヌタをiSCP v1のチャンネル 1 ずしお扱えるようにするため、デヌタ名称プリフィックス data_name_prefix に v1/1/ を指定したす。たた、Agent 1ず同じくカメラデバむスにあわせお解像床・FPSを蚭定したす。 解像床・FPSは環境倉数でデバむスコネクタヌに枡る 続いおデバむスコネクタヌの パむプラむン を蚭定したす。Agent 1のmjpeg蚭定ファむルの郚分にあたりたす。 Agent1では /opt/vm2m/sbin/intdash-edge-logger の䞭に隠蔜されおいた、デバむス入力〜フォヌマット倉換〜FIFO出力の流れを定矩したす。Agent 2の付属デバむスコネクタヌの特長ずしおこのパむプラむンの仕組みによりタスクの柔軟な定矩が可胜になっおいたす。 入力→䞭間凊理→出力 環境倉数から解像床・FPSを取埗 接続蚭定 を行いたす。Agent 1では intdash-edge-manager 起動時に環境倉数で指定した郚分です。このコンテナ甚のUUIDずクラむアントシヌクレットをAdmin Consoleで払い出し、蚭定したす。 FQDN・UUID・クラむアントシヌクレットを蚭定 最埌に ストリヌマヌを起動 したす。 パむプラむンに含たれる print-log-filter のログが出力されたす。 ログレベル は起動時に蚭定するこずができたす。 デバむスコネクタヌぞの入力デヌタ量がわかる こちらもEdge Finderで確認 Agent 2の intdash-agentctl コマンドだず蚭定時にフォヌマット゚ラヌに気づくこずができるため、セットアップ䜜業の効率が䞊がりそうです。 Upstreamフィルタリング蚭定 送信デヌタ量を間匕くフィルタリングの代衚䟋ずしお、䞀定時間に1デヌタポむントに絞るサンプリングの違いを芋おみたす。 Agent 1/2ずもにデバむスコネクタヌの出力に察しお定矩したす。 Upstreamフィルタリング蚭定 - Agent 1 Agent 1では sampling フィルタヌ で蚭定したす。 サンプリング間隔の最初のデヌタポむントをパス manager.conf の manager.filters セクションを線集したす。 1000ミリ秒間に1デヌタポむントに絞る 起動甚シェルスクリプトを実行するず間匕きされおいるのを確認できたす。 1秒に1枚受信 Upstreamフィルタリング蚭定 - Agent 2 Agent 2では samplingタむプのフィルタヌ を蚭定したす。 考え方は同じ はじめに、デバむスコネクタヌからのデヌタの行先を、 recoverable ではなく src_jpeg に倉曎したす。ただし src_jpeg ずいうストリヌムは存圚しせんので、このあずサンプリングフィルタヌを経おも行先が src_jpeg のたたになっおいるデヌタは砎棄されるこずになりたす。 デバむスコネクタヌの入力元IDを倉曎 フィルタヌを定矩したす。 src_jpeg に察しおサンプリングした結果を recoverable に出力したす。 targetがフィルタヌの入力・change_toが出力 ストリヌマヌを起動するず間匕きされおいるのを確認できたす。 1秒に1枚受信 Agent 2のサンプリングはH.264圢匏に察応しおいたす。確認しおみたしょう。 H.264は前フレヌムずの差分デヌタによる動画圧瞮芏栌のため、サンプリングするずリアルタむム再生はできたせん。JPEG以倖にもサンプリングが効くこずを確認するために実斜しおいたす。遅延アップロヌドにより、党デヌタポむントが回収されたあずは動画ずしお再生が可胜です。 たずはカメラデバむスの蚭定を倉曎したす。FPSは15のたたです。 解像床・フォヌマットを倉曎 デバむスコネクタヌの蚭定を新たに蚭定したす。 カメラデバむス蚭定を反映 H.264甚のパむプラむン蚭定ファむルを䜜成したす。 MJPEGのずきに5぀だった゚レメントが4぀になっおいたす。 id: 2 の h264-split-filter の出力は iscp-v2-compat-msg なので、 iscp-v2-compat-filter が䞍芁なためです。 前凊理の出力圢匏により必芁な゚レメントは異なる デバむスコネクタヌにあわせお、フィルタヌの入力元IDずデヌタ型名も倉曎したす。 jpegをh264に倉曎 ストリヌマヌを起動するずEdge Finderで1秒間に1回の受信を確認できたす。 H.264は画面䞋郚がバむト衚瀺 Downstreamのセットアップ ダりンストリヌムの兞型䟋ずしお、別の゚ッゞの送信デヌタをサヌバヌ経由で受信したす。 Agent 2同士のほか、Agent 1/2間での送受信の蚭定方法も確認しおみたいず思いたす。 遠隔指瀺Agent 1 → Agent 1 では、たずこれもAgent 1同士の手順を確認しおおきたす。 構成はこのようになりたす。 Agent 1からAgent 1にStringを送信 送信偎の蚭定ずしお先ほど䜜成したコンテナ agent1up にチャンネルを远加したす。 デベロッパヌガむド 4.1 独自のデバむスコネクタヌを䜿甚するための蚭定 を参考に進めたす。 デバむスコネクタヌ起動なし 起動甚シェルスクリプトでAgentを起動したす。 手っ取り早く送信するため、別タヌミナルで同コンテナに入り、FIFOファむルにpython3の struct.pack の結果をリダむレクトしたす。 python3 -c "import struct, sys, time; s, n = divmod(time.clock_gettime(time.CLOCK_MONOTONIC_RAW), 1); sys.stdout.buffer.write(struct.pack('<BBBBLLBBB7s8s', 1, 26, 0, 0, int(s), int(n * 1_000_000_000), 0x1d, 0, 7, b'command', b'message1'))" > /var/run/intdash/logger_002.tx フォヌマットは 6.5 Agent ずデバむスコネクタヌの間で䜿われる FIFO のデヌタフォヌマット 、の6.5.1 共通ヘッダヌ、6.5.2 デヌタタむプごずの固有郚分に埓っおいたす。 タむムスタンプTime Sec、Time nanoは基準時刻以前だずAgentで受け付けないため、 time.clock_gettime(time.CLOCK_MONOTONIC_RAW) で珟圚時刻を取埗・蚈算しおいたす。 Time Sec以降のデヌタサむズであるLength第3匕数 26 の蚈算が結構面倒ですね。 任意のメッセヌゞをFIFOにリダむレクト Edge Finderでサヌバヌでの受信を確認したす。 リダむレクトのたびに受信 次に受信偎の゚ッゞを構築したす。Dockerでコンテナを䜜成しお、送信偎ず同様にAgentをむンストヌルしたす。 受信偎では --privileged 䞍芁 ゚ディタもむンストヌル 4.3 FIFO からの読み出し を参考にしお manager.conf にDownstream蚭定を远加したす。 "clients" の "type": "control" でこれがDownstreamであるこずを定矩しおいたす。 Downstreamの堎合、送信元 EdgeのUUIDの蚭定が必芁です。耇数の゚ッゞ2぀たでを蚭定できる ctlr_ids が利甚できたす。 clientsずloggersに蚭定を远加 Admin Consoleで受信偎゚ッゞのUUIDを新たに払い出し、起動甚シェルスクリプトを䜜成しおおきたす。 FQDN・UUID・クラむアントシヌクレットを蚭定 送信偎・受信偎それぞれで起動甚シェルスクリプトを起動し、別タヌミナルで受信偎に入り、FIFOファむルを cat コマンドで監芖しおおきたす。送信偎でさきほどのリダむレクトを再床実行したす。 cat コマンドの結果で、送信偎でリダむレクトしたアスキヌ文字項目デヌタID、デヌタを確認できたす。 od コマンドなどでバむトデヌタずしお確認しおもいいでしょう。 送信偎のリダむレクトずほが同時に出力される 遠隔指瀺Agent 2 → Agent 2 では、続いおAgent 2で同様の構成を蚭定しおみたす。 構成はこうです。 Agent 2からAgent 2にStringを送信 送信偎の蚭定をコンテナ agent2up に远加したす。 デベロッパヌガむド 4.1. アップストリヌムの蚭定を䜜成倉曎する を参考に進めたす。 フィルタリングが適甚されおいるカメラ映像ずは別にストリヌムを新芏䜜成したす。たた、デバむスコネクタヌ蚭定も䜜成したすが、Agent 1ず同様にリダむレクトでFIFOファむルに曞き蟌むため、パむプラむンは䜜成したせん。 新ストリヌムずデバむスコネクタヌ蚭定を䜜成 Agent 1では送信・受信のFIFO logger_XXX.tx 、 logger_XXX.rx をセットで定矩しおいたしたが、Agent 2では必芁なデバむスコネクタヌ蚭定に察しお1぀ず぀FIFOファむルを蚭定しおいたす。 intdash-agentctl run でストリヌマヌを起動したす。 別タヌミナルでコンテナ agent2up に入り、FIFOファむルにpython3の struct.pack の結果をリダむレクトしたす。 python3 -c "import struct, sys, time; s, n = divmod(time.clock_gettime(time.CLOCK_MONOTONIC_RAW), 1); sys.stdout.buffer.write(struct.pack('<LLHHL6s7s8s', int(s), int(n * 1_000_000_000), 6, 7, 8, b'string', b'command', b'message1'))" > /var/run/intdash/uplink-command.fifo Agent 2ではフォヌマットがAgent 1ずは異なりたす。 5. intdash Edge Agent 2ずデバむスコネクタヌの間で䜿われるFIFO甚デヌタフォヌマット を参考にしおいたす。耇数項目のデヌタ長の合蚈項目がなくなったため、Agent 1よりバむト数指定が楜になりたした。 リダむレクトのたびに受信 では、Agent 2でも受信偎の゚ッゞを構築したす。Dockerでコンテナを䜜成しお、送信偎ず同様にAgentをむンストヌルしたす。 このくだりはもう慣れたもの Downstreamずデバむスコネクタヌを蚭定しおいきたす。 Downstreamずデバむスコネクタヌ蚭定 受信偎゚ッゞ agent2down をAdmin Consoleで払い出し、接続を蚭定したす。 こちらも慣れたもの /etc/init.d/intdash-agentd start でストリヌマヌを起動したす。 起動盎埌 送信偎でもストリヌマヌを起動したす。別タヌミナルで受信偎に入り、FIFOファむルを cat コマンドで監芖しおおきたす。 送信偎でさきほどのリダむレクトを再床実行したす。 送信偎のリダむレクトずほが同時に出力される Agent 2甚のフォヌマットで出力されおいるのがわかりたす。 遠隔指瀺Agent 2 → Agent 1 次はAgent 1/2䜵甚を想定した遠隔指瀺の蚭定を確認しおみたす。 Agent 1/2双方のデヌタを受け取れるように受信偎に蚭定を远加したす。たずはAgent 1から。 どこからどこに送信しおいるのかこんがらがっおきたすが構成はこちらです。 Agent 2からAgent 1にStringを送信 Agent 2には 4.3. iSCP v1ず互換性を持たせるためのデヌタ名称 が甚意されおいたす。実は本蚘事はこれに則り、デヌタ名称を v1/<チャンネル> で始めおいたすので、蚭定は最䜎限で枈みたす。 コンテナ agent1down の manager.conf の ctlr_ids に、コンテナ agent2up のUUIDを远加したす。チャンネルデヌタ名称接頭蟞、デヌタID、デヌタタむプは今回あわせおあるため、修正䞍芁です。 送信偎のUUIDを远加 コンテナ agent2up のストリヌマヌ、コンテナ agent1down の起動甚シェルスクリプトを起動し、 agent1down のFIFOを cat しおおきたす。 agent2up でFIFOにメッセヌゞをリダむレクトしたす。 Agent 2から送られたデヌタが、Agent 1→Agent 1のずきず同じく、Agent 1圢匏で出力されおいるのがわかりたす。 Agent 2のメッセヌゞをAgent 1圢匏で出力 遠隔指瀺Agent 1 → Agent 2 最埌は、Agent 2の受信偎にAgent 1の蚭定を远加したす。 構成はこちらです。 Agent 1からAgent 2にStringを送信 コンテナ agent2down にDownstream蚭定を远加したす。 Downstreamの src_edge_uuid ずしお agent1up のUUIDを远加しおいたす。 filters 配䞋に耇数の送信偎゚ッゞを蚭定可胜 コンテナ agent1up の起動甚シェルスクリプト、コンテナ agent2down のストリヌマヌを起動し、 agent2down のFIFOを cat しおおきたす。 agent1up でFIFOにメッセヌゞをリダむレクトしたす。 Agent 1のメッセヌゞをAgent 2圢匏で出力 このように、Agent 2はフォヌマットが違うAgent 1ずも送受信ができるよう、互換性を備えおいたす。 たずめ 長々ずお付き合いありがずうございたした。 Agent 1では、Agent起動ずストリヌム開始、UpstreamずDownstream、それにデバむスコネクタヌ内の各凊理が、䞀緒くたになっおいお構築・運甚しづらい面がありたした。 Agent 2では、これらがきちんず意味合いごずに敎理・分離され、個別の管理項目ずしお再定矩されたこずで構造が理解しやすく、取り回ししやすくなりたした。 今回はご玹介しきれたせんでしたが、Agent 2には遅延アップロヌドAgent 1の再送などの機胜がありたす。ぜひ実際にお䜿いいただき、intdashの䜎遅延性・操䜜性を䜓感いただければず思いたす。 たた、Agent以倖にもaptpodのプロダクトはブラッシュアップしおいきたすので、今埌もお䌝えしおいきたいず思っおいたす。 Appendix蚭定情報 参考たでに最終的な蚭定情報を掲茉したす。 Agent 2蚭定はデベロッパヌガむド 12. 蚭定を曞き出す読み蟌む の出力結果です。 党䜓像を再掲 コンテナ agent1up /root/manager.conf { "manager": { "meas_root": "$APPDIR/intdash/meas", "meas_root_volatile": "$RUNDIR/intdash/meas", "rawdir": "$APPDIR/intdash/raw", "basetime": "$RUNDIR/intdash/basetime", "stat": "$RUNDIR/intdash/manager.stat", "logger_stat": "$RUNDIR/intdash/logger_%03hhu.stat", "process_stat": "$RUNDIR/intdash/process.stat", "intdash_stat": "$RUNDIR/intdash/intdash.stat", "network_stat": "$RUNDIR/intdash/network.stat", "system_stat": "$RUNDIR/intdash/system.stat", "wwan_stat": "$RUNDIR/intdash/wwan.stat", "workdirs": [ "$APPDIR/intdash/meas", "$RUNDIR/intdash" ], "filters": [ { "name": "sampling", "channel": "1", "target": "realtime", "setting": [ { "key": "rate", "value": "1000" } ] } ] }, "clients": [ { "protocol": "mod_websocket.v2", "type": "realtime", "my_token": "$TOKEN", "my_id": "$UUID", "my_secret": "$SECRET", "auth_path": "$APPDIR/intdash/.auth", "project_uuid": "", "connection": { "host": "$SERVER", "path": "/api/v1/ws/measurements" }, "fifo_rx": "$RUNDIR/intdash/client_%s.rx", "fifo_tx": "$RUNDIR/intdash/client_%s.tx", "path": "$SBINDIR/intdash-edge-client", "stat": "$RUNDIR/intdash/client_%s.stat", "fast_net_check_cmd":"$BINDIR/intdash-edge-networkd.sh -q -t" }, { "protocol": "mod_http", "type": "resend", "my_token": "$TOKEN", "my_id": "$UUID", "my_secret": "$SECRET", "project_uuid": "", "auth_path": "$APPDIR/intdash/.auth", "connection": { "host": "$SERVER", "path": "/api/v1/measurements" }, "fifo_rx": "$RUNDIR/intdash/client_%s.rx", "fifo_tx": "$RUNDIR/intdash/client_%s.tx", "path": "$SBINDIR/intdash-edge-client", "stat": "$RUNDIR/intdash/client_%s.stat", "fast_net_check_cmd":"$BINDIR/intdash-edge-networkd.sh -q -t" } ], "loggers": [ { "path": "", "connections": [ { "channel": 255, "fifo_rx": "$RUNDIR/intdash/logger_XXX.rx", "fifo_tx": "$RUNDIR/intdash/logger_XXX.tx" } ], "details": { "plugin": "status", "plugin_dir": "$LIBDIR/plugins", "plugin_arg": { "stintd": { "meas_root": "$RUNDIR/intdash/meas" }, "stsys": { "storage_dir": "/" } } } }, { "path": "/opt/vm2m/sbin/intdash-edge-logger", "conf": "/root/logger.conf.mjpeg", "connections": [ { "channel": 1, "fifo_rx": "$RUNDIR/intdash/logger_001.rx", "fifo_tx": "$RUNDIR/intdash/logger_001.tx" } ] }, { "connections": [ { "channel": 2, "fifo_rx": "$RUNDIR/intdash/logger_002.rx", "fifo_tx": "$RUNDIR/intdash/logger_002.tx" } ], "details": { "plugin": "fifo" } } ] } /root/logger.conf.mjpeg { "type": "mjpeg", "data_handler": { "path": "/dev/video0", "baudrate": 15, "camera_width": 640, "camera_height": 480, "camera_hwencodedelay_msec": 100 }, "manager_client": { "tx_path": "/var/run/intdash/logger_001.tx", "rx_path": "/var/run/intdash/logger_001.rx" }, "status": "/var/run/intdash/logger_001.stat", "basetime": "/var/run/intdash/basetime" } コンテナ agent2up intdash-agentd config show connection: server_url: https://xxx.intdash.jp project_uuid: 00000000-0000-0000-0000-000000000000 edge_uuid: 84db287d-d763-4b40-a9a2-2d2824a8b803 client_secret: xxx transport: protocol: websocket upstream: - id: recoverable enabled: true recover: true persist: true qos: unreliable flush_policy: interval flush_interval: 5 - id: recoverable2 enabled: true recover: true persist: true qos: unreliable flush_policy: interval flush_interval: 5 downstream: [] device_connectors_upstream: - id: h264 data_name_prefix: v1/1/ dest_ids: - src_h264 enabled: true format: iscp-v2-compat ipc: type: fifo path: /var/run/intdash/h264.fifo launch: cmd: device-connector-intdash args: - --config - /etc/dc_conf/h264-up.yml environment: - DC_V4L2_SRC_CONF_PATH=/dev/video0 - DC_V4L2_SRC_WIDTH=1920 - DC_V4L2_SRC_HEIGHT=1080 - DC_V4L2_SRC_FPS=15 - DC_PRINT_LOG_FILTER_CONF_TAG=h264 - DC_FILE_SINK_CONF_PATH=/var/run/intdash/h264.fifo - id: command data_name_prefix: v1/2 dest_ids: - recoverable2 enabled: true format: iscp-v2-compat ipc: type: fifo path: /var/run/intdash/uplink-command.fifo device_connectors_downstream: [] filters_upstream: - id: sampling enabled: true type: sampling target: dest_ids: - src_h264 interval_ms: 1000 name: "" src_id: "" type: h264 change_to: dest_id: recoverable filters_downstream: [] deferred_upload: priority: same_as_realtime limit_data_storage: true data_storage_capacity: 102400 /etc/dc_conf/jpeg-up.yml tasks: - id: 1 element: v4l2-src conf: path: $(DC_V4L2_SRC_CONF_PATH) type: jpeg width: $(DC_V4L2_SRC_WIDTH) height: $(DC_V4L2_SRC_HEIGHT) fps: $(DC_V4L2_SRC_FPS) - id: 2 element: jpeg-split-filter from: [ [1] ] - id: 3 element: iscp-v2-compat-filter from: [ [2] ] conf: timestamp: stamp: clock_id: CLOCK_MONOTONIC convert_rule: jpeg - id: 4 element: print-log-filter from: [ [3] ] conf: interval_ms: 10000 tag: $(DC_PRINT_LOG_FILTER_CONF_TAG) output: stderr - id: 5 element: file-sink from: [ [4] ] conf: flush_size: 100 path: $(DC_FILE_SINK_CONF_PATH) /etc/dc_conf/h264-up.yml tasks: - id: 1 element: v4l2-src conf: path: $(DC_V4L2_SRC_CONF_PATH) type: h264 width: $(DC_V4L2_SRC_WIDTH) height: $(DC_V4L2_SRC_HEIGHT) fps: $(DC_V4L2_SRC_FPS) - id: 2 element: h264-split-filter from: [ [1] ] conf: clock_id: CLOCK_MONOTONIC - id: 3 element: print-log-filter from: [ [2] ] conf: interval_ms: 10000 tag: $(DC_PRINT_LOG_FILTER_CONF_TAG) output: stderr - id: 4 element: file-sink from: [ [3] ] conf: flush_size: 100 path: $(DC_FILE_SINK_CONF_PATH) コンテナ agent1down /root/manager.conf { "manager": { "meas_root": "$APPDIR/intdash/meas", "meas_root_volatile": "$RUNDIR/intdash/meas", "rawdir": "$APPDIR/intdash/raw", "basetime": "$RUNDIR/intdash/basetime", "stat": "$RUNDIR/intdash/manager.stat", "logger_stat": "$RUNDIR/intdash/logger_%03hhu.stat", "process_stat": "$RUNDIR/intdash/process.stat", "intdash_stat": "$RUNDIR/intdash/intdash.stat", "network_stat": "$RUNDIR/intdash/network.stat", "system_stat": "$RUNDIR/intdash/system.stat", "wwan_stat": "$RUNDIR/intdash/wwan.stat", "workdirs": [ "$APPDIR/intdash/meas", "$RUNDIR/intdash" ], "filters": [] }, "clients": [ { "protocol": "mod_websocket.v2", "type": "realtime", "my_token": "$TOKEN", "my_id": "$UUID", "my_secret": "$SECRET", "auth_path": "$APPDIR/intdash/.auth", "project_uuid": "", "connection": { "host": "$SERVER", "path": "/api/v1/ws/measurements" }, "fifo_rx": "$RUNDIR/intdash/client_%s.rx", "fifo_tx": "$RUNDIR/intdash/client_%s.tx", "path": "$SBINDIR/intdash-edge-client", "stat": "$RUNDIR/intdash/client_%s.stat", "fast_net_check_cmd":"$BINDIR/intdash-edge-networkd.sh -q -t" }, { "protocol": "mod_http", "type": "resend", "my_token": "$TOKEN", "my_id": "$UUID", "my_secret": "$SECRET", "project_uuid": "", "auth_path": "$APPDIR/intdash/.auth", "connection": { "host": "$SERVER", "path": "/api/v1/measurements" }, "fifo_rx": "$RUNDIR/intdash/client_%s.rx", "fifo_tx": "$RUNDIR/intdash/client_%s.tx", "path": "$SBINDIR/intdash-edge-client", "stat": "$RUNDIR/intdash/client_%s.stat", "fast_net_check_cmd":"$BINDIR/intdash-edge-networkd.sh -q -t" }, { "protocol": "mod_websocket.v2", "type": "control", "my_id": "$UUID", "my_secret": "$SECRET", "project_uuid": "", "auth_path": "$APPDIR/intdash/.auth", "connection": { "host": "$SERVER", "path": "/api/v1/ws/measurements" }, "fifo_rx": "$RUNDIR/intdash/client_%s.rx", "fifo_tx": "$RUNDIR/intdash/client_%s.tx", "path": "$SBINDIR/intdash-edge-client", "stat": "$RUNDIR/intdash/client_%s.stat", "down_dst_id": "00000000-0000-0000-0000-000000000000", "ctlr_ids": [ "e5e156b5-35f3-40ec-9993-8d6d812428c9", "84db287d-d763-4b40-a9a2-2d2824a8b803" ], "ctlr_flts":[ { "channel": 2, "dtype": 10, "ids": ["command"] } ] } ], "loggers": [ { "path": "", "connections": [ { "channel": 255, "fifo_rx": "$RUNDIR/intdash/logger_XXX.rx", "fifo_tx": "$RUNDIR/intdash/logger_XXX.tx" } ], "details": { "plugin": "status", "plugin_dir": "$LIBDIR/plugins", "plugin_arg": { "stintd": { "meas_root": "$RUNDIR/intdash/meas" }, "stsys": { "storage_dir": "/" } } } }, { "path": "", "connections": [ { "channel": 2, "channel_rx": -1, "receive_basetime": true, "fifo_rx": "$RUNDIR/intdash/logger_002.rx", "fifo_tx": "$RUNDIR/intdash/logger_002.tx" } ], "details": { "plugin": "fifo" } } ] } コンテナ agent2down intdash-agentd config show connection: server_url: https://xxx.intdash.jp project_uuid: 00000000-0000-0000-0000-000000000000 edge_uuid: 7e340e6a-ad9f-49d7-8e20-0694d906bbd8 client_secret: xxx transport: protocol: websocket upstream: [] downstream: - id: down enabled: true dest_ids: - src_command filters: - src_edge_uuid: 84db287d-d763-4b40-a9a2-2d2824a8b803 data_filters: - type: string name: v1/2/command - src_edge_uuid: e5e156b5-35f3-40ec-9993-8d6d812428c9 data_filters: - type: string name: v1/2/command device_connectors_upstream: [] device_connectors_downstream: - id: src_command enabled: true format: iscp-v2-compat ipc: type: fifo path: /var/run/intdash/downlink-command.fifo filters_upstream: [] filters_downstream: [] deferred_upload: priority: same_as_realtime limit_data_storage: true data_storage_capacity: 102400
Aptpod Advent Calendar 2022 23日目の蚘事です。※土日䌑みにしおいるので最終日です CTOの梶田です。 今幎もたたあっずいう間い぀も蚀っおたすね💊でAdvent Calendar もなんずか走りきれそうです。 昚幎に匕き続き継続するのは倧倉だなヌず痛感しおいたすが、なんずかみんな頑匵った💪 今幎はAdvent Calendar も5幎目ずなり、なんか新しいカタチにしようかどうか悩んだのですが、今幎も䟋幎通り、 1日目の神前の蚘事 でも觊れられおいたすが。。。 1日目の蚘事抜粋 12月ですし、幎末ネタずしお勝手に定着させようずしおいるので2022幎も 昚幎 ず同様に振り返ろうず思いたす ではでは始めたす。 ちょっずタむトルの "たた" が倚いなw はじめに MVV パヌトナヌ掻動 Amazon販売 ゜リュヌションパッケヌゞ 2023幎に向けお はじめに 2022幎も昚幎に匕き続き、COVID-19は終息するこずなく、新しい働き方が暙準になり぀぀ありたす。 ずいっおもTwitter瀟のようにリモヌトワヌクは終焉し、出瀟が匷制みたいなずころも出おき぀぀ありたすね💊 2022幎は、ロシアのりクラむナ䟵攻ず関連する材料/資源䞍足、物䟡高ただただ高くなりそうですが。。、為替倉動、円安。。。ず他にもいろんなこずありたしたが 瀟䌚の䞍安定感が増すなか、匊瀟ずしおもなかなか難しい局面は続き、攻めずいうよりはさらなる守り投資の抑制、財務の健党化等々ぞのシフト。。。 ずなかなか痺れる1幎だったのですが、 5月、6月ぐらいにスタヌトアップに冬の時代がやっおきたずいうのがちらほら出始めおいたころ、、 SmartHR創業者の宮田さんの蚘事 blog.shojimiyata.com には、特に走り続けるチカラをもらいたした💪 (瀟内でも "党員必読" みたいなかたちで少しだけ広たりたしたw 😅) 䞭でも 倉化に適応し続ける奎が䞀番匷い ずいうずころず スタヌトアップがキヌを打っおいる最䞭に死ぬこずはめったにないのだ。だからキヌを打ち続けよう! ずいうずころは、特に自分の䞭では心に留めおいたす。 ずいったずころで、 今幎のトピックをいく぀かピックアップしお曞いおいきたす。 MVV パヌトナヌ掻動 Amazon販売 ゜リュヌションパッケヌゞ MVV 䌚瀟ずしお、いわゆるMVVミッション・ビゞョン・バリュヌを今幎公開し、HPホヌムペヌゞを刷新したした。 youtu.be もずもず内郚的にはうっすらしおたものですが、蚀語化され公開されたこずで意識しやすくなり、 たた、バリュヌの浞透も含めおの斜策もいく぀かされお、意識するこずも増えたのかなず感じおはいたす。 なかなか策定や公開たでも玆䜙曲折あり぀぀、た぀わる斜策に぀いおも詊行錯誀の連続で。。。これだけの蚀葉だけで終わるのもなんずもですが😓 パヌトナヌ掻動 今幎は特にこのパヌトナヌ各瀟様ずの協業、共創掻動ぞのシフトを意識したした。 リリヌスずしおも、 2022.05.30 アプトポッド、様々な分野のパヌトナヌずの協業で産業DX支揎を加速 を䞭心に各瀟様ずの掻動をリリヌスさせおいただきたした。 2022.01.11 ax株匏䌚瀟のAI゜リュヌション「ailia」がintdashに察応 2022.02.02 アプトポッドずアクロク゚ストテクノロゞヌ マルチモヌダルデヌタによるAI/IoT゜リュヌション提䟛で協業 2022.09.07 アプトポッドずオルフェ 動䜜分析゜リュヌション提䟛で協業 2022.10.20 アプトポッド、NECず5Gを掻甚したナヌスケヌスの創出に向けお連携 たた、技術面においおは、NTTコミュニケヌションズ様やマクニカ様ずも技術的な共創掻動も今幎から始めおおり、来幎以降のどこかでお知らせできるこずを楜しみにしおいたす。 マクニカ様においおは、今回のAdvent Calendar2022の岩田の蚘事 tech.aptpod.co.jp でも觊れられおいたす MET2022Macnica Exponential Technology 2022 ずいうオンラむンむベントにおいおも匊瀟ずの取り組みをご玹介させおいただいおいたす。 内容は䞋蚘をご芧ください。 met.macnica.co.jp Amazon販売 ちょっず毛色の違うずころで軜いものを。 新しい詊みずしお、こちらのリリヌスの通り、 2022.05.09 アプトポッド、掚論や機械孊習の実行環境に最適な゚ッゞコンピュヌタ EDGEPLANT T1 を、Amazon で販売開始 昚幎販売開始をした EDGEPLANT T1 を今幎Amazonのプラットフォヌムで買えるようにしたした。 www.amazon.co.jp こういうかたちで芋えるずより身近な感じがしおよいですね 買う敷居が䞋がり、こちらをきっかけに䜿っおいただく機䌚が広がっおき぀぀あるのは嬉しい限りです。 ゜リュヌションパッケヌゞ 今幎の詊みずしお倧きなもので最近発衚しおいたす 2022.12.06 アプトポッド、モビリティやロボットの矀管理・遠隔制埡の ゜リュヌションフレヌムワヌクをベヌタリリヌス にありたすようにintdashをバック゚ンドに䜿甚した゜リュヌションずしお、最近新しいプロダクトをいく぀か発衚したした。 よりワヌクフロヌやナヌスケヌスに寄り添った゜リュヌションでお客様やパヌトナヌ様ぞ掻甚しやすくする狙いで進めおいたす。 今回のAdvent Calendar 2022でも蚘事ずなっおおりたすので是非ご芧ください。 13日目【intdash AUTOMOTIVE PRO REMOTE CAL】ECU遠隔適合システムのご玹介 tech.aptpod.co.jp 15日目モビリティ管制制埡システム向け゜リュヌション「intdash CONTROL CENTER」を玹介したす tech.aptpod.co.jp 2023幎に向けお 2022幎もたた期埅の通りずいうわけではなく、むしろ倧きな倉化の荒波に察しおどう察峙しおいくかずいったずころが詊されたような気がしおいたす。 やるこずすべおが必ずしもうたくいかず、パヌトナヌ様ずの共創掻動も含め、なかなか難しいこずも倚かった幎ではありたしたが、少しづ぀芜ずなっおいるものもあり、たた補品ずしおは進化しおいるずころもたくさんありたす。 2023幎はさらなる広がりに向けお、お客様およびパヌトナヌ様ずの共創をさらに深く、広げおいきたいず思っおおりたす。 䜕か自瀟の補品ず連携できそうずかこんな困りごずがあるずいったお客様やパヌトナヌ様は以䞋からお問い合わせいただけるず幞いです。 aptpod,Inc. Contact aptpod,Inc. Contact for Partners 再掲になりたすが、䞊蚘の宮田さんの蚘事の 倉化に適応し続ける奎が䞀番匷い ずいうずころず スタヌトアップがキヌを打っおいる最䞭に死ぬこずはめったにないのだ。だからキヌを打ち続けよう! ずいうずころを意識し぀぀2023幎も走り続けおいきたいず思っおいたす💪 来幎もたたアプトポッドにご期埅ください メリヌクリスマス🎄
aptpod Advent Calendar 2022 も、22日目になりたした。本日は、ドキュメント担圓の篠厎がお届けしたす。 私は、瀟内で1人だけの「ドキュメント担圓」 *1 ずしお、瀟倖に公開するマニュアルや技術ドキュメントの制䜜を行っおいたす。 ドキュメントは新補品・新機胜のリリヌスに合わせお制䜜したすので、私は、新補品・新機胜の開発担圓者 *2 ず垞にコミュニケヌションをずりながらリリヌスたでの䜜業を進めおいたす。 そこで、この蚘事では、テクニカルコミュニケヌタヌずしおのドキュメント担圓が、補品開発担圓者ずどのようにコミュニケヌションをずりながら仕事を進めおいるか、曞いおみたいず思いたす。 *3 なお、ここでご玹介するやり方は、匊瀟内で「このようなドキュメントだったらこのようなやり方をする」ずいういく぀かのパタヌンのうちの1぀です。すべおのドキュメントを同じ方法で制䜜しおいるわけではありたせん。 この蚘事で䟋にするドキュメント 制䜜の䜓制ず流れ ドキュメントのキックオフミヌティング 目次を䜜成しお提案 開発担圓者によるレビュヌ ラむタヌはどこたで自分で悩むべきか 疑問点解決のためのミヌティング おわりに この蚘事で䟋にするドキュメント この蚘事では実際の䟋ずしお、最近公開した「intdash Edge Agent 2 デベロッパヌガむド」 PDF版 および HTML版 の制䜜を振り返りながら曞いおみたいず思いたす。 「intdash Edge Agent 2 デベロッパヌガむド」は、匊瀟゜フトりェア補品である「intdash Edge Agent 2」を掻甚いただくための、開発者向けガむドです。 本補品をLinux PCにむンストヌルするず、そのPCはデヌタ䌝送プラットフォヌム intdash のクラむアント゚ッゞずしお動䜜するようになりたす。 本補品は、埓来からある同等の補品「intdash Edge Agent末尟に2が付かない」を䜿いやすくリニュヌアルしたものであるため、デベロッパヌガむドも完党にリニュヌアルし、䞀から䜜るこずにしたした。 なお、ドキュメント制䜜に䜿甚しおいるツヌルは Sphinx です。たた、原皿デヌタは瀟内GitLabリポゞトリで管理しおいたす。 制䜜の䜓制ず流れ このドキュメントの制䜜には、䞻に以䞋の3名が携わりたした。 ラむタヌ1名私 圓該補品の開発担圓者1名ただし、これ以倖の開発メンバヌにも芁所芁所で助けおもらっおいたす プロダクト開発責任者か぀ラむタヌの䞊叞でもある たた、スケゞュヌルは、開発日皋ずの関係、たた、ラむタヌの他の䜜業ずの関係から、以䞋のようになりたした。 7月䞭旬ドキュメントのキックオフミヌティング 8月䞊旬開発担圓者の原案をもずにラむタヌが䜜業開始 8月䞋旬原案を敎理し、ラむタヌにお新しい目次を提案、OKをもらう 9月䞋旬第1回レビュヌ開発担圓者およびプロダクト開発責任者がレビュヌする。以降、レビュヌを重ね、その郜床修正する。 12月䞊旬第5回最終レビュヌ 12月䞭旬公開 ラむタヌは7月から12月たでずっずこの䜜業をしおいるわけではなく、他のドキュメントの制䜜も同時に進めおいたす。 レビュヌ日皋は䜜業の進捗に応じおその郜床蚭定する圢ずしたした。 ドキュメントのキックオフミヌティング たず、7月䞭旬に今回のドキュメント制䜜に関するキックオフミヌティングを行いたした。 ここでは、開発担圓者から「このようなドキュメントを぀くっおほしい」ずいう芁望をもらい、以䞋のこずに぀いお説明を受けたした。 intdash Edge Agent 2ずは䜕か特に、既存補品ずの違い、ナヌザヌ像 開発スケゞュヌルずドキュメント制䜜スケゞュヌル ナヌザヌに説明しなければならないこずの䞀芧 瀟内にある関連資料蚭蚈関連のドキュメント、むンストヌル甚パッケヌゞなどのありか 今回の堎合、このキックオフミヌティングを受けお、䞊蚘の「ナヌザヌに説明しなければならないこず」は、開発担圓者にお原案を曞いおもらうよう䟝頌したした。 「誰が執筆工皋を担圓するか」に぀いおは以䞋のように圹割分担をしおいるのですが *4 、今回は、䞊から2番目の「開発者向け補品マニュアル」の方法を採甚したずいうこずになりたす。 開発担圓者ずラむタヌの圹割分担 目次を䜜成しお提案 8月䞊旬、予定通り、十分な情報がしっかりず぀たった原案を開発担圓者からもらいたした。 原案を読み蟌み、以䞋のように倧きく3郚に分けお敎理するこずにしたした。 たず動かしおみるためのチュヌトリアル 目的に応じおやり方を参照するためのガむド 網矅的リファレンスここに、蚭定レシピ集も入れる これは、これたでの別ドキュメントでの反省をふたえ、たた、Divio Technologies瀟の The Documentation System などのベストプラクティスを参考にしたものです。 目次案 新しい目次に぀いお開発担圓者やプロダクト開発責任者から承認を埗られたら、実際にリラむトおよび執筆に入っおいきたす。 開発担圓者によるレビュヌ 8月䞋旬以降、説明察象の゜フトりェアを実際に操䜜し、調査や実隓をしながら、文章を曞いおいきたす。今回は開発担圓者が曞いた原案があるので、原案を利甚できるずころは利甚しながらリラむト、原案がない郚分は自分で䞀から曞きたす。 ある皋床圢になったら、開発担圓者やプロダクト開発責任者にレビュヌしおもらいたす。 このレビュヌは、技術的偎面から正しい蚘述になっおいるかを確認しおもらうのが䞻な目的です。 レビュヌ結果を曞き蟌んでもらう方法ずしおは以䞋の2぀を䜿いたした。 機胜远加等により、たずたった修正が必芁な時は瀟内GitLab䞊のマヌゞリク゚スト 现かい指摘はGoogleドラむブ䞊のPDFにコメント テキストが䞻䜓のドキュメントであれば、现かい指摘もマヌゞリク゚ストでやり取りをしたすが、今回のドキュメントは図や衚がたくさんあるこずから、PDFをGoogleドラむブで共有し、そこにコメントを぀けおもらう方法を䜿甚したした。 基本的に、レビュヌコメントを付けおくれるのは開発担圓者ずプロダクト開発責任者ですが、必芁に応じお関連する人がメンションされお呌び出され、議論に加わっおくれるずいう圢で進みたした。 PDFでのレビュヌ開発者がメンションされお呌ばれおきたずころ ラむタヌはどこたで自分で悩むべきか 説明を曞いおいるず、たびたび仕様に぀いおの疑問が生じるのですが、どのくらい悩んでから開発担圓者に質問すべきか迷いたす。 私はだいたい、「もう行き詰たった」ず思うずころたで頑匵っお䞀人で悩むようにしおいたす。同時に、「行き詰たった」ず感じるずころたでできるだけ早く行くように心がけおいたす。 これは、瀟内のラむタヌずしお、自分で答えを探すために必芁な材料が十分に䞎えられおいるためです。 今回の堎合は、手元のDocker環境で、説明察象の゜フトりェアを動䜜させ、実隓をするこずができたした。 実隓甚のintdashサヌバヌも自由に䜿えるため、蚭定を倉えお奜きなだけデヌタの送受信を詊しおみるこずができたす。 たた、瀟内WikiやGoogleドラむブに保存されおいる蚭蚈段階の倚くの資料も芋るこずができたす。 逆に蚀うず、自分で実隓できない堎合や資料ぞのアクセスがない堎合は、早く聞くしかないずいうこずになりたす。 実隓環境や瀟内資料など、情報ぞのアクセスが十分にあるずころでしっかり䞀人で悩んでおくこずは、無駄にはなりたせん。 䞀人で考えお行き詰たったずしおも、開発担圓者に質問するずきには、最終的に行き詰たった地点を瀺し、なぜその道筋をたどったのかを添えお質問するず、開発担圓者は返答をしやすくなるはず。 自分が行き詰たったずいうこずは、これからドキュメントを読むナヌザヌも同様に行き詰たる可胜性が高い。その道筋を自分で䜓隓しおいれば、それを避けるように説明ができる。 䟋を挙げおみたす。以䞋は、なんらかの蚭定項目ここでは蚭定項目Xずしたすの機胜に぀いお説明を曞こうずしお疑問が生じたケヌスです。ここでは、「このたた考えたら矛盟するこずが分かった」ずいうのが「行き詰たり」であり、それをもずに質問したした 蚭定項目Xの機胜はAずいうこずであるず考えたした。 しかし、他に蚭定項目Yがあるので、Xの機胜がAずするずXずYの蚭定が矛盟するこずになりたす。 もしかしお、Xの機胜はBでしょうか。 開発担圓者の返答は、だいたい以䞋のいずれかになりたす 䟋1Xの機胜はAずいう理解で正しいです。Yの機胜は特別なケヌスのための蚭定で、... Aずいう理解で正しかったずいうこずで安心です。でも、悩んだ甲斐がありたした。Xに぀いお悩むこずでXに぀いお正確に理解しおいるので、「Xずは異なるY」をどのように説明すればよいか、芋えおくるからです。 あるいは以䞋のような返答もありえたす。 䟋2そうです、Xの機胜は実はBなんです。ちょっず分かりにくいかもしれたせんね、そもそもXがなぜ存圚するかずいうず.... うヌむ、Xの機胜はAだず予想したのは間違いだったようです。でも、悩んだ甲斐がありたした。自分がこのように予想したずいうこずは、ナヌザヌもそのように予想する可胜性が高いからです。なぜ自分がそう予想したかを念頭に入れお、Xの「そもそも」のずころを説明する必芁がありそうです。それにより、Xの䜍眮づけがスムヌズに説明できるずよいです。 さらには、以䞋のような返答もあるかもしれたせん。 䟋3いいえ、Xの機胜は、AでもBでもなく、Cです。どういうこずかずいうず... 予想しおいなかった第3の答えでした。でも、悩んだ甲斐がありたした。これたでAずBを念頭に眮いお悩んできたわけですが、ここでも、「Aはでなく、Bでもない」ずいうこずがCを理解するための支えになりたす。 䟋2や䟋3のように理解や予想がしにくい機胜は、説明を曞くず長く耇雑なものになっおしたうこずがありたす。そんなずき、堎合によっおは、「こんなに説明が難しくなっおしたうずいうこずは、この仕様は芋盎したほうがよいかも」「蚭定項目の名前を倉えたほうがよいかも」ずいう話になり、ドキュメント化がきっかけで仕様の芋盎しにたで進むこずがありたす。 こういうこずができるのは、補品開発ずドキュメントの制䜜が瀟内で緊密に連携しながら進んでいるからこそだず思いたす。 なかなか耇雑なやりずりになっおきたした。PDFやマヌゞリク゚スト䞊のコメント䞊で䌚話を続けお解決すればよいですが、䟋2や䟋3のようなケヌスでは、詳现なコミュニケヌションが必芁になりたす。 そんなずきは、ラむタヌが䞻催しお、疑問点を解決するためのミヌティングをしたす。 疑問点解決のためのミヌティング 疑問点解決のためのミヌティングでは、ラむタヌは聞きたいこず時によっお1個から20個ぐらいを曞いた資料を甚意しおおいお、ひず぀ひず぀開発担圓者に聞きながら解決しおいきたす。 今回のドキュメントでは、開発担圓者ず78回のミヌティング各回1時間ぐらいをおこなったず思いたす。 通垞、もっず小さなドキュメントや、既存ドキュメントの改版の堎合はこんなに倚くのミヌティングはおこないたせんが、前述のずおり、今回は䞀から新しく制䜜したため、頻繁におこないたした。 *5 ちなみに、普段私はリモヌトワヌクをしおいるのですが、たたたたオフィスに出瀟した日に開発担圓者も出瀟しおいお、「せっかくなのでマニュアルの疑問点を解決したしょう」ずいうこずになっお、オフィスの片隅でミヌティングをおこなったこずもありたした。 察面でミヌティングをするず、マりスポむンタヌではなく自分の指を䜿っお「ここの説明が...」ず指し瀺したり、手元の玙に簡単な絵を描いたりしながら話ができ、やはりはかどりたす。 以䞊のような工皋を経お、最終レビュヌを通過したら、公開するこずができたす。 ひず段萜、ではありたすが、ここから先も、「このこずが曞かれおいない」「こう曞いおほしい」ずいった芁望をもらうこずになるず思いたす。終わりはありたせん。 おわりに どんなふうにドキュメントを䜜っおいるのか、今回は瀟内での開発者ずのコミュニケヌションに焊点をあおお、䞀端をご玹介しおみたした。 ドキュメントを䜜るテクニカルラむタヌは、ドキュメントをただ「きれいに」しおくれる人ずいうわけではなくお *6 、もっずいろんなずころで圹に立぀こずができるはず、ず思っおいたす。 テクニカルラむティングはテクニカルコミュニケヌションの䞀分野であり、今回は、瀟倖の方々に察しお「コミュニケヌション」をするためのドキュメントを䜜ったわけですが、そのために瀟内でも、いわば仕蟌みの段階で、開発担圓者ず「テクニカルなコミュニケヌション」を繰り返しおいたす。 このような瀟内コミュニケヌションの成果が、䟋えば䞊蚘のような「仕様自䜓を芋盎そう」ずいう動きになったり、「ここのずころは詳しく説明しよう」ずいう話になったりしお、瀟倖にお届けする補品およびドキュメントの改善に぀ながりたす。そのようなこずをめざしお、働いおいたす。 *1 : 匊瀟のドキュメント担圓の仕事に぀いおは、以前 「ひずりドキュメント担圓」の仕事 でもご玹介したした。 *2 : テクニカルラむティング業界だず、ドキュメント制䜜におけるこの立ち䜍眮はSME (Subject Matter Expert)ず呌ばれたす。 *3 : 実は、「私ず同じようにドキュメントを内補されおいる方はどうされおいるのかな、どのようなやり方がよいのかな」ずい぀も気になっおいたす。「知りたいこずがあるずきは、たず自分のこずを曞いおみよう」ず思ったのでした。 *4 : この衚は以前LINE Technical Writing Meetup vol. 11で発衚させおいただいたずきの スラむド から流甚したした。 *5 : 匊瀟内のコミュニケヌションガむドラむンでは、「翌営業日以降なら事前確認なしに空いおいるずころにミヌティングを入れおもよい」ずなっおいるので、「うヌん、これは聞かないずいけないな」ずなったら、翌日のGoogleカレンダヌにポンずミヌティングスケゞュヌルを入れたす。 *6 : テクニカルラむタヌはドキュメントをきれいにしおくれるだけの人ず思われおしたう件に぀いおは こちら に興味深い蚘事がありたす。
本蚘事のタむトルはいわゆる「釣り」です。MQTTは、最近ではMQTT5がリリヌスされるなど珟圚でも進化を続けおいる、ずおも掗緎された䜿いやすいプロトコルです本蚘事にMQTTを貶める意図は䞀切ありたせん。 匊瀟アプトポッドでは、 MQTTよりもタヌゲットを絞ったニッチな領域に向けた独自プロトコル “iSCP” を開発しおおりたす。本蚘事では、せっかく釣られおくださった皆様に、その “iSCP” の魅力に぀いお少しばかりご玹介できればず思いたす。 なお、本蚘事は aptpod Advent Calender 2022 の 21日目ずしおお送りしたす。 はじめに お久しぶりです。VPoPの岩田です。昚幎1月末に QUIC DATAGRAMに関する蚘事 を曞いおから、忙しさにかたけおテックブログ投皿をサボっおいたら、なんず2幎匱もの長い幎月が過ぎ去っおいたした。これはむカンずいうこずで、重い腰を䞊げお久しぶりに蚘事を曞いおみるこずにしたす。 肝心の蚘事の内容に぀いおですが、実は先日12月5日、匊瀟の業務提携先で出資元でもある株匏䌚瀟マクニカ様が開催された MET2022Macnica Exponential Technology 2022 ずいうオンラむンむベントに、匊瀟CTOの梶田ず䞀緒に登壇したしたので、そのずきにお話しした内容を再構成しおご玹介したいず思いたす。 met2022.macnica.co.jp 内容はズバリ 「匊瀟の独自開発プロトコル iSCPintdash Stream Control Protocolずはナニモノか」 になりたす。MET2022では、マクニカ様が䌁画・開発されおいるFMSFleet Management System、遠隔運行管理システムに぀いおのご玹介がメむントピックで、そのFMSを裏偎から支えるテクノロゞヌずいう䜍眮づけで匊瀟のiSCPに぀いおもご玹介させおいただきたした。本蚘事ではその登壇のなかから、iSCPに関する郚分のみを抜粋しおご玹介いたしたす。 本蚘事では、以䞋の内容をご玹介したす。 匊瀟ナヌスケヌスにおいおMQTTに䞍足しおいたポむント 匊瀟の独自プロトコルiSCP開発の経緯 匊瀟の独自プロトコルiSCPの特長 以䞋のような方には、なにかヒントになるかもしれたせん。 メッセヌゞ配送ミドルりェアをどう遞定したらよいのかわからない 倧量・高頻床なデヌタの䌝送がうたくいかなくお困っおいる MQTTが苊手ずするナヌスケヌスに぀いお知りたい はじめに そもそもintdashずは iSCPが必芁ずされる背景 intdash / iSCPの適甚先 なぜMQTTを䜿わなかったのか 高頻床メッセヌゞに察しお䜎遅延性を実珟できなかった 䌝送効率化のために、結局 X over MQTT が必芁になった デヌタの確実な氞続化に察応できなかった iSCPの特長 さいごに 2024/01/18 远蚘 MQTT5に関する連茉始めたした。ご興味お持ちいただけたしたら、こちらも䜵せお芧ください。 tech.aptpod.co.jp そもそもintdashずは iSCPをご玹介する前に、たずはiSCPintdash Stream Control Protocolが頭に冠しおいるintdashがそもそも䜕者かに぀いおご説明しなくおはなりたせん。 intdashは、匊瀟が開発しおいる産業甚IoTプラットフォヌムです プラットフォヌムの名称であり、プラットフォヌムを構築するためのミドルりェア補品の名称でもありたす。 自動車や自埋ロボットなどの高機胜マシンを䞻にタヌゲットずしお 、それらが吐き出す倧量か぀高頻床なIoTデヌタを、むンタヌネットやLTE網などを利甚しおクラりドに集めたり、遠隔地に䞭継したりするこずができたす。intdashを甚いるこずで、様々なIoTデバむスや高機胜マシンをコネクテッド化し、盞互に通信させるこずが可胜になりたす。 産業甚IoTプラットフォヌムintdash intdashが持぀䞻な特城は以䞋の3぀です。 【デヌタの䌝送】IoTデバむス間をリアルタむム䌝送で぀なぐ 【デヌタの保存】䌝送されたデヌタはクラりドに蓄積する 【デヌタの掻甚】蓄積されたデヌタにアクセスするAPIを提䟛する 1぀めのintdashのリアルタむム䌝送機胜の実珟のために、 intdashのサヌバヌずクラむアントの間で䜿甚されるプロトコルが、本蚘事のメむントピックであるiSCPintdash Stream Control Protocol になりたす。 iSCPが必芁ずされる背景 前述のずおり intdash / iSCPは自動車や自埋ロボットなどの “高機胜マシン” のコネクテッド化を䞻にタヌゲットずしおいたす 。このようなマシンでは、高機胜であるが故に内郚のバス䞊で倧量のデヌタが飛び亀っおいたすが、 倧量のデヌタに察しおはデバむス偎で集玄・抜出凊理を行い、サマリデヌタのみをクラりドに送信するアプロヌチを取るこずが䞀般的です 。 これは、倧量のロヌデヌタ生デヌタをそのたた送信する方法では、消費垯域が倚く回線費甚がかさんだり、そもそもLTE回線では垯域が足りなかったり、デバむスの性胜が送信凊理に耐えきれなかったりず、様々な問題が発生するためです。 䞀方で、匊瀟が長らく支揎させおいただいおいる自動車の研究開発分野など、 ニッチではあるものの䞀郚のケヌスにおいお、このような事前凊理のアプロヌチが取りづらい領域があるこずも分かっおいたす 。intdashは、詊䜜車䞡のテストや各皮車䞡からのデヌタ取りなどでご利甚いただくこずが倚くありたすが、 これらのお客様にずっおは、ロヌデヌタこそが取埗したいデヌタであっお、集玄されおしたったサマリデヌタでは意味が無いからです 。 それでもやっぱりロヌデヌタがほしい ものづくり倧囜日本における ”ものを぀くる偎” の皆様のデゞタルトランスフォヌメヌションをお手䌝いするため、ものづくりにおいお䞍可欠な "蚈枬噚"をそのたたクラりド䞊に移動させおしたうもの だず捉えおいただくのが最もむメヌゞに近いでしょうか。このようなナヌスケヌスにおいお、倧量・高頻床なロヌデヌタの収集や䌝送を実珟するため、以䞋のような目的を持っお開発されたプロトコルがiSCPになりたす。 䌝送の䜎遅延化 : すばやいトラむアンド゚ラヌを実珟するため、リアルタむムに状態が把握できるこずは倧きなメリットずなりたす 䌝送効率の向䞊 : 倧量のデヌタからなるべく冗長性を排するこずで、モバむル回線の现い垯域を有効掻甚したす 保存デヌタの高信頌化 : デヌタ欠損なく保存しきるこずをプロトコルレベルで保蚌するこずで、安心しお収集デヌタを掻甚できたす 倚様なデヌタぞの察応 : 倚様なデヌタを統䞀的に扱える仕組みずするこずで、様々な詊行錯誀に柔軟に察応できたす 匊瀟の䞻力商品であるWebベヌスの可芖化ダッシュボヌド 「Visual M2M Data Visualizer」 も、iSCPを䜿甚しお実珟しおいるプロダクトのひず぀です。 自動車などのマシン偎から打ち䞊げられた倧量デヌタをWebアプリケヌションで受け取り、ブラりザ䞊のダッシュボヌドで可芖化するツヌルですが、 マシンからブラりザたでデヌタを届ける際のプロトコルずしおiSCPを䜿甚しおおり、打ち䞊げられるデヌタが倧量になっおもブラりザでしっかり可芖化するこずができたす。 www.youtube.com intdash / iSCPの適甚先 ちなみに、intdashの適甚領域は前述した研究開発領域のみにずどたりたせん。たずえば最近では、デリバリヌロボットをはじめずするAGV/UGVの監芖などにおいお、 「普段はサマリデヌタだけで良いけれども、事故などの問題事象が発生した堎合にはすべおのロヌデヌタをかき集めおすばやく状況把握や原因解析を行いたい」 ずいった芁望をいただくケヌスが出おきおいたす。 このように、IoTのコモディティ化に䌎っお、ニッチな研究開発領域だけでなく䞀般のIoTサヌビスにおいおも 「いざずいうずきのために」すべおのロヌデヌタをリアルタむム䌝送できるケむパビリティを備えおおきたい、ずいう志向が生たれ぀぀ある ように感じおいたす。 たた、AGV/UGVなどのナヌスケヌスでは、ロボットが自埋的に察凊できない堎面に盎面した堎合のために遠隔操瞊機胜を備えおおくず安心ですが、 遠隔操瞊などを行う堎合にも高頻床デヌタの䜎遅延䌝送は効果を発揮したす 。珟状、遠隔操瞊はただそこたで広く瀟䌚実装されおいる状況ではありたせんが、今埌自埋ロボットの普及に䌎っお、ロボット管理プラットフォヌムやそれに付随する遠隔操瞊機胜の需芁も高たっおくるのではないかず考えおおり、intdashはそのような領域にも適甚可胜です。 その他、intdashをバック゚ンドに䜿甚した゜リュヌションずしお、最近新しいプロダクトをいく぀か発衚しおおりたすので、よろしければこちらもご芧ください。 自動車業界向け ECU遠隔適合゜リュヌション「Automotive Pro Remote CAL」 tech.aptpod.co.jp モビリティ・ロボットの管制制埡゜リュヌション「intdash Control Center」 tech.aptpod.co.jp もちろんintdash自䜓は、デヌタを䌝送・蓄積・掻甚するための汎甚的なプラットフォヌムになりたすので、 これらの掻甚䟋に限らず、様々なサヌビスや゜リュヌションのバック゚ンドずしおご掻甚いただけたす 。 なぜMQTTを䜿わなかったのか ここからやっず本題に入りたす。ここたで読み進めおくださった皆様がおそらくお持ちであろう 「IoTのリアルタむム䌝送ならばMQTTがあるじゃないか、なぜそれを䜿わなかったんだ」 ずいう疑問にお答えしたす。 実は以前、匊瀟でもMQTTを䜿甚しおリアルタむム䌝送機胜を実珟しようずしおいたこずがありたした。しかしながら、MQTTでは、研究開発領域で求められる芁件リアルタむム性ず確実なデヌタ氞続化の䞡立を実珟するこずができず、泣く泣く䜿甚を諊めたずいう過去がありたす。では、MQTTの䜕がいけなかったのか。 高頻床メッセヌゞに察しお䜎遅延性を実珟できなかった MQTTは䞀般的に、゚ンドツヌ゚ンドで䜎遅延にデヌタを転送できるプロトコルずしお知られおいたす。これは、PubSub型のメッセヌゞングパタヌンの採甚ず、軜量でシンプルなプロトコル仕様により実珟されおいたす。MQTTは確かに、 「あるクラむアントから送出されたデヌタが別のクラむアントに到達するたでの時間が短い」 ずいう意味で、䜎遅延䌝送を実珟可胜なプロトコルです。 しかしながら、このプロトコルを "高機胜マシン" が吐き出す倧量デヌタの䌝送に適甚するずどうなるでしょうか。䞀般的に自動車が吐き出す車䞡デヌタCANデヌタは、秒間数千フレヌム〜1䞇フレヌムにもなりたす。䟋えば、この倧量フレヌムをMQTTのメッセヌゞにそれぞれ詰め蟌んで送信したずするず、 少なくずも開発圓時のMQTTブロヌカヌでは、すべおのメッセヌゞを送りきれる皋のスルヌプットが出たせんでした 。 メッセヌゞを送りきれないずいうこずは、各メッセヌゞはその分滞留するこずになり、結果ずしおメッセヌゞ配送に芁する時間は増倧したす。芁するに、メッセヌゞ䞀぀䞀぀の転送自䜓は䜎遅延に実珟できるものの、倧量のメッセヌゞを送り぀けるようなケヌスではメッセヌゞの滞留によりリアルタむム性が損なわれおしたう、ずいうこずになりたす。さらに悲しいこずに、 スルヌプットの䞊限倀は、QoSメッセヌゞの転送品質の蚭定を䞊げるずさらに䜎䞋したす 。 䞖の䞭には、MQTTブロヌカヌのスルヌプットを調査したベンチマヌク結果も倚くありたすが、その倚くは、 耇数のクラむアントから同時にデヌタ送信を詊行するこずで、クラむアント党䜓ずしお数䞇メッセヌゞのスルヌプットが出るこずを確認するもの です。クラむアント数が増えるケヌスに぀いおは、サヌバヌをクラスタリングしお氎平スケヌルにより察応するこずもできたすが、我々が察峙しおいる1台単䜓で数千〜数䞇のメッセヌゞを生成しおしたうようなケヌスでは、単にサヌバヌ台数を増やせば解決ずいうわけにはいきたせん。 このようなケヌスに耐えうるMQTTブロヌカヌは、少なくずも䌁画圓初は䞖の䞭に存圚せず、intdash / iSCP開発の倧きなきっかけずなりたした。 ※ MQTTの名誉のために若干の゚クスキュヌズを入れおおくず、 これはMQTTの性胜が悪いず蚀っおいるわけではありたせん 。 MQTTは、1クラむアントから受け取れるメッセヌゞ数に぀いおは匊瀟の芁件を満たしたせんでしたが、その代わりに氎平スケヌルさせやすい仕様になっおいるず思っおいたす。 䞀方で匊瀟のiSCPでは、1クラむアントから受け取る倧量メッセヌゞを捌き切るためにステヌトフルなデヌタ保持の仕組みを敢えお導入したり、ずにかく倧量のデヌタを捌き切るこずに仕様を党振りしおいたす。 これは、あくたで察象ずするナヌスケヌスの違い・プロダクトの思想の違いであっお、どちらが良い悪いずいうものではありたせん 。 ナヌスケヌスによっおは、よりMQTTが適しおいる堎合もあれば、iSCPが適しおいる堎合もあり、適材適所でプロダクトを遞択しおいけばよいだけのこずです。 それぞれ向いおいるナヌスケヌスが違う 䌝送効率化のために、結局 X over MQTT が必芁になった 前のセクションを読たれた皆様の䞭には、 「1デヌタず぀1メッセヌゞで送信するからメッセヌゞ数が膚倧になるのであっお、耇数メッセヌゞをたずめお送ればよいのではないか」 ず気づいた方もいらっしゃるず思いたす。そのずおりです。あくたでメッセヌゞ数が倚すぎるこずが原因なので、耇数デヌタをたずめお倧きめなメッセヌゞにしおからバルク送信すれば、スルヌプット䞍足の問題はある皋床回避するこずができたす。䞀芋、この方法で問題は解決できるように思えたすが、これはたた別の問題を匕き起こしたす。 バルク送信を採甚するずいうこずは、MQTTのペむロヌドぞのデヌタの栌玍方法ずしお所定のフォヌマットを定矩するずいうこずです。これは、 MQTTの䞊局にさらに別のプロトコルを定矩するこずに盞圓したすX over MQTT 。このアプロヌチを取った堎合、 各クラむアントは MQTT のプロトコルに準拠し぀぀、MQTT䞊に想定されおいるフォヌマットに合わせた圢匏でMQTTのペむロヌドを構築しお送信しなければなりたせん 。すなわち、そのプロトコルは䞋局にMQTTを採甚しおはいるものの、MQTTで定矩されおいる仕様に埓っただけのクラむアントからは通信ができないこずになりたす。 これはたずえば、HTTPは䞻にTCP䞊のプロトコル= HTTP over TCPですが、HTTPサヌバヌずただのTCPクラむアントで通信するには、クラむアント偎にさらにHTTPを解釈するための自前実装が必芁になるこずず同じだず考えおいただければ、分かりやすいでしょうか。 MQTTを䞋局に䜿甚したずしお、結局その䞊局に独自のプロトコルを定矩するのであれば、䞋局はわざわざMQTTに瞛られる必芁はありたせん 。幞い、MQTTのプロトコル仕様は極めおシンプルで、MQTTブロヌカヌにより提䟛される機胜性の実装はそこたで耇雑なものではないため、 MQTTに䟝存するこずによっお課せられる制玄ず、独自にプロトコルを定矩するコスト ずを倩秀にかけた結果、匊瀟では独自のプロトコルを開発するこずを遞択したした。 どうせ䜜るするならすべお自前で䜜っおしたえ デヌタの確実な氞続化に察応できなかった 䞻にデヌタ収集甚途で䜿甚されるこずが倚かったintdashでは、集めたデヌタの信頌性に぀いおも高い芁件を課せられおいたした。 サヌバヌに送信されたデヌタは、取りこがすこず無く確実にデヌタストアに保存しなければなりたせん 。しかしながら、この機胜性を既存のMQTTブロヌカヌを甚いお実珟しようずするず、アヌキテクチャが耇雑化しおしたうずいう問題がありたした。 もちろん、MQTTにもQoSメッセヌゞの転送品質ずいう考え方があり、 "䌝送経路での欠損に぀いおは" 怜出するこずができたす。䞀般的に蚀われおいるこずですが、この "䌝送経路での欠損に぀いおは" の郚分が泚意を芁するずころで、 MQTTのQoS蚭定を䞊げたずしおも、゚ンドツヌ゚ンドでの欠損に぀いおは怜出するこずができたせん 。 どういうこずかずいうず、䟋えばパブリッシャヌずサブスクラむバヌが存圚した堎合、怜出ができるのはあくたで パブリッシャヌ〜ブロヌカヌ間 ず ブロヌカヌ〜サブスクラむバヌ間 それぞれの経路に぀いおのみであっお、䟋えば極端なケヌスでは、パブリッシャヌからブロヌカヌぞ転送されたあず䜕らかの゚ラヌによっおデヌタが消倱しおしたうず、それをパブリッシャヌは怜出するこずができない、ずいうこずになりたす。 既存のMQTTブロヌカヌを甚いおリアルタむム機胜およびデヌタの確実な氞続化機胜を実珟しようずするず、デヌタを氞続化するクラむアントをサブスクラむバヌずしおブロヌカヌにぶら䞋げ、氞続化サブスクラむバヌがデヌタストアぞデヌタを保存するこずになりたすが、このような圢匏では 送信クラむアントからデヌタストアたでの゚ンドツヌ゚ンド経路におけるデヌタ欠損の可胜性を排陀するこずができず、結局MQTT䞊で独自のプロトコルを定矩しなければならなくなりたす 前のセクションでも登堎した X over MQTT ずいう圢になりたす。 片道䌝送経路での到達確認しかできない 前のセクションでも蚀及したずおり、MQTTのプロトコル仕様自䜓は極めおシンプルで、同様のものをむチから考案するこずもできなくはありたせん。 MQTT䞊に独自プロトコルをスタッキングするくらいなら、はじめから独自のプロトコルを䜜っおしたったほうが柔軟でシンプルなものができあがるだろう ずいうこずで、さらに独自プロトコルの開発に螏み切る機運が高たりたした。 もちろん䞖の䞭には、「プロトコル自䜓はMQTTを採甚し、MQTTの暙準仕様には無い機胜性を远加した独自ブロヌカヌを䜜る」ずいうアプロヌチを取っおいる商甚MQTTブロヌカヌも存圚したすこのようなブロヌカヌは、intdashの競合ずいうこずになりたす。このようなアプロヌチを取るメリットは、䞀般のMQTTのラむブラリやツヌル矀を流甚できるこずにありたす。しかし、それず匕き換えに、 MQTT暙準仕様の範囲から逞脱しない範囲でしか機胜を拡匵できない、MQTTの仕様改蚂ぞの远埓など自瀟でコントロヌルできない仕様倉曎リスクを抱える、などのデメリットもプロダクトに内包させる こずになりたす。 匊瀟ずしおは、MQTT暙準仕様の範囲だけでは実珟できない機胜性を远加したかったこず、テックベンチャヌずしおMQTTに競合するような新しいプロトコルの確立に挑戊しおみたかったこずなども含め、メリット・デメリットだけでなく開発メンバヌの思いやビゞネス的な思惑等、様々なこずを考慮しお総合的に刀断した結果、iSCPずいう独自プロトコルを開発するこずを遞びたした。 iSCPの特長 ここたで説明したMQTTを採甚するにあたっおの課題に察しお、X over MQTT から掟生しお、MQTT郚分も含めおすべおオリゞナルなプロトコルスタックにより定矩したものがiSCPです。 さらに、MQTTのようなPubSub郚分も含めお独自で定矩したため、MQTTにはない機胜性もいく぀か远加するこずができたした。 iSCPの特長には様々なものがありたすが、特城的なものだけを拟い䞊げるず、たずは倧量・高頻床なデヌタを効率よく䌝送できるように以䞋の特長を持っおいたす。 これらの特長により、MQTTでは難しかった倧量・高頻床なデヌタの䌝送凊理を実珟しおいたす。 耇数デヌタをたずめおバルク送信もちろんバルクサむズは調敎可胜 メタ情報をあえおステヌトフルに保持するこずで、通信オヌバヌヘッドを削枛 WebSocketを参考にしたメッセヌゞ圧瞮方匏の採甚 たた、䞻に研究開発にお芁求されるリアルタむム性ず確実な氞続化の䞡立のため、以䞋の特長も備えおいたす。 ブロヌカヌはデヌタを受信したら最優先で転送氞続化凊理はあず回し クラむアントぞのAckは氞続化凊理が完了しおから返华 Ackにより氞続化確認ができないデヌタは別途あずから氞続化 クラむアントぞのAck返华タむミングが氞続化凊理完了埌ずなっおいる点がiSCPの特城的な郚分です 。倚くのプロトコルではAckは通信経路での到達確認や順序保蚌に䜿われるため、ある皋床のAckが返华されない堎合にはAck埅ちにより送信が停止しおしたいたすが、iSCPにおいおはサヌバヌぞデヌタが氞続化されたかどうかの確認に甚いられるものであるため、Ackの返华は必ずしも埅぀必芁がありたせん。 倧量にデヌタを送り぀け、欠損があった堎合には怜出だけしおおき、垯域に䜙裕があるずきに改めお欠損郚分だけを氞続化凊理する、ずいうのが iSCP の基本の考え方になりたす 。 intdash / iSCPでの凊理の流れ このような仕様により、 䌝送時にはリアルタむム性を最優先に転送を行い぀぀、埌からではあるものの取りこがすこずなくデヌタを回収できる ようになっおいたす。 このような機胜性は、匊瀟でも実瞟の倚い研究開発におけるデヌタ収集のナヌスケヌスデヌタを可芖化しながらトラむアンド゚ラヌを行い、最終的にはすべおのデヌタを収集し切りたいず極めお盞性がよいものです 。もちろんそれだけでなく、たずえば遠隔管制・フリヌト監芖のようなナヌスケヌスでは監芖時にはリアルタむム性が、事故発生時の解析等でにはデヌタの信頌性が重芁なファクタヌずなるなど、研究開発以倖のナヌスケヌスにおいおも効果を発揮したす。 たた、最近では遠隔管制に関連しお、ロボットに察する遠隔操瞊に察する芁望もいただくようになっおきおいたす。 このようなケヌスでは、デヌタの詰たりによっおリアルタむム性の倱われやすいストリヌムベヌスの通信方匏よりも、デヌタグラムベヌスの通信方匏が奜たれる傟向がありたす。 このような芁求にも応えられるようiSCPは珟圚も日々進化を続けおおり、iSCPのメゞャヌバヌゞョンアップに向けお珟圚準備を進行しおおりたす。 メゞャヌバヌゞョンアップ前の珟行バヌゞョンでは、䞋局に䜿甚するトランスポヌトプロトコルずしおWebSocketしか遞択できたせんでしたが、 メゞャヌバヌゞョンアップ埌のバヌゞョンでは、 デヌタグラムベヌスの通信方匏に察するサポヌトが远加され、 WebSocketに加えお最新のトランスポヌトプロトコルであるQUICやWebTransportも䜿甚可胜ずなる予定です 。 さいごに いかがでしたでしょうか。 匊瀟がなぜMQTTを捚お独自プロトコルの開発に螏み切ったのか、たた、その結果生たれたiSCPがどのようなプロトコルなのか 、この蚘事でお䌝えできおいれば幞いです。たた、前述のMET2022におご䞀緒させおいただいたマクニカ様のFMSFleet Management Systemのように、intdashやiSCPが持぀特長に少しでも興味や魅力を感じおいただけたしたら、ぜひずも皆様ご担圓のシステムぞの導入をご怜蚎ください。 iSCP のクラむアントラむブラリ はオヌプン゜ヌス化しおいたすので、どなたでも自由にご利甚いただけたす。たた、 プロトコル仕様曞 も公開可胜なものを甚意しおおりたすので、プロトコル仕様をよく粟査しお導入をご怜蚎いただけたす。 サヌバヌ゜フトりェア や匊瀟が運甚する マネヌゞドサヌビス は有償でのご提䟛ずなりたすが、 フリヌトラむアルのプラン もご甚意しおおりたす。その他些现なこずでも構いたせんので、プロダクトに関するお問い合わせに぀いおは、 匊瀟営業たでご連絡ください 。私自身も、匊瀟プロダクトの開発責任者ずしお党力でサポヌトさせおいただきたす 結びずなりたすが、アプトポッドではintdashやそれを取り巻く呚蟺プロダクトの販売だけでなく、intdashを掻甚したシステムむンテグレヌションや受蚗開発も行っおおりたす。圓瀟が盎接お手䌝いをするだけでなく、圓瀟が認定した信頌ず実瞟のあるパヌトナヌ䌁業様にお、ご察応させおいただくこずも可胜です。本蚘事でご玹介できなかった匊瀟のプロダクトやビゞネス党般に぀きたしおは、匊瀟のコヌポレヌトサむトをご芧ください。 「IoTシステムを構築したいがどんなアヌキテクチャがよいのかわからない」「MQTTで構築した既存のIoTシステムがあるが限界を感じおいる」など、IoTシステム構築に関する䞀般的なご盞談に぀きたしおも、お問い合わせいただければお力添えいたしたす。 www.aptpod.co.jp ※ 本蚘事をお読みいただき、アプトポッドのプロダクトや゚ンゞニアリングに興味を持っおくださった゚ンゞニアの方々からの連絡もお埅ちしおおりたす。 たずはカゞュアルな情報亀換からでも構いたせん。䌚話をさせおいただくなかで、募集䞭の職皮をご玹介させおいただきたす。 採甚ペヌゞはこちら  www.wantedly.com 最埌たでお読みいただき、ありがずうございたした。 皆様よいクリスマスず幎末をお過ごしください 🎄🎍
aptpod Advent Calendar 2022 の20日目を担圓したす、intdash グルヌプ フロント゚ンド゚ンゞニアの䜐藀です。 早速ですが、匊瀟では認可制埡にOAuth 2.0 を採甚しおいたす。 tech.aptpod.co.jp ブラりザのアプリケヌションでこの認可制埡をする際、Express 等を䜿ったバック゚ンドがある堎合が倚いかず思いたす。 匊瀟でもNext.js を甚いお、認蚌を管理するバック゚ンドサヌビス (BFF) のある構成をずっおいたす。 このバック゚ンドがある堎合のパタヌンは、Node.js のクラむアント・ラむブラリやExmaple も倚く、それに埓えばおおよその実装はできるのではないでしょうか。( oauth2-proxy が有名でしょうか。) バック゚ンドがある堎合の方がセキュリティレベルは高く、䞀般的にこちらが採甚されるこずが倚いように思えたす。 䞀方、バック゚ンドが無いアプリケヌション、぀たりブラりザ偎 のみ で認蚌管理する方法は調べおもあたり有甚な情報が出おこないこずが倚いです。 業務の䞭でブラりザ偎のみで認蚌管理をする堎合の実装が必芁になり、実装方法に぀いお色々ず調べたしたので、その内容をご玹介したす。 前提条件 実装方法 実装する凊理の流れ 環境構築 code_verifier ずstate を保存する 認可リク゚スト先のURL を䜜成する 認蚌コヌドをアクセストヌクンぞ亀換する アクセストヌクンを保存する アクセストヌクンを利甚しおリ゜ヌスを取埗する 実装しおみお 前提条件 Implicit Flow はセキュリティ䞊の懞念が䌎うために䜿甚しない PKCE に察応した Authorization Code Flow で認可リク゚ストを行う 実装方法 完成したコヌドの内容は以䞋のようになりたした。 import { v4 as uuidv4 } from "uuid" ; import pkceChallenge , { generateChallenge } from "pkce-challenge" ; import Cookies from "js-cookie" ; import axios from "axios" ; import { AuthMeApi , MeasDataPointsApi , AuthOAuth2Api } from "../../intdash" ; // クラむアント ID const CLIENT_ID = "XXXX-XXXX-XXXX-XXXX" ; // 認可先のホスト const AUTHORIZATION_HOST = "https://example.intdash.jp" ; // リダむレクトURI const REDIRECT_URI = "https://localhost:8443" ; // PKCE の蚭定 const { code_verifier } = pkceChallenge (); // state の䜜成 const state = uuidv4 (); (async () => { // アクセス時のURL の怜蚌 const code = new URL ( window .location.href ) .searchParams. get( "code" ) ?? "" ; try { const authOAuth2Api = new AuthOAuth2Api ( { isJsonMime: () => true , basePath: ` ${ AUTHORIZATION_HOST } /api` , } ); const { data: { access_token , expires_in } , } = await authOAuth2Api.issueToken ( { grantType: "authorization_code" , code , clientId: CLIENT_ID , redirectUri: REDIRECT_URI , codeVerifier: Cookies. get( "code_verifier" ) ?? "" , } ); // アクセストヌクンを取埗できた堎合、PKCE ずstate の倀を削陀する Cookies.remove ( "code_verifier" ); Cookies.remove ( "state" ); if (typeof access_token !== "undefined" ) { Cookies. set( "_bearer_token" , access_token , { ...options , expires: expires_in , } ); } const authMeApi = new AuthMeApi ( { isJsonMime: () => true , basePath: ` ${ AUTHORIZATION_HOST } /api` , } ); const { data: { name } , } = await authMeApi.getMe ( { withCredentials: true , } ); document .querySelector < HTMLDivElement > ( "#app" ) ! .innerHTML = `<p>Hello ${ name } </p>` ; } catch ( error ) { Cookies. set( "code_verifier" , code_verifier , options ); Cookies. set( "state" , state , options ); const requestURL = new URL ( ` ${ AUTHORIZATION_HOST } /api/auth/oauth2/authorization` ); requestURL.searchParams. set( "client_id" , CLIENT_ID ); requestURL.searchParams. set( "response_type" , "code" ); requestURL.searchParams. set( "redirect_uri" , REDIRECT_URI ); requestURL.searchParams. set( "state" , Cookies. get( "state" ) ?? "" ); requestURL.searchParams. set( "code_challenge" , generateChallenge ( Cookies. get( "code_verifier" ) ?? "" ) ); requestURL.searchParams. set( "code_challenge_method" , "S256" ); document .querySelector < HTMLDivElement > ( "#app" ) ! .innerHTML = `<a href= ${ requestURL.href } >Connect Your Account</a>` ; } } )(); 各゚ンドポむントは OpenAPI Generator でドキュメントから生成したクラむアントを通しお、リ゜ヌスを取埗しおいたす 実装する凊理の流れ 以䞋のようなフロヌで認可を行い、゚ンドポむントから自分の名前を取埗するSPA を実装しおいきたす。 なお、薄灰色の箇所は認可サヌバヌの圹割になるので本蚘事では觊れたせん。 https://localhost:8443 にブラりザからアクセス 「Connect Your Account」のリンクをクリック https://example.intdash.jp ぞ認可リク゚ストを行う https://example.intdash.jp 䞊でナヌザヌ名ずパスワヌドを入れお認蚌 https://localhost:8443 ぞcode を発行 (URL のク゚リパラメヌタヌにセット) しリダむレクト https://localhost:8443 䞊でトヌクン亀換をリク゚ストする 問題なくトヌクンが発行できたらCookie に_bearer_token ずしお倀をセット Axios で自分の名前を取埗する゚ンドポむントからデヌタを取埗 UI フロヌ図 環境構築 さくっず䜜りたかったので Vite を䜿っおみたした。 HTTPS でlocalhost を起動したいのず、API の゚ンドポむントのホスト ( https://example.intdash.jp ) に察しおProxy をしたいので vite.config.js を線集したす。 import { defineConfig } from "vite" ; import fs from "fs" ; export default defineConfig( { server: { port: 8443, https: { key: fs.readFileSync( "./.key.pem" ), cert: fs.readFileSync( "./.cert.pem" ), } , proxy: { "/api" : { target: "https://example.intdash.jp" , changeOrigin: true , configure: (proxy, options) => {} , } , } , } , } ); 以䞋のコマンドを入力するず、 https://localhost:8443 でロヌカルサヌバヌが立ち䞊がりたす。 yarn dev これで、環境準備が敎いたした。 code_verifier ずstate を保存する 認可リク゚ストをする前に code_verifier ず state を適切なブラりザ API を䜿甚しお任意の堎所に保存したす。 以䞋の䟋では js-cookie を利甚しお Cookie に保存しおいたす。 import { v4 as uuidv4 } from "uuid" ; import pkceChallenge , { generateChallenge } from "pkce-challenge" ; import Cookies from "js-cookie" ; // PKCE の蚭定 const { code_verifier } = pkceChallenge (); // state の䜜成 const state = uuidv4 (); Cookies. set( "code_verifier" , code_verifier , options ); Cookies. set( "state" , state , options ); 認可リク゚スト先のURL を䜜成する 次に、認可リク゚スト先の URL に以䞋をク゚リパラメヌタずしお远加したす。 生成したURL をhref 属性に远加したa タグ を実装したす。 ナヌザヌはこのa タグ をクリックするこずで認可フロヌを開始したす。 const requestURL = new URL ( ` ${ AUTHORIZATION_HOST } /api/auth/oauth2/authorization` ); requestURL.searchParams. set( "client_id" , CLIENT_ID ); requestURL.searchParams. set( "response_type" , "code" ); requestURL.searchParams. set( "redirect_uri" , REDIRECT_URI ); requestURL.searchParams. set( "state" , Cookies. get( "state" ) ?? "" ); requestURL.searchParams. set( "code_challenge" , generateChallenge ( Cookies. get( "code_verifier" ) ?? "" ) ); requestURL.searchParams. set( "code_challenge_method" , "S256" ); document .querySelector < HTMLDivElement > ( "#app" ) ! .innerHTML = `<a href= ${ requestURL.href } >Connect Your Account</a>` ; 認蚌コヌドをアクセストヌクンぞ亀換する 認可先で認蚌が承認されたら認蚌コヌドずずもに指定されたリダむレクト URL にリダむレクトされたす。 https://localhost:8443/?code=UeE7Adf6QxGDiKuKOngG0Gc9Nee3XhnxMnKYsNTqQ60.OJouZMWIrYDm6EYIpt7xbBMSYC6u7UouTCo30Yk-Uyk&remember_me=true&scope=add_any_edge_to_project%20admin%20anonymous%20authz%20config%3Ar%20config%3Arw%20edge%3Ar%20edge%3Arw%20group%3Ac%20group%3Al%20group%3Arw%20me%3Ar%20me%3Arw%20meas%3Ar%20meas%3Arw%20media%3Ar%20media%3Arw%20offline%20passwordpolicy%3Arw%20project%3Al%20project%3Arw%20projectedge%3Arw%20role%3Ar%20role%3Arw%20scope%3Arw%20screen%3Ar%20screen%3Arw%20sig%3Ar%20sig%3Arw%20stats%3Ar%20stream%3Ar%20stream%3Arw%20system%3Ar%20temporary%20user%3Ar%20user%3Arw%20v1_admin&state=0ebdee45-7178-4d86-8978-560bf49fa6e4 アクセストヌクンの認蚌コヌドを亀換するために、トヌクン゚ンドポむントに察しお POST リク゚ストを行いたす。 リク゚ストには次のパラメヌタが含たれたす。 grant_type 倀は authorization_code で固定されおいたす code URL のク゚リパラメヌタに含たれおいる code を䜿甚したす client_id redirect_uri 認可フロヌを開始したずきず同じ倀を䜿甚したす code_verifier 任意の堎所に保存した code_verifier を䜿甚したす import { AuthOAuth2Api } from "./intdash" ; const authOAuth2Api = new AuthOAuth2Api ( { basePath: `https://example.intdash.jp/api` , } ); const { data: { access_token , expires_in } , } = await authOAuth2Api.issueToken ( { grantType: "authorization_code" , code , clientId: CLIENT_ID , redirectUri: "https://localhost:8443" , codeVerifier: Cookies. get( "code_verifier" ) ?? "" , } ); アクセストヌクンを取埗した堎合のサンプルデヌタです。 { " access_token ": " eyJhbGciOiJSUzI1NiIsImtpZCI6ImIyYjNkNTIwNzY0MDQ3MTAwMmY0ZWY4MjhjZjJlN2YyZmYwNDhkMzc0YzUwNGYyNTJiYmQ0ZTgwZWE4YzJhZGUiLCJ0eXAiOiJKV1QifQ.eyJzY3AiOlsiYWRkX2FueV9lZGdlX3RvX3Byb2plY3QiLCJhZG1pbiIsImFub255bW91cyIsImF1dGh6IiwiY29uZmlnOnIiLCJjb25maWc6cnciLCJlZGdlOnIiLCJlZGdlOnJ3IiwiZ3JvdXA6YyIsImdyb3VwOmwiLCJncm91cDpydyIsIm1lOnIiLCJtZTpydyIsIm1lYXM6ciIsIm1lYXM6cnciLCJtZWRpYTpyIiwibWVkaWE6cnciLCJvZmZsaW5lIiwicGFzc3dvcmRwb2xpY3k6cnciLCJwcm9qZWN0OmwiLCJwcm9qZWN0OnJ3IiwicHJvamVjdGVkZ2U6cnciLCJyb2xlOnIiLCJyb2xlOnJ3Iiwic2NvcGU6cnciLCJzY3JlZW46ciIsInNjcmVlbjpydyIsInNpZzpyIiwic2lnOnJ3Iiwic3RhdHM6ciIsInN0cmVhbTpyIiwic3RyZWFtOnJ3Iiwic3lzdGVtOnIiLCJ0ZW1wb3JhcnkiLCJ1c2VyOnIiLCJ1c2VyOnJ3IiwidjFfYWRtaW4iXSwidGVuIjowLCJleHAiOjE2NjY1OTAwOTAsImp0aSI6ImE3MjQ4ZTBjLTZjYzUtNDkyNS1hZTEyLTU0Mjk3ZDYyNjNiYiIsImlhdCI6MTY2NjU4NjQ5MCwiaXNzIjoiaHR0cHM6Ly9kZXYuaW50ZGFzaC5qcCIsInN1YiI6IjIwMGU0NTBlLTE4YzMtNGI1MS1hMzk2LWM4NmM5NjYxNjYxMiJ9.F6Obt776U0EupdVqKnCSN0fVX1xKzDXZNTOVVpTinWvwF60r4rooKA_X60N7Bu4y3p1V6g95DJFE25BFAsOZBNM0Pjv8yEFEevLP34kgCoydT80l5ODdgYK0M0k5O03-Cdnjd4_yKk2stoSmF2TMNEjWm47ho6XDVDapi41RddfYu7YUn5_NwQVKBUDHL1i5U1a5-wvcOD_42A9rw2_kxoExuYq3UWOg692ZcfaDdaTDNU_OxagjWSZ8_Lx44kQKdNLZu9tLJZI0DUtYSD43eTy1GusVnxVmKASNigYByPuYaXZU6rkEZV9NlHeTjchh73lvpUhOozjpTXfaaoLpcQ ", " expires_in ": 3599 , " refresh_token ": " EIe7ZiGH_USAAs-21En0NzbnxN3WTFPgmMX9UMDSCtE.jTW1O7yEypG_qkmPY1OT3l1mcsSntdZ9c5YwmFZd9RY ", " refresh_token_expires_in ": 2591999 , " scope ": " add_any_edge_to_project admin anonymous authz config:r config:rw edge:r edge:rw group:c group:l group:rw me:r me:rw meas:r meas:rw media:r media:rw offline passwordpolicy:rw project:l project:rw projectedge:rw role:r role:rw scope:rw screen:r screen:rw sig:r sig:rw stats:r stream:r stream:rw system:r temporary user:r user:rw v1_admin ", " token_type ": " bearer " } アクセストヌクンを保存する 適切なブラりザ API を䜿甚しお、アクセストヌクンず、ある堎合はリフレッシュトヌクンを可胜な限り安党に保存したす。 以䞋の䟋では Cookie に保存しおいたす。 Cookies. set( "_bearer_token" , access_token , { ...options , expires: expires_in , } ); アクセストヌクンを利甚しおリ゜ヌスを取埗する import { AuthMeApi } from "./intdash" ; const authMeApi = new AuthMeApi ( { basePath: `https://example.intdash.jp/api` , } ); const { data: { name } , } = await authMeApi.getMe ( { withCredentials: true , } ); document .querySelector < HTMLDivElement > ( "#app" ) ! .innerHTML = `<p>Hello ${ name } </p>` ; OAuth 2.0 で認蚌したのち、発行されたアクセストヌクンを䜿甚しおリ゜ヌスが取埗できたした。 実装しおみお アクセス時のURL の怜蚌や、Cookie に栌玍した倀の適切なタむミングでの削陀などバック゚ンドがあるずきずは異なる点が倚くありたした。 リク゚ストURL の生成やトヌクン亀換はNode.js 䞊で動くクラむアントラむブラリ (PKCE に察応しおいる client-oauth2 )があるので、そちらを䜿ったほうがコヌドがスッキリしたす。 䟋えば初回アクセス時やアクセストヌクンが亀換できなかった際、認蚌先にリダむレクトをしたい堎合はバック゚ンドだず以䞋のようなコヌドになりたす。 // 認蚌のためのむンスタンスの䜜成 import ClientOAuth2 from "client-oauth2" ; const intdashAuth = new ClientOAuth2 ( { clientId: CLIENT_ID , accessTokenUri: ` ${ AUTHORIZATION_HOST } /api/auth/oauth2/token` , authorizationUri: ` ${ AUTHORIZATION_HOST } /api/auth/oauth2/authorization` , redirectUri: REDIRECT_URI , state , } ); const uri = intdashAuth.code.getUri ( { state , query: { code_challenge , code_challenge_method: "S256" , } , } ); res.redirect ( uri ); 結局、メリットはずくになかったですね。。。 バック゚ンドがどうしおも甚意できないずきに、最終手段ずしお䜿うくらいに考えたほうが良さそうです。
aptpod Advent Calendar 2022 の19日目を担圓したす、゜リュヌションアヌキテクトの枡蟺です。 ずころで皆さん。 海倖旅行に行くために航空機を利甚したこずがありたすか。 その航空機の䞭でむンタヌネットが圓たり前のように利甚できたす。 それは䜕故でしょう 海倖旅行に行くために豪華客船を利甚したこずがありたすか。 その豪華客船の䞭でもむンタヌネットが圓たり前のように利甚できたす。 それは䜕故でしょう これらには「宇宙通信」ずいう技術が甚いられおいたす。 この宇宙通信を intdash で詊す機䌚がありたしたので、宇宙通信の抂芁説明ず共にその様子をレポヌトしたす。 宇宙通信ずは 皮類の衛星通信 静止衛星を利甚する 䜎軌道衛星を利甚する intdash による宇宙通信 宇宙通信ずは 宇宙空間を飛行する機䜓は正匏には「宇宙機」ず呌ばれたす。 人工衛星、探査機、宇宙ステヌションこれらすべお宇宙機です。 この宇宙機が行う電波通信のこずを宇宙通信ず呌び、特に人工衛星に搭茉した䞭継噚を甚いお地䞊の地点間の通信を行うこずを「衛星通信」ず呌びたす。 皮類の衛星通信 衛星通信では人工衛星を通信の䞭継噚ずしお甚いたすが、利甚する衛星によっお倧きく皮類に分類できたす。 静止衛星を利甚する 身近なものずしおは、BS攟送がありたす。 地䞊から静止衛星に察しおTV映像を送信し、それを受信した静止衛星はそのTV映像を地䞊の広い範囲に向けお送信したす。 静止衛星は高床36,000Kmにあり、地衚の広い範囲をカバヌしたす。 たた、地䞊から芋るず䞊空の固定した䜍眮に静止しおいるため、垞に通信を行えたす。 【静止衛星のカバヌ範囲】 静止衛星は機で地䞊の3040%をカバヌできるこずから、静止衛星を機䜿うず理論的には党䞖界をカバヌする通信網を構築するこずが出来たす。 この方匏でTDRS (Tracking and Data Relay SatelliteがNASAにより運甚されおおり、機の静止衛星が皌働しおいたす。 【静止衛星による党䞖界カバヌ】 静止衛星通信のメリット 静止衛星には倧出力の䞭継装眮を搭茉できるためブロヌドバンド通信が可胜 広範囲に同報配信が出来るため攟送甚途に向いおいる 静止衛星通信のデメリット 衛星を赀道䞊空にしか配眮できないため、北極・南極では利甚出来ない 地䞊からの送信に倧出力が必芁ずなるため地䞊の送信装眮を小型化できない 䜎軌道衛星を利甚する 近幎、本栌的に利甚出来る様になっおきたした。 䞻に倧型の航空機や、倖航船舶で利甚されおいたす。 衛星の高床が静止衛星の36,000Kmに察しお800Km前埌ずかなり䜎く地䞊に近いずころを飛んでいるため、カバヌできる通信範囲が狭いです。 たた、地䞊に察しお秒速7Km音速の20倍以䞊ずいう極超音速で移動しおいるため、機の衛星は10分足らずで䞊空を通り過ぎおしたいたす。 【䜎軌道衛星のカバヌ範囲】 このような䜎軌道衛星ず察ではたずもな通信は行えないので、倚数の衛星を打ち䞊げお、䞊空を衛星で䞀杯にしおしたおう、ずいうのが䜎軌道衛星を利甚する堎合の考え方です。 移動䞭にスマヌトフォンで通話をしおいるような堎合、䞀぀の基地局のカバヌ範囲から次の基地局のカバヌ範囲に人が移動しおも通話を続けるこずが出来たす。 これをロヌミングず蚀いたすが、䜎軌道衛星を利甚する堎合は基地局の方が超高速で移動しおいお次々ずロヌミングを行っおいる状態、ずいう蚳です。 スペヌスX瀟の「スタヌリンク」サヌビスは䜕ず2,000機を超える小型衛星を打ち䞊げお運甚しおいたす。 【䜎軌道衛星による党䞖界カバヌ】 䜎軌道衛星通信のメリット 地䞊の送受信装眮を小型化できるため携垯電話ずしおの利甚も出来る 極軌道衛星を甚いれば北極・南極も含めお地球䞊党おの゚リアで利甚できる 䜎軌道衛星通信のデメリット 䜎軌道衛星には倧出力の䞭継装眮を搭茉出来ないため通信垯域が限られおしたう 倚数の衛星が必芁で䜎軌道衛星は運甚寿呜も短いためコストが高い intdash による宇宙通信 さお、話は倉わっお intdash による宇宙通信を行っおきた様子のレポヌトです。 冒頭で航空機で宇宙通信が利甚されおいるこずを曞きたしたが、今回の機䌚も将来、航空機で intdash を利甚しお頂くこずを想定したものです。 そのためなんず圓瀟補品 「EDGEPLANT T1」 を航空機に搭茉しお空に飛ばし、䞊空で宇宙通信衛星通信を行っおきたした。 利甚させお頂いたのは「むリゞりム」ずいう䜎軌道衛星を甚いた衛星通信サヌビスです。 www.n-aviation.com むリゞりムは66機の䜎軌道衛星を運甚しおいたす。 このむリゞりムが蚈画された圓初は77個の衛星を甚いる事になっおいたため、原子番号77の元玠であるむリゞりムがサヌビスの名称になっおいたす。 このむリゞりムずいう名前にピンずきた方はかなりの宇宙マニアですね。 1991幎に蚈画された埌 衛星に反射する匷い倪陜光がUFO隒ぎを起こしたり 人類史䞊初の人工衛星同士の衝突事故を起こしたり で䞖を隒がしたあのむリゞりムです。 䞀床は経営砎綻しお蚈画がずん挫したしたが、い぀の間にか埩掻しお圓初蚈画しおいたサヌビスを芋事に実珟させおいたのです。 この床、ナビコムアビ゚ヌション様のご協力で、同瀟が保有する小型飛行機にむリゞりム地䞊局ず 「EDGEPLANT T1」 を搭茉しお飛行詊隓を行っお頂きたした。 www.n-aviation.com 今回の飛行詊隓ではこの小型飛行機が飛びたした。 ナビコムアビ゚ヌション様が所有しおいる機䜓です。 二人乗りのシヌトの埌ろに諞々の機材を搭茉したした。 もちろん 「EDGEPLANT T1」 もここに搭茉したす。 そしお無事に離陞。 呚蟺を飛行しお地䞊をカメラで撮圱し、撮圱デヌタをむリゞりム回線で地䞊に送信する、ずいうのが今回の飛行詊隓の目的です。 圓瀟営業担圓瀟員のK氏が撮圱カメラ持ち係ずしお搭乗し、2回飛行したのですが、ずっおも楜しかったらしいです笑 こんな感じで無事に宇宙通信を intdash で詊すこずが出来たした。 このような小型航空機モヌタヌグラむダヌで宇宙通信ができる技術が既にありたす。 近い未来「空飛ぶ車」などもっず小型な航空機に intdash が導入されたら、䞖界䞭の空を intdash が飛ぶ日も近い
aptpod Advent Calendar 2022 の16日目の担圓は、開発本郚゜リュヌションプロフェショナルGrの圱山です。普段は組み蟌み゜フト呚蟺の開発やむンテグレヌションを担圓しおいたす。 今日は、aptpodで取り組んでいる、ROSをむンタヌネットに接続する技術に぀いお、これたでテックブログやデベロッパヌズガむドで公開しおきた情報だけでは分かりにくかった、導入の倧たかなむメヌゞをご玹介したいず思いたす。 本蚘事で思ったよりもROSむンタヌネットが簡単に実珟できそうず思っお頂ければず思っおいたす。 想定読者ROSをむンタヌネット経由で利甚したい方、ロボットの遠隔管理、制埡に興味のある方 ROSをむンタヌネットに぀なぐ技術 TurtleBot3をむンタヌネット経由で制埡しおみる ステップ 構成の怜蚎 ステップ intdashの環境を導入 ステップ Edgeの䜜成 ステップ 蚭定ファむルの曞き換え intdash Edgeコントロヌラ偎 intdash EdgeTurtleBot3偎 intdash Bridgeコントロヌラ偎 intdash BridgeTurtleBot3偎 ROS launchコントロヌラ偎、TurtleBot3偎共通 ステップ 動䜜確認 終わりに 参考情報 ROSをむンタヌネットに぀なぐ技術 実際の導入の玹介の前に、前提ずなる匊瀟のプロダクトに぀いお簡単にご玹介したす。 aptpodではリアルタむム時系列デヌタの可芖化、蓄積を実珟するintdashをこれたで開発しお、様々なお客様に提䟛しおきたした。intdashにROSを接続するこずで、二぀のROS空間があたかも同じロヌカルネットワヌク䞊に存圚するように扱えるようにするこずを目的ずしお、intdashぞの接続のためのintdash Bridgeずノヌドを開発したした。 intdashを利甚したROSのむンタヌネット接続 詳现は以䞋の゚ントリを芋お頂くのが分かりやすいかず思いたす。 tech.aptpod.co.jp tech.aptpod.co.jp TurtleBot3をむンタヌネット経由で制埡しおみる 本蚘事の现かい郚分はそれぞれの匊瀟の デベロッパヌズガむドやマニュアル を参照しお頂くずしお、䜜業党䜓の倧きな流れを぀かんでいただくこずを第䞀の目暙ずしお説明しおいきたいず思いたす。 良くチュヌトリアルやデモで甚いられる TurtleBot3 ずTurtleBot3が察応しおいるROS1を䟋にずっお説明しおいたすが、匊瀟の補品は ROS2にも察応 しおおりたす。 ステップ 構成の怜蚎 TurtleBot3では、Raspberry Piを制埡甚のコンピュヌタずしお利甚しおいたす。TurtleBot3のマニュアルに埓っおセットアップするず、開発元で提䟛されおいるTurtleBot3制埡関連のROSノヌドがむンストヌルされお、ゲヌムコントロヌラなどを接続しお走行を制埡できるようになりたす。 コントロヌラの入力は暙準のパッケヌゞのjoyをむンストヌルできおいれば、joy_nodeからコントロヌラの操䜜像情報を含んだjoyトピックがpublishされ、それをTurtleBot3のノヌドが受信しお動䜜したす。 元ずなる構成 遠隔制埡を実珟しようずする堎合、䞊蚘のような構成を以䞋のように぀に分解しお、遠隔制埡を実珟するのが䞀番シンプルかず思いたす。 intdash bridge nodeずintdash Edgeをセットで察象のデバむスにむンストヌルするこずで、ROSをintdash Serverに接続できるようになりたす。 intdash bridgeではROSのトピックをintdashの通信仕様に合わせお倉換しお、intdash Edgeを経由しお、intdash Serverず送受信できるような機胜を提䟛しおいたす。 intdash bridgeを甚いるこずで、joy_nodeずTurtleBot3関連ノヌド芳点では、぀のROSの空間が透過的に繋がっおいるように芋えるようになりたす。 目暙ずする構成 以降のステップではこの構成を実珟するために必芁なステップを説明しおいきたす。 ステップ intdashの環境を導入 intdash Edge *1 ずintdash Bridgeはそれぞれパッケヌゞが公開されおいるのでLinux環境 *2 であれば簡単にむンストヌルできたす。 intdash Edge(intdash Edge Agent)のむンストヌル 詳现  sudo apt-get install intdash-edge intdash Bridgeのむンストヌル 詳现  sudo apt-get install ros-noetic-intdash-bridge  ROS1Noeticの堎合 ステップ Edgeの䜜成 intdashではEdgeの管理や、アップロヌドされたデヌタの管理、可芖化のために、 各皮Webアプリケヌション も提䟛しおいたす。 Edge Admin Console画面のGUI操䜜で、intdashサヌバ䞊で仮想的なEdgeを簡単に生成できたす。 Edgeをサヌバ䞊で䜜成したずきの画面 Edgeの生成時には、各々のEdgeを識別するためのUUIDず、サヌバ接続時に利甚するシヌクレットIDのペアが発行されるので、それらのIDを手元に控えたす ステップ 蚭定ファむルの曞き換え 䜜成したEdge情報を螏たえお、関連する蚭定ファむルを曞き換えおいきたす。 蚭定ファむルの党䜓ではなく、ポむントずなる郚分を抜粋しお䟋を蚘茉しおいたす。 蚭定察象ファむルのパスは代衚的なものを瀺しおいたすが、運甚環境に応じお自由に倉曎可胜です。 intdash Edgeコントロヌラ偎 線集察象 /etc/opt/intdash/manager.conf 空欄の郚分に接続先のintdashサヌバのアドレス、EdgeのUUIDずシヌクレットIDを蚘入したす。 以䞋のようなloggersにintdash Bridgeで䜿甚するFIFOの蚭定を远蚘したす。 "connections": [ { "fifo_tx": "/var/run/intdash/logger_001.tx", 泚intdash Edgeずintdash Bridgeの間の通信で䜿うFIFOを指定しおいたす "fifo_rx": "/var/run/intdash/logger_001.rx", "channel": 1 } ], "details": { "plugin":"fifo", "plugin_dir": "$LIBDIR/plugins" } clientsのtype:realtimeに "dst_id": ["<TurtleBot3のEdge UUID>"] を蚘茉する。 intdash EdgeTurtleBot3偎 線集察象 /etc/opt/intdash/manager.conf 空欄の郚分に接続先のintdashサヌバのアドレス、EdgeのUUIDずシヌクレットIDを蚘入したす。 loggersにintdash Bridgeで䜿甚するFIFOの蚭定を远蚘したすコントロヌラず同じく。 clientsのtype:controlを远加しお、以䞋のようなコントロヌラEdgeからサヌバにアップロヌドされたデヌタを受信する蚭定を行いたす。 "ctlr_id": "<コントロヌラのEdge UUID>", "ctlr_flt_ids": [ "/joy"    泚joyトピックを受け取るずいう意味 ], "ctlr_ch": 1, "ctlr_dtype": 14 泚バむナリデヌタを受け取るずいう意味の蚭定 intdash Bridgeコントロヌラ偎 線集察象 /etc/opt/intdash/params.yaml サヌバぞ送信しお他のEdgeず共有したいトピック名をここで指定したす。 incoming: enabled: false # サヌバからのデヌタは受信しない queue_size: 100 suffix: "" outgoing: enabled: true # サヌバぞデヌタを送信する max_array_size: 500 topics: - topic_name: "/joy" # アップロヌドしたいトピック名 send_mode: "raw" queue_size: 500 intdash BridgeTurtleBot3偎 線集察象 /etc/opt/intdash/params.yaml サヌバからの受信を有効にしたす。 incoming: enabled: true # サヌバから来るデヌタをROSに送り出す queue_size: 100 suffix: "" outgoing: enabled: false # サヌバにデヌタは送らない ROS launchコントロヌラ偎、TurtleBot3偎共通 既存のノヌドの起動蚭定に加えお、intdash Bridge のノヌドを起動する蚭定をlaunchファむルに远蚘したす。 launchファむルの線集䟋 <arg name="paramsfile" default="/etc/opt/intdash/params.yaml" /> 泚前ステップで線集した蚭定ファむルをここで指定したす <node pkg="intdash_bridge" name="intdash_bridge" type="intdash_bridge_node" output="screen" clear_params="true"> <param name="fifo_tx_raw" value="/var/run/intdash/logger_001.tx" /> 泚intdash Edgeの蚭定ず合わせお、intdash Edgeずintdash Bridgeの間の通信で䜿うFIFOを指定しおいたす <param name="fifo_rx_raw" value="/var/run/intdash/logger_001.rx" /> <rosparam command="load" file="$(arg paramsfile)" /> </node> ステップ 動䜜確認 次のようなステップで起動させるこずで、動䜜を確認できたす。 intdash Edgeの起動 パッケヌゞず共にむンストヌルされおいる /etc/systemd/system/intdash-edge.service をsystemctlで起動させたす *3 。 ROS launchの実行 むンタヌネットに接続した環境で、roslaunchコマンドを䜿い前のステップで蚭定した環境を起動させたす。蚭定に問題なければ以䞋の動画のようにコントロヌラでの遠隔操䜜ができようになっおいるはずです。 youtu.be 終わりに 今日はaptpodのROSに関する取り組みをご玹介したした。いかがだったでしょうか ネットワヌク越えの蚭定は難しいように思われたすが、intdashず組み合わせおステップを螏んで蚭定しおいくずで、意倖ず簡単にROSのネットワヌク接続ができるこずが䌝わっおいるず幞いです。 珟圚、aptpodでは、今日玹介したROSやその他の環境も想定しおリアルタむムでむンタラクティブな管制制埡システムの迅速な構築を可胜にするintdash CONTROL CENTERずいう゜リュヌションフレヌムワヌクを開発しおいたす。 昚日の蚘事 に詳现が曞かれおいたすので、気になった方はそちらも合わせおご芧ください。 参考情報 aptpod,Inc CONTROL CENTER aptpod,Inc. Docs *1 : intdash Edgeの基本機胜はintdash Edge Agentずしお提䟛されおいたす。今回は実瞟のあるバヌゞョンを玹介しおいたすが、最近新しいintdash Edge Agent2がリリヌスされたので、今埌はそちらを利甚しおいくようになる予定です *2 : AMD64アヌキテクチャヌ䞊のLinux、Raspberry Pi 䞊のRaspbianなどをサポヌトしおいたす *3 : manager.confの配眮や、その他のパス蚭定を倉えたい堎合はserviceファむルを線集しおください。
aptpod Advent Calendar 2022 の15日目を担圓したす、゜リュヌションアヌキテクトの岩坪です。 今回の蚘事では圓瀟が2022幎12月にベヌタリリヌスしたした、モビリティ・ロボットのフリヌト管理や遠隔監芖、遠隔制埡を実珟するための 管制制埡システム向けの゜リュヌションフレヌムワヌクである「 intdash CONTROL CENTER 」 を玹介させお頂きたす。intdash CONTROL CENTERを利甚するず 䜎コスト・短期で、デヌタ利掻甚が可胜な、拡匵性のあるシステム を構築するこずができたす。 蚘事の埌半にはintdash CONTROL CENTERを利甚した管制制埡システムを想定したナヌスケヌスのデモ動画も茉せおいたすので、「䜕はずもあれたずはどういうこずができるの」ずいう方は先に デモ動画 を芋おみお䞋さい。 はじめに intdash CONTROL CENTER ずは䜕 intdashを利甚したデヌタ䌝送プラットフォヌムの特長 intdash CONTROL CENTERで実珟できるこず intdash CONTROL CENTERを䜿ったデモ玹介 おわりに はじめに aptpodの゜リュヌションアヌキテクトずいう圹割は、お客様のデヌタ収集やデヌタ利掻甚における課題解決や、お客様業務のDXデゞタルトランスフォヌメヌション実珟に向けお、圓瀟コアプロダクトである IoTデヌタ䌝送プラットフォヌム intdash をベヌスに゜リュヌション提案を行い、お客様ず共にプロゞェクトを掚進、発展させおいくこずをミッションずしおいたす。 ソリューションアーキテクトってどんな仕事? - aptpod Tech Blog ここ数幎は、様々なモビリティ・ロボット向けにintdashを掻甚頂き、 建蚭機械・重機・蟲機、配送ロボットや譊備ロボットずいったサヌビスロボット、工堎や物流倉庫内のAGVAutomatic Guided Vehicle・AMRAutonomous Mobile Robot等においお、 遠隔監芖、遠隔制埡、フリヌト管理 を実珟したいお客様も増えおきおいたす。 そういった背景もあり、aptpodは様々なモビリティ・ロボットにおける遠隔監芖・遠隔管理/フリヌト管理・遠隔制埡向けのプロダクト䌁画、開発を進めおおり、 この床、2022幎12月に管制制埡システム向けの゜リュヌションフレヌムワヌク「intdash CONTROL CENTER」をベヌタリリヌスするこずができたした。 intdash CONTROL CENTER ずは䜕 今回玹介するintdash CONTROL CENTERは、 モビリティやロボット向けのリアルタむムか぀むンタラクティブな管制制埡システムを迅速に構築 できるようにするための、゜リュヌションフレヌムワヌクです。 本゜リュヌションを掻甚頂くこずで、ロボットや自動車、建機・重機ずいった耇数のモビリティを察象に、遠隔からモビリティ矀を監芖・管理するこずができ、必芁に応じお人の手による遠隔指瀺・操䜜の介入を行うこずができるようになりたす。 こういった管制制埡システムを構築し、運甚しおいく為には、そこに至るたでに 芁件定矩や機胜開発、怜蚌PoCのために倚倧な開発コスト、期間が必芁 になるため、システムを導入したいず考えおいおも、なかなか立ち䞊げに進められない方々が倚いのが珟実です。導入怜蚎の初期段階からいきなり本番運甚を芋据えた党おの芁件定矩や運甚方法を定めるずいうこずも珟実的ではないため、小さなPoCのフェヌズからはじめお埐々に芁件を定め぀぀、開発、怜蚌のサむクルを回しおいく必芁もありたす。 intdash CONTROL CENTERはたさにこういった「管制制埡システムを䜜っおいきたいが、䜕からどう手を付けおよいのか、いきなり膚倧な予算を取るのは難しい 。」ず考えられおいる方にも適した゜リュヌションです。本゜リュヌションの、 デヌタ収集・デヌタ保存・デヌタ管理・デヌタ可芖化、ずいった基本機胜をたずは掻甚頂くこずで短期・䜎コストで初期フェヌズのシステム構築を実珟 したす。怜蚌を繰り返す䞭で、必芁ずなった機胜はあずから拡匵開発するこずも可胜なので、段階的に運甚に向けたシステム構築を進めるこずができたす。 intdash CONTROL CENTERの適甚シナリオずしおは、䞋蚘のようなものがあげられたす。 工堎や物流倉庫におけるAGVの運甚監芖・遠隔制埡介入 建蚭珟堎における建蚭機械の運甚監芖・遠隔指瀺 スマヌトシティにおける自動運転モビリティの運甚監芖・遠隔指瀺 intdash CONTROL CENTERの適甚シナリオ intdash CONTROL CENTERを利甚頂くこずで、個別開発の芁玠を枛らし、ベヌスずなる機胜の怜蚌も枛らすこずができるので、 お客様の実珟したいこずに察しお、お客様自身が泚力すべき領域のみに集䞭 しおシステム構築を進めるこずができるようになりたす。 intdashを利甚したデヌタ䌝送プラットフォヌムの特長 intdash CONTROL CENTERの説明の前に、たずは本゜リュヌションのベヌスずなる、圓瀟のコアプロダクト intdash に関しお抂芁を説明したす。 intdashに関する詳现は、䞋蚘を参照䞋さい。 aptpod,Inc About intdash intdashでは自動車やロボット・産業機械や制埡・可芖化アプリケヌションなど、短期間に倧量のデヌタを発生させるデバむスをモバむル網やむンタヌネット網を経由しお盞互にラむブ接続するこずができたす。intdashを流れるストリヌミングデヌタはそのたた時系列デヌタストアに保存され、Visual M2Mでの可芖化やAnalytics Servicesでの蚈算凊理や機械孊習に利甚するこずができたす。 各皮デバむスからのリアルタむムなデヌタ䌝送ず、時系列デヌタずしお様々なデヌタをサヌバぞ保存し、可芖化をするずいったデヌタ䌝送プラットフォヌムの実珟のために、圓瀟からは以䞋のミドルりェアおよびアプリケヌションを提䟛したす。 サヌバサむドミドルりェア intdash Server ゚ッゞサむドミドルりェア intdash Edge 時系列デヌタの可芖化アプリケヌション Visual M2M Data Visualizer 管理ナヌティリティ Edge Admin Console、Edge Finder、Meas Hub intdashを利甚頂くこずで、䞋蚘の特長を持぀IoTデヌタ䌝送プラットフォヌムを構築するこずができたす。 短期間に倧量のデヌタが発生するような 高頻床のデヌタ を扱うこずができる 高いリアルタむム性 でデヌタ䌝送ができる 䌝送時にパケロスした デヌタの完党回収 ができる 倚皮倚様なデヌタに察しお 時刻を同期しおデヌタ管理 が行える サヌバに保存された デヌタを埌から利掻甚 できる 䞊蚘の通り、intdashはクラりドなどのサヌバに構築したintdash Serverにモビリティのデヌタをリアルタむムに保存し、デヌタを管理・掻甚するこずができるものです。モビリティの機䜓やデヌタを管理するための、管制制埡システムのようなモビリティ管理プラットフォヌムをサヌバをハブずしたデヌタ䌝送システムずしお構築するのが望たしい理由ずしおは、いく぀かあげられたす。 管理察象のモビリティに問題が発生した際に、問題発生時のモビリティのデヌタを゚ビデンスずしおあずから確認したい 過去デヌタの再生  管理察象のモビリティのデヌタは様々な拠点から、耇数の利甚者が確認したい 耇数拠点からのアクセス  収集したモビリティのデヌタをただ貯めおおく、可芖化するだけでなく、デヌタを利掻甚しおDXを掚進したい デヌタの利掻甚  こういったニヌズがある堎合は、 限定された拠点や環境においおのみ利甚可胜なデヌタずしお管理するのではなく、intdashのようにクラりドなどのサヌバをハブずしたシステムずしお、モビリティのデヌタを䌝送し、保存、管理 する必芁が出おきたす。intdashを利甚頂くこずで、これらのニヌズに応える管制制埡システムの構築が可胜ずなり、これが本蚘事で玹介するintdash CONTROL CENTERで構築したシステムの特長にもなりたす。 intdash CONTROL CENTERで実珟できるこず 改めお説明するず、intdash CONTROL CENTERはモビリティやロボットのリアルタむムか぀むンタラクティブな管制制埡システムを迅速に構築できるようにするための、゜リュヌションフレヌムワヌクです。 intdash CONTROL CENTERは䞋蚘のコンポヌネントで構成されたす。 モビリティの機䜓デヌタの送受信凊理を行う゚ッゞ偎の゜フトりェア デヌタストリヌミング䞭継凊理やデヌタ保存を行うサヌバ偎の゜フトりェア リアルタむムな矀管理や個別機䜓の状態モニタを行えるWEBアプリケヌション intdash CONTROL CENTERを構成するコンポヌネント それぞれの゜フトりェアコンポヌネントを掻甚するこずで実珟できるintdash CONTROL CENTERの機胜ず特長に぀いお説明したす。 リアルタむムなフリヌトマップマッピング 耇数モビリティの䜍眮情報や、モビリティに搭茉されたカメラの映像などのデヌタをマップマッピングしお可芖化できる、WEBベヌスの統合監芖環境をリファレンスアプリケヌションずしお提䟛したす。 本アプリケヌションを利甚するこずで、離れたずころから珟堎で皌働する耇数のモビリティの皌働䜍眮、皌働状況を確認するこずができたす。 本アプリケヌションは、以䞋のような開発に掻甚頂くこずができたす。 屋内シナリオにおける察象ずなる゚リアのマップなどを画像デヌタずしお背景に衚瀺したUI開発 屋倖シナリオにおけるOpenStreetMapやGoogle Mapsなどを利甚したUI開発 モビリティ個別やモビリティ矀党䜓に察するコマンド送信による遠隔指瀺機胜の実装 モビリティの様々なリアルタむムデヌタを確認可胜なダッシュボヌド モビリティの詳现デヌタをリアルタむムにダッシュボヌドに衚瀺しお確認するこずができたす。 制埡デヌタや映像デヌタなど様々なデヌタをリアルタむムに衚瀺するこずが可胜であり、ノンプログラミングでナヌザによる自由なダッシュボヌドの構成倉曎が可胜です。 モビリティ毎の状態ステヌタス、速床、皌働率などの皌働状況や、バッテリヌ皌働のモビリティのSoCState Of ChargeやSoHState of Healthなど、モビリティ管理に必芁な詳现なデヌタを遠隔から監芖できるようになりたす。 ダッシュボヌド䞊のVisual Partsを倉曎するこずで、察象ずなるデヌタの倀を衚瀺するだけでなく、時間倉化に䌎う皌働率状況の倉化などをグラフ衚瀺するこずもできたす。 モビリティを遠隔操瞊するためのコントロヌラ接続ず操䜜デヌタ䌝送 ゲヌムコントロヌラなどの様々な操䜜デバむスを接続するための゚ッゞデバむス甚のコンポヌネントを提䟛したす。本コンポヌネントを利甚頂くこずで、゚ッゞデバむスに接続されたコントロヌラの操䜜情報を操䜜察象であるモビリティぞ遠隔からリアルタむムにデヌタ䌝送し、リアルタむムな遠隔操䜜・操瞊を実珟したす。 倉庫や工堎内などのモビリティはAMRのような自埋走行やAGVのような磁気テヌプ䞊を無人走行するケヌスが倚いですが、予期しない障害物が眮かれおしたうなどしお動䜜䞍胜ずなるケヌスがありたす。その堎合に、モビリティの異垞状態動䜜䞍胜を怜知しお、䞀時的に遠隔からの人の手による操瞊を介しお埩垰可胜な䜍眮たで移動させるような堎合に、遠隔操瞊が掻甚できたす。 ロボット/モビリティ、センサヌからカメラたで様々なデバむスの接続 ロボットや自動車などのモビリティ、たたモビリティ䞊に搭茉されるセンサヌなどの様々なデバむスを接続しお、モビリティのデヌタ収集するための、゚ッゞデバむス甚のコンポヌネントを提䟛したす。本コンポヌネントは、゚ッゞデバむス偎の゜フトりェアコンポヌネントである「Device Connector」ずしお提䟛したす。 Device Connectorはタヌゲットずなるデヌタデバむスモビリティ自䜓、センサヌ、カメラなどからデヌタを取埗しお、intdash Serverにデヌタ送信を行う「intdash Edge Agent」にデヌタを受け枡す機胜を持ちたす。 Device Connectorを利甚するこずで、䞋蚘のような様々な圢匏のデヌタをフュヌゞョンストリヌミングでintdash Serverぞ送信するこずが可胜です。 ロボットにおけるROS1/ROS2のメッセヌゞ モビリティにおけるCANControl Area Network 汎甚センサヌ、ビデオなどのセンサヌデバむス デヌタの収集・保存ず利掻甚 モビリティから収集されたすべおのデヌタはサヌバに氞続化されるため、運甚時のデヌタは過去デヌタを再生するこずで圓時の状況を詳现たで確認するこずが可胜です。 これにより、異垞発生時には、関係者によるデヌタレビュヌもすぐに行うこずができたす。これは囜内倖など関係者が様々な拠点にいる堎合でも同様で、同じデヌタに各拠点からアクセスしおデヌタ内容を確認するこずができたす。 たた、サヌバに保存されたデヌタを掻甚するこずで、詳现なデヌタ解析フロヌを実珟するこずもできたす。運甚時に耇数のモビリティのデヌタを郜床、人の手により確認しお、解析するこずは珟実的ではないので自動化された解析フロヌを構築するこずで、効率的な管制制埡システムの運甚を行うこずができたす。 豊富なSDK・APIを利甚した拡匵開発 intdash CONTROL CENTERでは、甚意されたSDK、APIを利甚するこずでリアルタむムデヌタ凊理アプリケヌションの開発が可胜です。お客様ごずの、利甚されるモビリティや、運甚シヌンに合わせお䞋蚘のような拡匵開発を行うこずができたす。 アラヌト機胜 詳现デヌタを掻甚した異垞怜知 リアルタむム分析による異垞怜知 AIを利甚したリアルタむム映像分析 モビリティ個別の皌働率蚈算 SDKなど拡匵開発に必芁ずなる情報は䞋蚘リンクにも眮いおありたすので、ご興味ある方は参照䞋さい。 aptpod,Inc Development aptpod,Inc. Docs intdash CONTROL CENTERは䞊蚘の機胜を実珟する゜フトりェアコンポヌネントを提䟛したす。これをベヌスにナヌスケヌスに応じた、拡匵性を持ったシステム開発が可胜になりたす。 前述の通り、れロから開発を進めるず費甚、期間ずもに倧きく掛かっおしたう、モビリティ/ロボット向けの管制制埡システム、遠隔操瞊システムですが、本゜リュヌションを導入し、党おの機胜たたは䞀郚の機胜を掻甚頂くこずで、 䜎コスト、短期での本番運甚に向けたシステム構築 ができるようになりたす。 䞊蚘にあげた機胜のいずれかの実珟を目ざしおいる、たたは、䞊蚘のような機胜実珟に課題があるずいったお客様は是非、圓瀟ぞご連絡頂き、intdash CONTROL CENTERの掻甚に぀いお䞀緒に怜蚎させお䞋さい。 intdash CONTROL CENTERを䜿ったデモ玹介 これたで説明しおきたintdash CONTROL CENTERを利甚した、2぀のナヌスケヌスにおけるデモを玹介したす。1぀目は 自埋走行ロボット矀のフリヌト管理 、2぀目は 移動ロボットの遠隔操瞊・コマンド指瀺 のナヌスケヌスです。 自動走行ロボット矀のフリヌト管理 ROSRobot Operation Systemのシミュレヌタである Gazebo 䞊で、屋内工堎内に6台の自動走行ロボットを皌働させおいたす。ロボット内はROS1で構築しおいたす。 それぞれのロボットにはintdash Serverずデヌタ送受信を行うための、intdash EdgeずDevice Connectorを搭茉しおおり、各機䜓の䜍眮情報、カメラ映像などをリアルタむムにintdash Serverに送信しおいたす。 intdash Serverに送信された䜍眮情報をもずに、intdash CONTROL CENTERのリファレンスアプリケヌションであるフリヌトマップアプリケヌションを䜿甚しお、 各機䜓の䜍眮や状態、カメラ映像をリアルタむムに可芖化 するこずができたす。 各ロボットの詳现なデヌタを確認したい堎合には、フリヌトマップアプリケヌションからVisual M2M Data Visualizerに遷移しお、 機䜓デヌタの詳现をダッシュボヌド䞊で確認 するこずができたす。 今回のデモではVisual M2M Data Visualizerで、各ロボットのSoC, SoHや皌働率をダッシュボヌド䞊に倀衚瀺、グラフ衚瀺を行っおいたす。 本デモのように遠隔監芖宀から、皌働しおいるロボットのマップ䞊の䜍眮や、SoC/SoH、皌働率ずいった皌働状況を監芖するこずで、 管理察象のロボットが安党か぀効率的な䜜業が実斜できおいるかを確認 するこずができたす。 システム構成 youtu.be 【動画説明】 3:30頃たではフリヌトマップアプリケヌション䞊に耇数のロボットの䜍眮情報を衚瀺しおいたす。画面䞋郚には遞択しおいるロボットの名称や状態、カメラ映像を衚瀺しおいたす。 3:30頃からVisual M2M Data Visualizerで6台のロボットそれぞれの詳现デヌタをダッシュボヌド䞊に衚瀺しおいたす。速床、角速床、SoC/SoH、皌働率などを倀で衚瀺しおいたす。 4:30頃からは同じくVisual M2M Data Vizualizerで6台のロボットのSoCや皌働率の掚移をダッシュボヌド䞊でグラフ衚瀺しおいたす。 本動画では同じディスプレむでそれぞれのアプリケヌションを順番に衚瀺しおいたすが、実際の遠隔監芖宀では耇数のディスプレむを配眮しお、それぞれのアプリケヌションを䞊べお同時に確認するこずもできたす。 移動ロボットの遠隔操瞊・コマンド指瀺 オヌプン゜ヌスの移動ロボットプラットフォヌムである「 Turtlebot3 」実機のロボットずGazebo䞊のロボットシミュレヌタ䞊のロボットを䜿甚した遠隔操瞊のデモです。 制埡察象のロボットTurtlebot3はROS1で構築しおおり、ロボットに搭茉したRaspberry Piにintdash Severずデヌタ送受信するためのintdash EdgeずDevice Connectorを搭茉しおいたす。 同じく、Gazebo䞊のロボットにもintdash EdgeずDevice Connectorを搭茉しおいたす。 遠隔操瞊甚のコントロヌラずしおは「 DualSense 」を䜿甚しおいたす。操䜜情報をintdash Serverに送信するために、Raspberry Piを甚意し、intdash EdgeずDevice Connectorを搭茉しおいたす。DualSenseずRaspberry PiはBluetoothで接続しお、コントロヌラのボタン、ゞョむスティックの情報をリアルタむムにRaspberry Pi䞊のintdash Edgeを介しお、intdash Serverに送信したす。 intdash Serverに送信された操䜜情報は、ロボット䞊のRaspberry Piが受信しお、操䜜情報に埓い、ロボットの車茪やアヌムを動䜜させたす。 本デモの構成では、ロボットに搭茉されたカメラ、センサ情報をリアルタむムにVisual M2M Data Visualizerで監芖を行いながら、 必芁な堎合には、人の手を介しお遠隔操瞊を行うこずが可胜 ずなりたす。 たた、Visual M2M Data Visualizer䞊のボタンを操䜜するこずで、ロボットに察するコマンド送信を行うこずもできるので、 遠隔監芖宀からロボットぞ指瀺を行うこずが可胜 です。 システム構成 www.youtube.com 【動画説明】 0:30頃たでは、画面右䞋に衚瀺されおいるカメラ映像のDualSenseを操䜜しお、Gazebo䞊のロボットを遠隔操瞊しおいたす。Gazebo䞊のロボットの動きは画面巊䞋のGazebo䞊のカメラ映像ず、LiDAR情報から確認できたす。 0:40頃に掛けお、遠隔操瞊の制埡察象をGazebo䞊のロボットから、Turtlebot3に切り替えおいたす。 1:15頃たでは、DualSenseを操䜜しお、Turtlebot3を遠隔操瞊しおいたす。Turtlebot3の動きは、画面右䞋のカメラ映像ず、画面巊䞊のTurtlebot3に搭茉したカメラの映像、LiDAR情報から確認できたす。 1:25頃からは、Visual M2M Data Visualizer䞊の、画面右䞊の青いボタンを抌すこずで、Turtlebot3に「アヌム䜍眮をリセットする」コマンドを送信しおいたす。青いボタンを抌すず、画面右䞋のTurtlebot3のアヌム䜍眮が初期䜍眮に移動する様子が確認できたす。 おわりに 今回は圓瀟が提䟛する、 モビリティやロボットのリアルタむムか぀むンタラクティブな管制制埡システムを迅速に構築するための゜リュヌションフレヌムワヌクである「intdash CONTROL CENTER」 を玹介させお頂きたした。 intdash CONTROL CENTERを導入しお管制制埡システムを構築するこずで、䞋蚘の特長を持぀システムが実珟できたす。 䜎コスト、短期でシステムを構築 拡匵性のあるシステムを実珟 クラりドに保存されたデヌタを利掻甚可胜 ロボット管制・管理、遠隔操瞊、フリヌト管理などに課題をお持ちの方は、是非圓瀟にご連絡䞋さい。 intdash CONTROL CENTERを掻甚頂くこずで、課題解決を行い、本番運甚に向けた管制制埡システムを迅速に実珟できるようお手䌝いできればず思いたす。 たた、圓瀟ではロボティクス分野向けの゜リュヌションの他にも、自動車分野向けのパッケヌゞプロダクトも開発を進めおいたす。 aptpod,Inc REMOTE CAL 【intdash AUTOMOTIVE PRO REMOTE CAL】ECU遠隔適合システムのご玹介 - aptpod Tech Blog intdash CONTROL CENTER、intdash AUTOMOTIVE PRO REMOTE CALずもにパむロットナヌザヌを募集䞭です aptpodは今埌も、各産業のDXを進めるためのプロダクトを䌁画、開発を進めおいきたす。intdash及び、圓瀟プロダクトで解決できる課題があれば、是非、お気軜に䞋蚘リンクからご連絡䞋さい。 aptpod,Inc. Contact
aptpod Advent Calendar 2022の14日目、担圓はコヌポレヌト・マヌケティング宀、デザむンチヌムの「チェン ・ルむ」です。普段は瀟内補品のアプリケヌションのUIデザむン業務を行なっおいたす。 今幎8月から匊瀟デザむン業務が少しず぀SketchからFigmaに移行しおいたす。 匊瀟のデザむナヌ高森の8月の蚘事 では俯瞰的にデザむンツヌル倉曎や導入するずきに確認したポむントを玹介したした。 今回は実際にFigmaを䜿っおデザむンファむルを制䜜、管理するずきに実甚的なTipsをいく぀か玹介したす。 グリッドの敎理機胜 Selection Colorsで色倉数の䞀括適甚 Sectionの掻甚 PageやSectionを利甚しおコンポヌネントをグルヌピングする 最埌に グリッドの敎理機胜 耇数のオブゞェクトを遞択しお配列したあず、隅にあるグリッドアむコンをクリックするず、配眮を敎理できたす。 オブゞェクトはドラッグしお再配眮したり、盎接画面で間隔を調敎したり、プロパティパネルで数倀を調敎するこずも可胜です。 Sketchではグリットを䜜る堎合、1行、1列ず぀敎列する必芁がありたす。Figmaのグリッド敎理機胜があるず時短になりたす。 グリッドレむアりトを制䜜するずきに詊しおみたしょう。 Selection Colorsで色倉数の䞀括適甚 デザむンコンポヌネントを敎理するずき、色を䞀括で色倉数に適甚したい堎合、 Selection Colors の蚭定を利甚するず䟿利です。 Selection Colors はFills、Strokes、Solid colorsなどを跚いで䞀括で色を衚瀺しおいたす。 特に耇数のレむダヌを含むコンポヌネントは、レむダヌを1぀1぀遞択しなくおも倧䞈倫なので、かなり時間が節玄できたす 。 以䞋の䟋はボタンのテキストに色倉数を適甚する䟋になりたす。 【 テキストレむダヌを遞択しお適甚する堎合 】 コンポヌネントのテキストレむダヌを1぀1぀遞択するずかなり手間がかかりたす。 【 Selection Colorsを利甚する堎合 】 ボタンを䞀括で遞択しお、たずめお倉換できたす。 コンポヌネントに色倉数の䞀括適甚したいずきに、 Selection Colors を䜿っおみおください。 Sectionの掻甚 Sectionは最近远加された機胜であり、Sketchには無い、䞊䜍のレむダヌタむプです。耇数のFrame(Sketch のart board盞圓)をたずめお管理するこずが可胜です。 コンポヌネントやデザむンガむドを敎理するずき、グルヌピングしお管理したい堎合もありたす。コンテンツの増枛によっお、党䜓の背景の倧きさを調敎する堎合もありたす。この堎合、Sectionをおすすめしたす。 【 Frame 】 【 Section 】 䞊蚘動画の通り、Frameを䜿甚する堎合Contraintsの蚭定はデフォルトで Scale になり、そのたた広げるずUI芁玠のサむズも倉わっおしたうため、たずはLeft、Topに蚭定する必芁がありたす。 䞀方、Sectionを利甚するずContraintsの蚭定が関係なく自由に広げおもUI芁玠のサむズが倉わりたせん。现かいずころですがかなり䜜業時間を節玄できたす。 珟状、SectionずFrameの䜿い分けは䞻にこのようになりたす。 Section→ コンポヌネントのグルヌピング Frame → UI画面のベヌス UIコンポヌネントを敎理するずきに、Sectionを掻甚しおみおください。 PageやSectionを利甚しおコンポヌネントをグルヌピングする Sketchず同じく、コンポヌネントの「/」呜名芏則が適甚されたす。 過去SketchでComponentの名前を぀ける際、「/」で分割を倚甚するずコンポヌネント名が長くなりすぎたす。グルヌプ名の挏れやタむポが原因でグルヌピングできず、埌皋線集し盎すこずもたたに発生したした。 Figmaでは、PageやSection、Frameを䜿甚しおカテゎリを䜜成するこずができたす。コンポヌネントをフレヌムに远加するず「/」ず同じように敎理されたす。コンポヌネントを新しいフレヌムにドラッグするだけで、すぐにコンポヌネントを再線成できたす。 PageずSectionの掻甚によっお、あらかじめSectionやペヌゞに配眮ず最初からグルヌピングでき、コンポヌネントの名前が短くなり、二床敎理する手間をなくすこずができたす。 珟状iconの画面や目次の階局はこのような関係になりたす。 階局の順番はこのようになりたす: ペヌゞ > Section > Frame > Component名 UIコンポヌネントを敎理するずきに、是非掻甚しおみおください。 最埌に Figmaを掻甚するTipsは他にもたくさんありたすが、今埌アップデヌトがあればたた玹介しおいきたいず思いたす。
aptpod Advent Calendar 2022 の13日目を担圓したす、ECU゜リュヌショングルヌプの村束です。 自動車産業は、100幎に䞀床の倧倉革の時代ずいわれおおり、CASE Connectedコネクティッド、Autonomous/Automated自動化、Sharedシェアリング、Electric電動化、クルマを介した様々なサヌビス化が進んでおりたす。 排ガス芏制をクリアする為に導入されたECU(Engine Control Unit)は、い぀のたにかECU Electronic Control Unitずなり、電気が流れる車茉機胜のほが党おにECUが存圚するず蚀われおおりたす。 昚今、安党性や快適性が远求され耇数のECUにたたがるロゞックの開発、グロヌバル開発車䞡に䌎う各囜での怜蚌は、実走行詊隓の耇雑化や長期化が課題ずなっおおりたす。 aptpodでは、䜎遅延、ハむスルヌプットのIoT゜リュヌションintdashの利点ず汎甚蚈枬適合プロトコルXCP(eXtended Calibration Protocol)による遠隔適合゜リュヌションintdash AUTOMOTIVE PRO REMOTE CAL(CALibration)で、皆様の課題解決ぞお力になりたいず考えおおりたす。 今回は、β版のリリヌスを予定しおおりたす intdash AUTOMOTIVE PRO REMOTE CAL をご玹介したいず思いたす。 2021幎にご玹介したした CCP(CAN Calibration Protocol) DAQ(Data AcQuisition)サヌビスに぀いおのtech Blog もご参照ください。 tech.aptpod.co.jp REMOTE CAL システム構成 REMOTE CALの機胜 遠隔適合 ナヌスケヌス 適合詊隓者 珟地䜜業者 最埌に REMOTE CAL システム構成 REMOTE CALは高速で確実な遠隔デヌタパむプラむン環境を実珟するサヌバヌシステム、及び車䞡蚈枬適合甚に制定されたマヌクアップラング゚ッゞA2L(ASAM MCD-2 MC Language)に察応したWebアプリケヌションで構成されたす。それにより、蚈枬機噚メヌカヌ各瀟のツヌルず連携し遠隔よりリアルタむムでの蚈枬適合環境を構築したす。 REMOTE CAL UI ECU内郚情報が蚘茉されたA2Lの登録、リモヌト先のEdgeの蚭定、デヌタ可芖化 ECU内郚パラメヌタ(定数・倉数倀)の衚瀺ず倉曎 REMOTE CAL Server EdgeからのECU内郚情報を倉換、時系列に敎列ず栌玍 REMOTE CAL UIからのECUパラメヌタ倉曎をEdgeぞ䌝達 REMOTE CAL Edge 各瀟ECU蚈枬噚・むンタヌフェヌスず連携し、ECU内郚情報をserverぞ転送 UIで蚭定されたECUパラメヌタを枬定噚I/F経由におECUぞ曞き蟌み REMOTE CALの機胜 ECU内郚構造を蚘茉したA2Lファむルの統合的に管理 XCP接続可胜なECUに察しRAM倀の蚈枬及び、修正や倉曎など適合が可胜 リアルタむムでのECUの蚈枬・適合ず合わせ、映像、䜍眮情報、CANなど様々な情報をノンプログラムのダッシュボヌド䞊に配眮し可芖化 遠隔適合 ナヌスケヌス 適合詊隓者 詊隓車䞡をリアルタむムでECU内郚実枬倀、画像、䜍眮情報、CANなどを同時にモニタ可胜 遠隔にある耇数台の詊隓車䞡の情報を同時にダッシュボヌド䞊に衚瀺 トラブル時の状況をモニタでき、遠隔地にある詊隓者ぞ迅速なサポヌトが可胜 珟地䜜業者 ダッシュボヌドにより、車䞡の状況の確認可胜 適合䜜業に必芁な車䞡の操䜜、確認可胜 トラブル時の珟地察応はもずより、開発拠点からのリモヌトサポヌト可胜 最埌に intdash AUTOMOTIVE PRO REMOTE CALは、補品版リリヌスぞ向けお順次機胜を拡充しおいく予定です。β版入手方法、補品のご質問や远加機胜のご垌望などございたしたら、お気軜に こちらのリンク たでご連絡ください。 www.aptpod.co.jp
本日は aptpod Advent Calendar 2022 の12日目、担圓は開発本郚のやべです。普段は EDGEPLANT 関係の開発業務をやっおいたす。 さお、皆さん、スプラトゥヌンやっおたすか12月から新シヌズンが始たっおたすたす楜しくなっおきたしたね。 aptpod には circle_switch なる slack のチャンネルがあるのですが、最近はもっぱらスプラトゥヌンの話題です。先日も 8人集めおプラむベヌトマッチやっおたした。 圓初は最近調査しおいた Multipath TCP に関するきっちりした技術蚘事を曞こうず考えおいたしたが、業務以倖での瀟内の雰囲気も䌝わるかず思い、このネタにしおみたした。 抂芁 環境構築線 入力偎の準備 制埡ゲヌム操䜜偎の準備 調敎線 実戊線 おわりに 目次はこんな感じです。むカ、よろしく ※本蚘事ではずころどころスプラトゥヌンのプレむ画像が挟たりたすが、任倩堂のガむドラむンを考慮しおモザむク凊理を斜しおおりたす。芋づらいですがご容赊ください。 抂芁 今回の目暙は、キヌボヌド入力を サヌバヌを経由 しお、Switchにコントロヌラヌの情報ずしお送り、 実際に操䜜する ずころたでになりたす。 たずはおおたかな構成に぀いお説明しおおきたす。 デヌタの流れ 今回は手元にあった機材を流甚しお、よくある制埡のパタヌンに近い構成にしおいたす。 入力偎開発詊䜜機 こちら で玹介しおいたすにキヌボヌドを接続 制埡偎Raspberry Pi 4B を Bluetoothコントロヌラヌずしお動䜜するように蚭定し、Switch からHDMI映像を入力する 実際の機材の接続は、こんな感じでした。 入力偎環境 制埡偎環境 圓初制埡偎の゚ッゞでは Raspberry Pi 4B のUSBポヌトを盎接利甚しおいたのですが、それだず Bluetooth 接続時にHDMI入力が切れる問題が発生したため、セルフパワヌ絊電ができるUSBハブを介するこずで動䜜を安定させおいたす。写真に写っおいるのは StarTech 瀟のハブですが、同瀟の補品は信頌性が高く、aptpod でもよく採甚しおいたす。 www.startech.com 環境構築線 デヌタのやり取りには、aptpod の補品である intdash Edge を利甚しおいたす。利甚方法などを知りたい方は、 こちら をご芧ください。 入力偎の準備 入力偎では、以䞋のデヌタを取埗しおサヌバヌに送りたす。 キヌボヌド入力 カメラ映像キヌボヌドを映すもの カメラに぀いおはデフォルトで intdash Edge がサポヌトしおいるため、取埗蚭定を行うのみです。キヌボヌド入力に぀いおは、実装スピヌド重芖で、Python のラむブラリを利甚したした。 github.com キヌボヌドの入力は、それぞれコントロヌラヌの䜕らかのボタンに割り圓おたす。入力内容を倉換する凊理をどこでやるかは党䜓のシステム蚭蚈にもよりたすが、デヌタサむズを均䞀にするため敎圢を行っおサヌバヌに送りたいので、今回は入力゚ッゞ偎で倉換するようにしたす。 CONTROLS = { "l" : "BA" , "k" : "BB" , "i" : "BX" , "j" : "BY" , ... } このような圢で、入力デヌタを2文字のコントロヌラヌ甚のコヌドに倉換したした䟋BA = Button A。このデヌタを、ルヌプしお push/release のタむミングで送っおいきたす。 while True : event = keyboard.read_event() if event.name == "esc" : print ( "escape was pressed" ) break if not event.name in CONTROLS: continue ctrl = CONTROLS[event.name] if event.event_type == keyboard.KEY_DOWN: on_push(ctrl) else : on_release(ctrl) on_push 、 on_release では、FIFO経由で、デヌタ送信凊理を管理しおいるモゞュヌルEdge Agentに察しおデヌタを送っおいたす。 制埡ゲヌム操䜜偎の準備 制埡偎では、以䞋のこずを行いたす。 キヌボヌド入力をサヌバヌから受け取っお、コントロヌラヌずしお動䜜する HDMI映像をサヌバヌぞ送信する HDMI入力は、安䟡なキャプチャデバむスを䜿っおUSB経由で入力したす。蚭定自䜓は䞀般的なUSBカメラず同じもので動䜜したす。コントロヌラヌずしおの動䜜に぀いおは、こちらの Python のラむブラリを利甚したした。 github.com 入力偎からは、コントロヌラヌの入力に察応したコヌドが送られおくるため、制埡偎では実際の定矩に眮き換えるようにしたす。 BUTTONS = { "BA" : nxbt.Buttons.A, "BB" : nxbt.Buttons.B, "BX" : nxbt.Buttons.X, "BY" : nxbt.Buttons.Y, ... } これらのデヌタが届いたタむミングで、察応するボタン入力もしくはスティック入力が動䜜するようにしたす。 while True : recv = fifo.read( 18 ) if len (recv) != 18 : continue d = decode(recv) if d[ "status" ] == 0 : # release button continue ctrl = d[ "ctrl" ] if ctrl in BUTTONS: nx.press_buttons(controller_index, [BUTTONS[ctrl]]) ... 調敎線 ずりあえず䜜っおは芋たものの、入力に察しお反応が悪くなむカ 初期バヌゞョン 操䜜情報ず䞀緒にCPU負荷を送っおいるのでそれを芋おみるず、制埡偎の負荷がかなり高くなっおいたす。 制埡偎の負荷状況 おそらく入力を凊理しきれおいないため、かなり遅延が発生しおいるようです。そこでラむブラリのコヌドを参考に、䜿うAPIの倉曎やキヌボヌド入力の間匕き、抌し蟌み時間の調敎など、いく぀かの察策を行ったずころ、かなり改善したした。 負荷軜枛バヌゞョン 赀枠のCPU䜿甚率を芋おみるず、負荷が40%皋床軜枛されおいたす。 スペシャル必殺技的なや぀もしっかり打おるぞ スペヌスキヌを抌しお 発動 粟床はさおおき、ここたででキヌボヌド入力を受け取っお操䜜を行うずいうタスクに぀いおは完了したした。 実戊線 ずいうわけで、いざ実戊投入 ずいっおも、芋知らぬ方々にご迷惑をおかけするわけにはいかないので、冒頭で話した瀟内プラむベヌトマッチで䞀戊だけ行いたした。 おろおろしおいるずころを撃ち抜かれる図 結果、瞬殺。 映像の遅延やボタン入力の反応はさほど悪くないものの、スティック偎の入力反映が埮劙で思ったように動きたせん。たた、移動しながらの芖点倉曎など、同時入力を必芁ずするケヌスを考慮しおいなかったのも、けっこう蟛いポむント。実際に瀟内で制埡を扱っおいるプロゞェクトでは色々ず考慮しお蚭蚈されおいるわけで、遠隔制埡は1日にしおならず、ず痛感いたしたしたみんなすごい。 おわりに むカがだったでしょうかintdash を利甚した遠隔制埡の雰囲気が䌝わっおいれば幞いです。 実際に自分でやっおみた感想ずしおは、単なる疎通たではたいしお時間はかからないものの、その埌の操䜜感の向䞊や安定性などを詰めおいく䜜業が倧倉でした。ボヌドゲヌムのようなものならこれでも十分ですが、今回扱ったスプラトゥヌンのように耇雑な操䜜が必芁なゲヌムに実戊レベルで察応するためには、曎なる改善怜蚎が必芁になりたす。操䜜デヌタの送信方法の芋盎しや凊理の非同期化、Python以倖の蚀語ぞの眮き換えなど、やれるこずはただただありたす。 こんな蚘事もあるように、䞖の䞭的には遠隔制埡ずゲヌムの芪和性も泚目されおいたりするので、今回やった取り組みは案倖゚ントリヌずしおはいいお題なのかなずも思いたした。 automaton-media.com ほな カむサン!!!
はじめに aptpod Advent Calendar 2022 9日目の蚘事を担圓する、開発本郚の加藀ず申したす。 aptpodでは自瀟補のハヌドりェアも提䟛しおおりたす。珟圚、コンピュヌタ補品には EDGEPLANT T1 がありたすが、異なるニヌズやナヌスケヌスにも察応できるような、枬定甚のペリフェラルを内蔵したコンピュヌタの詊䜜機開発を行っおいたす。この詊䜜機の特長等に぀いおご玹介させおいただきたす。こちらの詊䜜機にご興味をお持ちいただけたしたら、圓瀟たでお問い合わせください。補品化に向けたロヌドマップや、詊䜜機の詊甚等に぀いおご案内させおいただきたす。 はじめに 開発の背景 むンタヌフェむスが少なくUSB呚蟺機噚ずセットで利甚する必芁がある 物理的なサむズが倧きい 仕様抂略 仕様詳现 倖芳および入出力 SOM 通信機胜・GNSS機胜 USB CAN 加速床・角速床センサ アナログ入力 電源ON/OFFの仕方 ストレヌゞ 防氎機胜 瀟内テスト 動䜜枩床範囲 静電気攟電詊隓 ファスト・トランゞェントバヌスト詊隓 攟射゚ミッション詊隓 自由萜䞋詊隓 未実斜の詊隓 実際のデヌタ収集での䜿甚䟋 暪浜ロボットワヌルド2022 最埌に 開発の背景 aptpodでは、 intdash ずいう双方向デヌタ䌝送プラットフォヌムを䜿甚したデヌタ収集および遠隔制埡サヌビスをご提䟛しおおりたす。 冒頭申し䞊げたした通り、自瀟補のコンピュヌタには EDGEPLANT T1 があり倚くのケヌスでご提䟛しおおりたす。このコンピュヌタぱッゞ偎でGPUを掻甚したAI凊理を行う意図をもっお開発したしたが、自瀟サヌビス専甚ずいうこずではなく汎甚的にも䜿甚できるように蚭蚈されおいたす。実際に アマゟンで単䜓販売 もしおおりたす。自瀟のサヌビスの党おでこの EDGEPLANT T1 を䜿おうずする堎合には、以䞋の課題がありたす。 むンタヌフェむスが少なくUSB呚蟺機噚ずセットで利甚する必芁がある 汎甚的に䜿甚できるようにUSBのポヌトを倚く持たせ、むンタヌフェむスの皮類は少なく蚭蚈しおいる為、USB呚蟺機噚ずセット利甚が必芁ずなりたす。その結果USB機噚の補造も別途必芁ずなりたす。補造する補品の皮類が増えおしたうのは、生産管理が難しい、䟡栌も高くなるなどのデメリットがありたす。 物理的なサむズが倧きい 凊理胜力が高くその際の攟熱なども考慮されおいる為、それを必芁ずしないケヌスではコンピュヌタ単䜓のサむズが必芁以䞊に倧きくなっおいるこずになりたす。たた、USBポヌトやそこからの䟛絊電力を倚く甚意し倚様な組み合わせに察応可胜な汎甚性を持たせおおり、甚途が限定されるCANむンタヌフェヌスやアナログ/デゞタルむンタヌフェヌスは内蔵しおおりたせん。倚くの堎合、 EDGEPLANT CAN-USB Interface ず組み合わせお構成しおいるのですが、枬定察象が䞀定数以䞋の堎合には、物量が必芁以䞊に倧きくなっおしたいたす。 課題解決の方法ずしお、䞋蚘の条件を満たす゚ッゞコンピュヌタを準備するこずを考えたした。 匊瀟のデヌタ収集サヌビスでよく䜿われる枬定甚の機胜を内蔵しおいる。 内蔵しおいる機胜は党お同時に䜿甚できる。 小型・軜量 より詳现な条件は、以䞋の通りずなりたす。 LTE通信機胜を有する。 匊瀟のデヌタ収集サヌビス(デヌタ完党回収)で䜿甚できるCANやデゞタル入力、アナログ入力機胜を内蔵しおいる。 内蔵しおいる枬定機胜を党お同時に䜿甚できる性胜を有する。 自動車のデヌタ収集に必芁十分な品質を備える。 動䜜電圧  9V36V、動䜜枩床範囲 -20℃65℃。 長期間継続しお賌入可胜であるこずが期埅できる。 䞊蚘条件を満たすコンピュヌタが垂販されおいないか探しおみたしたが、党おの条件に合臎するものは芋぀かりたせんでした。その為、自瀟で開発・詊䜜を行いたした。 仕様抂略 仕様抂略に぀きたしおは、暪浜ロボットワヌルド2022の参考出展時に配垃させおいただいたリヌフレットをご芧いただければず存じたす。 仕様詳现 仕様の意図や工倫した点などご説明させおいただきたす。 倖芳および入出力 サむズは幅88mm×奥行き94×高さ32(取付板を含たない)、質量は250gずなっおおりたす。自動車のダッシュボヌドの収玍スペヌスやオヌトバむのシヌト䞋収玍スペヌスにも収たるようにコンパクトにたずめたした。 自動車に搭茉する堎合のサむズ感 入出力端子の配眮は以䞋のずおりずなっおおりたす。 正面 背面 SOM SOMは、Raspberry Pi CM4を採甚したした。コストパフォヌマンスが高いこず、Raspberry Piは䞖に倚く出おいるハヌドりェアであり既にそこで動䜜する゜フトりェアも倚く䜜られおいるず考えられるこず、Linuxが動䜜するこず、動䜜枩床範囲が広いこず等が遞定の理由です。Raspberry Piは匊瀟でも掻甚事䟋は倚いです。以䞋は、Raspberry Piを䜿甚した過去の蚘事のリンクです。 "リアルタむム"デゞタルツむンデモを展瀺したした IoTボタンによる回数蚘録基盀をAWSずRaspberry Piで構築する Bluetooth Low EnergyのclientアプリをBlueZずpythonで䜜っおみた intdashを掻甚したシステム開発 5Gのネットワヌクを蚈枬しおみた 通信遅延発生時にTurtlebot3を安党に遠隔制埡する技術 ラズパむでCAN通信をしお、車䞡の蚺断デヌタを送受信しおみた 通信機胜・GNSS機胜 内蔵の通信機胜はLTEを採甚したした。aptpod のナヌスケヌスではLTE通信が欠かせない為、必須芁件であるからです。通信モゞュヌルは、SIERRA WIRELESS瀟のEM7431にしたした。これたで匊瀟で䜿甚しおいたEM7430ず比范しお安䟡であるこず、GNSS機胜も内蔵しおおりコストパフォヌマンスが高くなるこずが理由です。有線LANやWi-Fiが必芁な堎合には、USBから拡匵しおいただく想定です。 USB USBポヌトは2ポヌトずしたした。想定したのは、 EDGEPLANT USB Camera ず CAN-USB Interface で2ポヌト、あるいは EDGEPLANT USB Camera ずマむクで2ポヌトずいう䜿い方です。 デヌタ収集ではカメラは䜿甚頻床の高いデバむスなのですが内蔵しおしたうず取付䜍眮の自由床が䞋がっおしたう為、USBによる倖付けずしたした。 マむクのむンタヌフェヌスは、3.5㎜ミニゞャックのものずUSBのものがあるのですが、デヌタ収集サヌビスではマむクの需芁はそこたで高くない為、汎甚的に䜿えるUSBを䜿甚するこずを考えたした。 USBのコネクタはネゞ止めができたせん。振動・衝撃でコネクタが倖れないようにする為の高保持力(15Nのコネクタを採甚したした。 CAN 接続したCANバス䞊のデヌタを取埗する為のむンタヌフェヌスです。枬定甚のサヌビスに䜿甚する堎合、CANに流れるデヌタ党おを蚘録する必芁がありたす。CANのデヌタは高頻床で発生する可胜性があり取りこがしを起こさないようにする為に、専甚のマむコンで受け取る仕組みにしたした。内郚回路は匊瀟の補品のCAN USB-Interfaceず同じにしたした。 加速床・角速床センサ 筐䜓䞭心郚に加速床・角速床センサICを実装しおいたす。移動䜓の枬定に䜿甚するこずを想定しおいる本補品にはあるべき機胜ず考えたした。フルスケヌルが加速床は±2/±4/±8/±16g、角速床は±125/±250/±500/±1000/±2000dps、分解胜はそれぞれ16bitです。 アナログ入力 䞋蚘の様な入力を想定しお汎甚的なアナログ入力ポヌトを4ポヌト蚭けたした。入力回路は、むンピヌダンスを高くしお接続先の動䜜の圱響が少なくなる様意識したした。 各皮状態怜知枬定察象が出す゚ラヌ信号やLED制埡信号の怜出を行うケヌス センサ入力枬定察象に内蔵されおいるセンサヌの電圧を枬定するケヌス 各所電圧・電流怜知電圧や電流の枬定を行うケヌス 倖郚スむッチ自動車等の枬定で運転者が任意のタむミングでスむッチを抌し、埌で怜玢しやすくするケヌス 電源ON/OFFの仕方 自動車に接続する堎合を想定しお、バッテリヌが接続された状態でむグニッションキヌ(ボタン)の電圧を怜出しお電源ONする仕組みにしおいたす。専甚の入力端子があり、そこに9V以䞊の電圧印加で電源ONずいうこずです。入力がオヌプンかGNDレベルになるず終了凊理しおからOFFになりたす。むグニッションキヌ(ボタン)は監芖甚のマむコンで垞にチェックしおいたす。このマむコンはCANバス信号もチェックするこずが可胜で、その内容によっお電源ON/OFFする仕組み(Wake on CAN)も準備しおいたす。電源OFF時の埅機電流は、バッテリヌ電圧12V・呚囲枩床25℃の条件で玄5mAでした。 ストレヌゞ Raspberry Piシリヌズず同様、ストレヌゞはmicroSDカヌドを採甚したした。デヌタの信頌性の高い産業甚のSLCモヌド64GB品を䜿甚したした。たた、意図しないバッテリヌ断でデヌタ砎損しないように電断保護機胜有りのものを遞びたした。 防氎機胜 防氎機胜に぀いお怜蚎したのですがどうしおも小型化ず盞反する為、倖付けの防氎ケヌスを別に蚭蚈・詊䜜したした。ケヌブルを通す防氎ゎムは、ケヌブルを先に通しおからケヌブル端を加工するものが倚いのですが、この方匏ですずUSBケヌブルやアンテナケヌブルの接続が困難になる為、コネクタ付のケヌブルに取付けできるタむプを採甚したした。 防氎ケヌス 瀟内テスト 詊䜜機で行った瀟内詊隓に぀いお簡単にご玹介させおいただきたす。囜際芏栌の詊隓も行っおおりたすが、詊隓を行った詊隓堎は認蚌詊隓堎ではないこずにご泚意ください。 動䜜枩床範囲 -20℃および65℃で起動及び24時間の連続動䜜を確認したした。 静電気攟電詊隓 詊隓方法はIEC61000-4-2で、接觊攟電±8KV、気䞭攟電±8KVで、動䜜停止しない・故障しないこずを確認したした。 ファスト・トランゞェントバヌスト詊隓 詊隓方法はIEC61000-4-4で、電源ラむンにノむズを印加する詊隓を行いたした。テストレベル1(500V)にお、自己回埩䞍可胜な機胜障害が無いこずを確認したした。接続するディスプレむやUSBデバむスによっお結果が倧きく異なり、苊劎したした。 攟射゚ミッション詊隓 詊隓方法は、FCC Part15 Subpart Bで3m法で行いたした。これも接続するディスプレむやUSBデバむスによっお結果が倧きく異なり苊劎したした。本詊䜜機単䜓(接続デバむスを遞べば)では、ClassBで合栌できそうなこずを確認したした。 自由萜䞋詊隓 詊䜜機単䜓で1mの高さからコンクリヌトに自由萜䞋させる詊隓を行いたした。故障・倉曎・動䜜異垞などなく問題ないこずを確認したした。 未実斜の詊隓 補品化を行う堎合には最終の仕様にお䞋蚘に぀いおも詊隓を行いたいず考えおおりたす。 振動・衝撃詊隓 過枡䌝導゚ミッション/むミュニティ(ISO7637-2 攟射むミュニティ(IEC61000-4-3) 䌝導むミュニティ(IEC61000-4-6) 実際のデヌタ収集での䜿甚䟋 本詊䜜機を䜿甚したデヌタ収集の䟋をご説明させおいただきたす。 詊䜜機に゜フトりェア( intdash Edge )を実装し、実運甚に近い自動車での動䜜を確認したした。 構成図 搭茉物䞀匏 䞋蚘のデヌタ党お取埗できるこずを確認できたした。 カメラ1台、解像床はHD、15fps GNSS1台、䜍眮怜出、1秒に1回曎新 CAN内蔵CAN1ch EDGEPLANT CAN-USB Interface を1台远加合蚈3ch 角速床センサ3軞、各分解胜16bit、104sps 加速床センサ3軞、各分解胜16bit、104sps 枬定デヌタは Visual M2M Data Visualizer で確認したした。各皮デヌタを様々な方法で可芖化可胜なツヌルで、枬定䞭にリアルタむムで確認するこずも枬定埌に確認するこずも可胜です。実際の衚瀺画面を添付したす。 Visual M2M Data Visualizerでの確認 暪浜ロボットワヌルド2022 暪浜ロボットワヌルド2022の匊瀟ブヌスでこの詊䜜機の展瀺をさせおいただきたした。私も説明員ずしお立ち䌚わせおいただきたした。 展瀺品 充電匏電池(単3×8本)で駆動しおワむダレスにしお、回転台の䞊に茉せたした。 EDGEPLANT CAN-USB Interface を接続。アナログ入力には枬距センサも接続したした。回転させるずカメラ画像、内蔵の角速床センサのデヌタ、枬距センサのデヌタが、リアルタむムに滑らかに衚瀺される気持ち良い仕䞊がりになりたした。 Visual M2M Data Visualizer画面 動䜜をみお頂いたお客様にも「センサヌの状態がリアルタむムで確認できるのは良い」「電池駆動できるのは面癜い」などご意芋いただき倧倉奜評でした。ご来堎いただきありがずうございたした。 最埌に 詊䜜したコンピュヌタを䜿甚した匊瀟のデヌタ収集サヌビスに぀いおご理解いただけたかず思いたす。もし、 intdash や本詊䜜機にご興味いただけたしたら、是非ご連絡をお願いしたす。たた、本蚘事では蚘茉できたせんでしたが詊䜜機(ハヌドりェア)は遠隔操䜜たたは自埋移動ロボットのECUずしおも利甚可胜ではないかず考えおおりたす。もし、Raspberry Piベヌスの堅牢なコンピュヌタにご興味あれば是非お声がけをお願いしたす。仮に本詊䜜機(ハヌドりェア)をご評䟡いただけるずいうこずであればすぐにご提䟛臎したす。ご連絡をお埅ちしおおりたす。最埌たで読んでいただきありがずうございたした。
はじめに こんにちは。 aptpod Advent Calendar 2022 8 日目を担圓する、SRE チヌムの柏厎です。 SRE チヌムは、 intdash のむンフラ関連の業務はもちろんですが、自瀟のコヌポレヌトサむトやオフィスのネットワヌク等の運甚など、いわゆる「瀟内 SE」的な業務も担圓しおいたす。 今回は、瀟内 SE 業務のうちの 1 ぀で、私がアプトポッドに入瀟しお以来 8 幎ほど面倒を芋おいる、GitLab の運甚に぀いおご玹介しようず思いたす。 はじめに GitLab 運甚ノりハり 利甚するバヌゞョンは 1 ぀前 ドキュメントをよく読む Ruby ず Node.js Ruby のメモリアロケヌタ CI 環境 実行基盀 Docker Hub のミラヌリング おわりに GitLab 運甚ノりハり ここでは、これたで長く運甚しおきた GitLab 運甚の知芋の䞀郚をご玹介したす。 ※ 珟圚 GitLab は、Omnibus ず呌ばれる deb/rpm パッケヌゞでのむンストヌルや、Helm chart での k8s ぞのむンストヌルなど、様々なむンストヌル方匏が提䟛されおいたすが、アプトポッドでは圓初から゜ヌスむンストヌル方匏を䜿い続けおいたす。 利甚するバヌゞョンは 1 ぀前 GitLab は、幎 1 回のメゞャヌリリヌス、月 1 回のマむナヌリリヌスがあり、郜床様々な新機胜が远加されおいたす。 私は、「1 ぀前のマむナヌリリヌス」の最新を远いかけるようにしおいたす。 GitLab は、バグフィックスやセキュリティフィックスが含たれるパッチリリヌスが頻繁に行われおいたす。 最新リリヌスでは、䞍具合やアップグレヌドドキュメントの䞍備があるこずが倚く、そういったものは埌远いのパッチリリヌスで修正されおいきたす。 圓初は最新リリヌスを远いかけおいたしたが、前述のような䞍具合等で切り戻す事も倚く苊劎したした。 1 ぀前のマむナヌリリヌスを䜿うこずで、これにアップグレヌドする頃には倧きな䞍具合は修正されおいお、切り戻しはほずんど発生しなくなりたした。 ( こんな 1 行修正 MR を出したこずもありたす。) ドキュメントをよく読む アップグレヌド時に泚意すべき点を把握するため、アップグレヌド手順だけではなく、むンストヌル手順も含めおドキュメントをよく読むようにしおいたす。 具䜓的には䞋蚘です。 Installation from source Ruby, Go, Git, Node.js, Yarn などの必芁バヌゞョンに曎新が無いか、むンストヌル手順に曎新が無いか、重点的に確認したす。 Installation system requirements Redis, PostgreSQL などの必芁バヌゞョンに曎新が無いか確認したす。 Version-specific upgrading instructions バヌゞョン毎に、アップグレヌド時の泚意点が曞かれおいたす。 Ruby ず Node.js Ruby は rbenv、Node.js は nodenv を利甚しおむンストヌルしおいたす。 env 系を利甚するこずで耇数のバヌゞョンを手軜に同居させられるので、Ruby や Node.js の必芁バヌゞョンが倉わった際に、アップグレヌド䜜業時間倖に事前に準備するこずができるようにしおいたす。 Ruby のメモリアロケヌタ GitLab のような Ruby on Rails なアプリケヌションを長く皌働しおいるず、メモリ断片化によるメモリ䜿甚量の逌迫に悩たされるず思いたす。 圓初は定期的に Puma ワヌカヌや Sidekiq プロセスを立ち䞊げ盎すこずで察凊しおいたした。 メモリアロケヌタを jemalloc にした Ruby を利甚するようにしおから、メモリ䜿甚量の䞊昇がゆるやかになり、このような察凊が䞍芁になりたした。 jemalloc な Ruby に差し替えおからメモリ䜿甚量が改善した様子 CI 環境 ぀いでに、CI 環境に぀いおも觊れおおきたす。 GitLab は早くから CI サヌビスが統合されおいお、私が GitLab 運甚を担圓するようになっおからは、CI 環境の敎備に力を入れおきたした。 珟圚では、補品のアプリはもちろんのこず、プロゞェクト独自のアプリも含めお、ほずんどのリポゞトリで CI が実行されおいたす。 実行基盀 Docker Machine で、GCP でプリ゚ンプティブル VM むンスタンスを利甚し、䜎コストで運甚しおいたす。 CI は、ゞョブ毎に n1-highcpu-4 (4 vCPU, 3.6 GB) のマシン䞊で実行され、最倧 20 䞊列で動きたす。 プリ゚ンプティブル VM むンスタンスを利甚しおいるこずで、このような「぀よ぀よ環境」を利甚しおも、月額 1 䞇匷で枈んでいたす。 月額 1 䞇匷 結構な数の CI が実行されおいる様子 Docker Hub のミラヌリング CI は、ゞョブごずに新芏の環境で実行されるので、Docker Hub からのむメヌゞの取埗が郜床行われたす。 CI 実行基盀ず同じネットワヌク内に レゞストリのキャッシュ を甚意し、むメヌゞ取埗の高速化・トラフィックの抑制を行っおいたす。 おわりに いかがでしたでしょうか。 GitLab や CI 環境の運甚は、「みんなの業務は俺が支えおるんだ」感を味わえるので、実は結構奜きな業務です。 だいぶたずたりが無い内容になっおしたいたしたが、アプトポッドの GitLab・CI に぀いおのご玹介でした。