目的: evis(MS-Human-700 筋骨格ヒューマノイド)の視覚機能部品を作るにあたり、
「OSS/ROS2 で足りるものは再発明しない」を厳守するための仕分け。各知覚モジュールを
実際に ROS2 ロボティクスで使われている標準スタックに照らし、
reinvents(既存 OSS の numpy 再実装=作る価値薄い)/ genuine gap(OSS に無い=自作の価値)
を判定する。ROS2 エコシステムは実地調査で確認(末尾 Sources)。
把持(箸で食べる): stereo_rectify → disparity_sgm → depth_to_points + normals_from_depth
→ pcseg.remove_ground/euclidean_clusters → ppf.find_surface_pose(6-DoF) → grasp
歩行(hillco): depth → terrain.elevation_map → slope/step_edges/foothold_candidates
→ locomotion.support_polygon + com_support_margin
| module (ops) | 役割 | ROS2/OSS 標準(実使用) | 判定 |
|---|---|---|---|
camera (21) |
投影/backproject/PnP/essential/rectify | image_geometry(PinholeCameraModel)+ OpenCV(solvePnP/findEssentialMat/stereoRectify/Rodrigues) |
reinvents OpenCV |
stereo (11) |
census/SGM disparity, depth | image_pipeline/stereo_image_proc(SGBM)、depth_image_proc、NVIDIA Isaac ROS(deep stereo) |
reinvents image_pipeline |
pcseg (17) |
RANSAC 平面/球/円柱, clustering, OBB, curvature | PCL(SACSegmentation/EuclideanClusterExtraction/MomentOfInertiaEstimation)via perception_pcl |
reinvents PCL |
pointcloud |
normals, voxel, outlier, FPFH | PCL(NormalEstimation/VoxelGrid/StatisticalOutlierRemoval/FPFHEstimation) |
reinvents PCL |
registration |
ICP, Kabsch, FPFH register | PCL(IterativeClosestPoint/SampleConsensusPrerejective)/ Open3D |
reinvents PCL/Open3D |
ppf |
Drost PPF 6-DoF | OpenCV surface_matching(ppf_match_3d); frontier = deep(FoundationPose/GraspNet) |
reinvents OpenCV(frontier は deep) |
terrain (13) |
elevation/foothold/traversability/slope/step_edges | ANYbotics grid_map + elevation_mapping + leggedrobotics traversability_estimation(ANYmal=脚ロボ標準。elevation/foothold quality/traversability を layer で保持) |
reinvents grid_map(脚ロボ核心) |
locomotion (5) |
support polygon, COM margin, gait phase | ROS2 標準の知覚 pkg なし。脚ロボ制御(OCS2/TOWR/WBC)側に散在 | partial gap(制御寄り) |
odometry (5) |
RGBD/PnP odometry, umeyama, trajectory | rtabmap_ros / ORB-SLAM3 / robot_localization |
reinvents rtabmap |
sceneflow (7) |
FoE, TTC, looming, scene flow | OpenCV optical flow(疎/密)。scene-flow/TTC は研究寄りで ROS 標準薄い | partial gap(niche) |
features (5) |
Harris/FAST, descriptors, match | OpenCV(goodFeaturesToTrack/FAST/ORB/BFMatcher) |
reinvents OpenCV |
pose (3) |
silhouette 姿勢記述 | (シルエット由来の簡易記述子。直接の OSS 対応薄い) | partial gap(簡易) |
occupancy |
grid, inflate, clearance | nav2 costmap_2d |
reinvents nav2 |
evis が視覚を「使う」完全ループは perceive → plan → execute。後半こそ重要部品で、ここは ROS2 に厚い標準がある。
知覚(stereo/PCL)→ 6D grasp pose(GPD/AnyGrasp)→ MoveIt2 MTC(grasp pose→IK→衝突回避軌道
→ move-to-pick/grasp/lift/place)→ ros2_control(position/velocity/effort I/F)→ ロボット
| 部品 | 役割 | ROS2/OSS 標準(実使用) | 判定 |
|---|---|---|---|
| 動作計画/IK/衝突回避 | grasp pose → 衝突なし軌道 | MoveIt2(OMPL/STOMP/Pilz、150+ ロボ実績)+ MoveIt Task Constructor(pick&place ステージ化) | use OSS(自作不可) |
| grasp 生成 | cloud/RGB-D → 6-DoF grasp 候補+スコア | GPD / AnyGrasp / SuctionNet(MoveIt 連携)、frontier=deep(GraspNet) | use OSS |
| ハード抽象/低レベル制御 | position/velocity/effort I/F | ros2_control(MoveIt2/Nav2 の土台。humanoid の ROS2 露出はほぼここ経由) | use OSS |
| ナビゲーション | 地図/経路/障害回避 | Nav2(costmap_2d/BT) | use OSS(evis は当面不要) |
| 把持力/force-closure | antipodal grasp 品質 | GraspIt!/grasp(Ferrari-Canny) |
partial(既存 grasp op で足りる) |
MoveIt2/ros2_control は URDF の位置/トルク関節+標準グリッパ前提。evis は MuJoCo の 700 筋(Hill 型)駆動で、
箸(グリッパでない道具)を articulated hand で扱う。→ MoveIt2 が出す関節軌道を 700 筋の活性で実現する層が OSS に存在しない。
この「関節計画 → 筋活性実現」= QP / static optimization / WBC(あなたが既に持つ reference_wbc_qp_control の QP+osqp)こそ、
OSS/ROS2 では埋まらない evis 固有部品。視覚(6D pose)→ MoveIt2(軌道)→ 筋実現(QP) の最後の一段が本当のギャップ。
これまでの表はアルゴリズム(PCL/OpenCV/grid_map/MoveIt2)偏重で、「見て確かめる」層が抜けていた。 HDevelop は 2D 画像/BLOB の表示に強いが、Physical AI の視覚は 3D 表示(点群・depth・6D pose 軸・TF 木・ grasp マーカー・elevation map)が必須。ここの ROS2 標準が RViz2。Fullseye Studio(HDevelop 風 IDE)が 把握・試験・実用に使えるための 可視化の忠実性/機能参照であり、アルゴリズムではないので再実装対象ではなく Studio 露出(F6)の要件地図として使う。
| 対象 | 何を見る | ROS2/OSS 標準(実使用) | fullseye での扱い |
|---|---|---|---|
| 点群 | PointCloud2 の色/強度/法線 | RViz2 PointCloud2 display / Open3D viewer | Studio の 3D viewer 要件参照(F6)。再実装せず既存 viewer 連携 or 薄い描画 |
| depth/画像 | depth colormap, camera image | RViz2 Image/DepthCloud、image_view |
Studio の 2D パネル(HDevelop 相当)を 3D と併置 |
| 6D pose/grasp | pose 軸・grasp 姿勢マーカー | RViz2 Pose/PoseArray/InteractiveMarker、moveit_visual_tools |
ppf/grasp op の出力を Studio で軸表示(evis デバッグ核心) |
| 座標系 | TF 木・リンク相対姿勢 | RViz2 TF display | camera↔hand↔object の姿勢連鎖確認 |
| 地形 | elevation/traversability layer | RViz2 + grid_map_rviz_plugin | terrain op(hillco 歩行)の foothold 可視化 |
★含意: Studio = HDevelop(2D 画像処理 IDE)+ RViz2(3D 知覚可視化)の融合が正しい姿。evis の視覚デバッグ (6D pose が合っているか/点群セグメントが妥当か/foothold が地形に載っているか)は 3D 可視化なしに honest に 判定できない。統一 I/F の各 op は メタ(F3)に「Studio でどう描くか」(2D image / point cloud / pose / grid_map layer) を持たせ、Studio が RViz2 相当の描画を自動選択できる構造にする。
Fullseye = あらゆる画像処理/視覚アルゴリズムを「スキル」として保持し即使える包括的ライブラリ(専用 HALCON)。 HALCON 級網羅が目標。Fullseye Studio(HDevelop 風)= 機能を把握・試験・仕事で使う IDE。 → この doc の ROS2 調査は 「作るな」ではなく「正しく・網羅的に・実用語彙に忠実に作る」ための忠実性/優先度の参照。
reference_wbc_qp_control)。OSS/ROS2 に無い最重要部品。sim.MuJoCo / sim.Gazebo / sim.IsaacSim を同じ動詞
(.frames() / .depth() / .intrinsics() / .ground_truth())で置き、視覚 op が入力元を問わず組めるようにする。
役割の違い =
sensor_msgs)
と直結 = 統一 I/F を ROS2 実配線で検証できる入口。sim.*.ground_truth(): 真の 6D pose・segmentation・接触)と突き合わせて正直に測る
評価器(CONSUMER_APPLICATIONS.md の線)。Isaac Sim の合成データ+ランダム化が評価データ源として本職。app 固有。★統一インターフェース原則(ユーザー確定 2026-08-17): 中身が自作 numpy でも OSS ラッパでも、使う側は fullseye の同一 I/F(facade の op 命名・シグネチャ規約・Studio 露出・honest gate/メタ)で呼べること。 OSS を使う所も素の PCL/OpenCV を直接叩かず、fullseye 統一 I/F の裏に薄いアダプタとして収める(= HALCON が 多様な内部実装を単一 operator 語彙で提供するのと同じ)。「スキルとして即使える」の実体はこの一貫 I/F。
fullseye の目的(包括的・即使用・スキル化・統一 I/F・Studio 実用)に沿うと、2 つの線を並行:
要確認: 今夜の自律作業を (A) 知覚 op の網羅+Studio 露出 に充てるか、(B) evis 筋駆動ブリッジ/sim 視覚 に充てるか。 汎用 CS(algo-c)には戻さない。