工場の点検では、計器の前に到着できても、数値が読めるとは限りません。遠すぎたり、角度が悪かったりすると、撮った画像をそのまま記録しても点検を完了できないからです。
四脚ロボットGo2が画像を確認し、読取条件を満たさなければ撮影位置を変えるデモを作りました。タンク・配管・ポンプを配置した架空の工場をIsaac Sim上に作り、移動と計器の読み取りをつないでいます。Isaac Simは、ロボットの動き・接触・カメラ画像を計算できるシミュレーターです。
見どころは、読めないときの次の行動
今回は、文字盤が斜めに見える位置から撮影しました。画像から推定した傾きが採用条件の50°以下を満たさない、または目盛りを十分に照合できないため、最初の5枚は記録に使いませんでした。NGという判定を受けて、Go2が正面側の撮影位置へ移動します。移動先の候補はあらかじめ設定してあります。
撮り直しでは5枚中5枚が条件を満たし、0.917〜0.920 MPaの値が得られました。採用した値を小さい順に並べた中央の値、0.919 MPaを記録しています。MPaは圧力の単位です。仮想の計器の設定値0.920 MPaとの差は、この試行では0.001 MPaでした。

今回採用したVisual SLAMは、SLAMの一種
今回は、カメラの画像を使うVisual SLAMを採用しました。SLAMは、ロボットが動きながら「自分はどこにいるか」と「周囲に何があるか」を同時に推定する技術の総称です。Visualは「画像を使う」という意味で、SLAMとは別の技術ではありません。違いを比べる相手は、レーザーで物までの距離を測るLiDAR(ライダー)を使ったSLAMです。
工場の通路なら、Visual SLAMは「棚の角や配管の模様が画像の中でこれだけ動いた」という変化から、自分の移動を推定します。LiDAR SLAMは「壁や棚までの距離と、その並び方」を手掛かりにします。
| 比較する点 | Visual SLAM:カメラ | LiDAR SLAM:レーザー |
|---|---|---|
| メリット | カメラは一般に小型・低価格。撮った画像を、文字盤の読み取りなどにも利用できます。 | 物までの距離を直接測れます。暗い場所でも、壁や棚の形を測りやすい方式です。 |
| デメリット | 暗所・逆光・画像のぶれや、模様の少ない壁では、同じ特徴を追い続けることが難しくなります。 | 光が戻りにくい材質や、形の手掛かりが少ない場所では測定・位置推定が難しくなります。特に3D LiDARは費用や搭載スペースが増えやすくなります。 |
| 距離の求め方 | 画像から計算します。一般的なカメラ1台の方式では、実際の「何m」を決める別の手掛かりが必要です。今回の2台構成は、左右の見え方の差から距離を求めます。 | センサーがレーザーで距離を測ります。ただし、測定誤差がなくなるわけではありません。 |
今回の構成の利点は、移動のための位置推定と、計器の点検に、同じカメラの画像を使えることです。ただし、現在地を求める処理と文字盤を読む処理は別です。また、今回は固定照明の仮想工場での検証であり、暗所や反射、実機の振動にどこまで対応できるかは未確認です。LiDARより優れていることを比較試験で示したものではありません。
SLAMは現在地と周囲の地図を求める部分です。目的地までの経路を考える処理や、障害物を避ける処理は別に必要です。今回使うのは画像による位置推定で、通路と撮影位置の候補は事前に設定しています。未知の工場を自律巡回できる、という意味ではありません。方式の違いはMathWorksの公式解説、センサーによる制約はNVIDIAの公式解説も参照できます。
Go2のLiDARも使える? 組み合わせるとどうなる?
実機のGo2には、4D LiDARが標準搭載されています。2026年10月2日時点のUnitree公式ページではL2を案内しています。その距離データを使うLiDAR SLAMも選択肢です。ただし、独自のソフトを接続する際は、対象機の構成や、センサーのデータを取り出せる開発機能を確認する必要があります。
今回の仮想Go2では、LiDARのデータを移動の位置推定に使っていません。追加した左右カメラとcuVSLAMを使った検証です。実機にLiDARが付いていることと、今回のデモで利用したことは別です。LiDAR SLAMとVisual SLAMを組み合わせると、精度や、位置を見失いにくさが改善する可能性があります。例えばカメラが暗さや画像のぶれで追跡しづらいときはLiDARの距離情報を頼り、LiDARで形を区別しにくい場所では画像の模様を手掛かりにする、という補い方です。こうした複数のセンサー情報をまとめて判断する処理を「センサーフュージョン」と呼びます。
ただし、2つの推定位置を単純に平均すればよいわけではありません。カメラとLiDARがいつ、機体のどこから、どの向きに測ったかを合わせ、それぞれの測定がどの程度信頼できるかも扱う必要があります。取付位置の補正や時刻合わせが不正確だと、かえって位置のずれが増えます。計算量と実装・調整の手間も増えます。
今後は、同じ仮想工場で「カメラのみ」「LiDARのみ」「両方を併用」を比較し、正しい位置からのずれ、位置を見失った回数、処理にかかる時間を測ることが検証候補です。今回、併用による改善を実測したわけではありません。複数方式で弱点を補う考え方はNVIDIAの解説、カメラ・LiDAR・IMUの統合例はStereo Visual Inertial LiDAR SLAMの研究にあります。
カメラの画像は、移動と点検の両方に使う
Go2の前側上部に、2台の仮想カメラを6.5cm間隔で追加しました。前方を見る小さなカメラのペアです。左右で少しずつ違う画像を撮る構成を、ステレオカメラと呼びます。Go2標準カメラの仕様を再現したものではありません。
なぜ、カメラが2台必要なのか
今回2台使う目的は、景色の中の点までの距離を求め、Go2が何m動いたかを推定するためです。指を顔の前に立て、左目と右目を交互に閉じると、指の位置が左右にずれて見えます。カメラも同じで、近い物ほど左右の画像でのずれが大きく、遠い物ほど小さくなります。
このずれを「視差」と呼びます。2台の間隔6.5cmとレンズの設定値が分かっているので、同じ点の視差から距離を計算できます。その点が次の画像でどこへ動いたかを追い、ロボット自身の位置や向きを推定します。
カメラ1台でもVisual SLAMはできます。ただ、画像だけを使う一般的な単眼方式では、実際に何m動いたかという尺度を決める別の手掛かりが必要です。今回は、間隔の分かっている2台を使うステレオ方式を選びました。
役割も分けています。移動のための位置推定には左右両方の画像、文字盤の読み取りには左の画像だけを使います。文字盤の読み直しに2台の画像を合成するわけではありません。視差と距離の関係はOpenCVの公式解説でも確認できます。
移動にはcuVSLAMを使います。Visual SLAMとは、画像から自分の位置と周囲の特徴の位置を同時に推定する技術です。今回はその位置推定を使い、あらかじめ決めた通路内の目標位置に近づくよう速度を調整しました。動画下部の左右映像に重なる緑の点は、cuVSLAMがそのフレームで追跡した画像の特徴です。右側の線は画像から推定した移動の軌跡で、工場の地図ではありません。
脚を動かす部分には、Isaac LabのGo2用の公開済み歩行方策を使いました。方策は、速度の指示や関節・姿勢の情報から脚の動きを決める学習済みモデルです。当社による追加学習はしていません。機体の位置を直接書き換えて動かすアニメーションでもありません。
シミュレーターが持つ正確な機体位置は検証記録と撮影用カメラに使い、通路上の位置制御には渡していません。ただし、歩行方策は関節や機体姿勢の情報も使います。ロボット全体を画像だけで制御している、という意味ではありません。
生画像・補正画像・OK/NGを並べて見る
動画右上には、Go2が今撮っている文字盤を拡大した生画像と、それを正面に補正した画像を並べました。斜めに写ると丸い文字盤が細く見えます。目盛りや文字を基準画像と照合し、対応が十分に取れた場合だけ形を補正します。照合できないときは、補正できたような画像を表示しません。
FRAME OK/NGは、その1枚に対する判定です。NGのときは「斜めすぎる」「目盛りを照合できない」など、そのフレームの理由を表示します。右下の記録OK/NGは、5枚を確認した結果です。移動中に1枚だけ数値が読めても、すぐに点検完了にはしません。
実装にはSIFT(画像の照合に使う特徴を探す処理)とRANSAC(誤った対応を除いて画像の変換を求める処理)を使いました。斜めに見える場合にも照合できるよう、基準画像を横に縮めた見え方も用意しています。
今回の採用条件は、十分な照合点があり、画像から推定した傾きが50°以下で、針の向きが判別できることです。さらに5枚中3枚以上で値が得られ、最大と最小の差が0.015 MPa以内なら、その中央値を記録します。50°は今回設定した品質管理の条件で、AIが学習した自信度ではありません。傾きは、カメラの正面方向と文字盤の正面方向がなす角度です。画像の対応点とカメラの設定値から求め、シミュレーター内の正解の向きは渡していません。
今回は特定の文字盤の画像処理です。言葉で指示するVLAや、画像を文章で解釈する大規模モデルは使っていません。圧力の設定値は採点にだけ使い、画像を読む処理には渡していません。
以前の試作で行った比較
以下は今回の角度による撮り直し動画より前の試作記録です。撮影位置を固定した場合との比較と、針の値を変えた確認を行いました。今回の撮り直しではカメラ画面・経路・照合処理と角度の採用条件を変更しているため、下表を新しい動画の結果や成功率としては扱いません。
| 試行 | 最初の位置 | 次の位置 | 記録値 / 設定値 |
|---|---|---|---|
| 撮り直しなし | 0/5枚を採用 | 移動しない | 読取未完了 / 0.920 |
| 撮り直しあり・比較用 | 0/5枚を採用 | 3/5枚を採用 | 0.916 / 0.920 MPa |
| 針の位置を変更・低い値 | 0/5枚を採用 | 5/5枚を採用 | 0.421 / 0.420 MPa |
| 針の位置を変更・高い値 | 0/5枚を採用 | 5/5枚を採用 | 1.319 / 1.320 MPa |
| 初回公開時の動画 | 0/5枚を採用 | 5/5枚を採用 | 0.916 / 0.920 MPa |
各行は1試行です。比較用と最終確認では、正確なカメラ位置を検証用に記録する方法を修正しました。画像による制御や読取条件は同じです。値が得られなかったフレームも含めて記録し、成功率や実機の精度を示す集計としては扱っていません。
できたことと、現場に向けて残っていること
今回できたのは、既知の通路での画像による位置推定、学習済み方策による歩行、読取を保留する判定、その結果をきっかけとする移動・再撮影・数値の記録です。映像用の動きを別に作り直さず、同じ試行のカメラ画像と判定記録を使っています。
| まだ確認していないこと | 理由と次に必要な検証 |
|---|---|
| 未知の工場での自律巡回 | 通路と撮影位置の候補を事前設定しているため。地図の保存・再利用、経路計画、障害物への対応が必要です。 |
| 最適な撮影位置の自動探索 | 次の候補へ移るルールまでの実装です。見え方や移動コストから候補を生成・比較する処理は未実装です。 |
| 反射・汚れ・暗所・別の計器 | 今回は1種類の文字盤と固定照明です。今回の撮り直しは斜めの見え方と採用条件の確認です。反射を認識して避けた結果ではありません。 |
| 実機のGo2での点検 | 理想的な仮想カメラでの試験です。実際のレンズ、露出、振動、通信遅延や歩行誤差を含む確認が必要です。 |
工場へ持ち込む前に、何を試すか
このような環境では、計器をどの高さに置くか、カメラをどこに載せるか、どこからなら読みやすいか、読めなかったらどう報告するかを、実機試験の前に比較できます。次は照明・遮蔽物・計器の配置を変え、どの条件で読み取りが崩れるかを調べます。
仮想環境を作り、ロボット制御と画像処理をつなぎ、試行ごとの結果を確かめるところまで取り組んでいます。工場巡回や設備点検について、まずシミュレーションで確認したいことがあれば、ご相談ください。
着想の参考・使用技術
観察の結果に応じて撮影位置を見直す考え方は、Tuomistoらの「Automating on-site object inspection with a quadruped robot and BIM」を参考にしました。同研究はSpot・BIM・3D LiDARなどを使う構成です。今回のGo2・Visual SLAM・計器読取は当社が組み合わせた別の試作であり、同論文の再現実験ではありません。
実行環境はIsaac Sim 5.1、Isaac Lab(ロボットの学習・動作試験用ソフト)、RSL-RL 3.0.1、cuVSLAMのPython APIです。Isaac Labは試験条件をそろえるため、使用するコードを特定の更新時点に固定し、検証中は更新していません。工場は当社制作の架空環境です。記事では当社が取得した映像・結果を掲載し、第三者のロボットモデルや学習重みは配布していません。