<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hri on M1KE BL0G</title><link>https://www.m1ke.org/tags/hri/</link><description>Recent content in Hri on M1KE BL0G</description><generator>Hugo -- gohugo.io</generator><language>ja-jp</language><copyright>mike</copyright><lastBuildDate>Tue, 13 Oct 2026 16:30:00 +0900</lastBuildDate><atom:link href="https://www.m1ke.org/tags/hri/index.xml" rel="self" type="application/rss+xml"/><item><title>ROS4HRIの仕組み</title><link>https://www.m1ke.org/p/ros4hri%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF/</link><pubDate>Tue, 13 Oct 2026 16:30:00 +0900</pubDate><guid>https://www.m1ke.org/p/ros4hri%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF/</guid><description>&lt;img src="https://www.m1ke.org/p/ros4hri%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF/ros4hri.png" alt="Featured image of post ROS4HRIの仕組み" /&gt;&lt;h2 id="背景"&gt;背景&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ROS上でHRI（Human-Robot Interaction、人間とロボットのインタラクション）を扱うための標準規格・OSSツール群であるROS4HRIについて、仕組みを整理する&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="ros4hriとは"&gt;ROS4HRIとは&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ROS REP-155として仕様化された、ROS 1・ROS 2の両方に対応する、人間の認識・表現のための標準的なメッセージ型・規約&lt;/li&gt;
&lt;li&gt;「ロボットが共有空間の中で人間を意味のある形で認識・解釈・応答できるようにする」ことを目的とした、オープンソースのリソース群&lt;/li&gt;
&lt;li&gt;EUの資金援助を受けて開発されており、Apache 2.0ライセンスで公開されている&lt;/li&gt;
&lt;li&gt;REP-155自体は、骨格追跡・顔認識・音声処理といった分野で、ROSエコシステムの他の分野ほど広く受け入れられた共通インターフェースがなかったという問題意識から作られている&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="rep-155の仕様"&gt;REP-155の仕様&lt;/h2&gt;
&lt;h3 id="4種類のid"&gt;4種類のID&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;REP-155は、人物を4種類のIDで表現する&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ID&lt;/th&gt;
&lt;th&gt;永続性&lt;/th&gt;
&lt;th&gt;割り当て元&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Person ID&lt;/td&gt;
&lt;td&gt;永続的なUUID。セッションを超えて同一人物を表す&lt;/td&gt;
&lt;td&gt;顔認識・声認識など、人物識別が可能なノード&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Face ID&lt;/td&gt;
&lt;td&gt;非永続的。顔がフレームから外れると無効になる&lt;/td&gt;
&lt;td&gt;顔検出ノード&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Body ID&lt;/td&gt;
&lt;td&gt;非永続的。骨格が追跡されている間だけ有効&lt;/td&gt;
&lt;td&gt;骨格追跡ノード&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Voice ID&lt;/td&gt;
&lt;td&gt;非永続的&lt;/td&gt;
&lt;td&gt;音声分離ノード&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="トピックの名前空間"&gt;トピックの名前空間&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;全てのHRI関連トピックは&lt;code&gt;/humans/&lt;/code&gt;以下に置かれ、&lt;code&gt;faces&lt;/code&gt;・&lt;code&gt;bodies&lt;/code&gt;・&lt;code&gt;voices&lt;/code&gt;・&lt;code&gt;persons&lt;/code&gt;・&lt;code&gt;interactions&lt;/code&gt;という5つのサブ名前空間に分かれる&lt;/li&gt;
&lt;li&gt;例えば&lt;code&gt;/humans/faces/&amp;lt;faceID&amp;gt;/cropped&lt;/code&gt;のように、個々の実体（顔など）ごとの名前空間を持つことで、下流のノードが情報を追加していける&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="なぜ単一のfaceメッセージではなく分割するのか"&gt;なぜ単一のFaceメッセージではなく分割するのか&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;仮に全ての顔情報をまとめた汎用的な1つのFaceメッセージを発行する設計にすると、1つのノードが顔に関する全ての情報を先に統合しなければならなくなり、モジュール性が損なわれる&lt;/li&gt;
&lt;li&gt;そのため、切り出し・表情認識・ランドマーク検出といった個々の情報を、別々のノードがそれぞれのサブトピックに発行する設計になっている&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="座標フレーム"&gt;座標フレーム&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;REP-120の慣習に従い、以下のような座標フレームが定義されている&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;フレーム&lt;/th&gt;
&lt;th&gt;原点&lt;/th&gt;
&lt;th&gt;軸の向き&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;face_&amp;lt;faceID&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;セリオン（両目の中間点）&lt;/td&gt;
&lt;td&gt;x軸が前方、z軸が頭頂方向&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;body_&amp;lt;bodyID&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;腰の中間点&lt;/td&gt;
&lt;td&gt;x軸が前方、z軸が頭方向&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gaze_&amp;lt;faceID&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;face_&amp;lt;faceID&amp;gt;&lt;/code&gt;と同じ位置&lt;/td&gt;
&lt;td&gt;z軸が視線方向&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;person_&amp;lt;personID&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;追跡中はface/bodyフレームと同じ位置、そうでなければ最後に確認された位置&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;person_&amp;lt;personID&amp;gt;&lt;/code&gt;フレームの位置は、&lt;code&gt;location_confidence&lt;/code&gt;（位置の確信度）によって扱いが変わる。追跡中は1.0、最近見えていた場合は1.0未満、既知だが一度も観測されていない場合は0になる&lt;/li&gt;
&lt;li&gt;人体のキネマティックモデルは、頭・胴体・肩・肘・手首・腰・膝・足首など15個の主要なリンクで構成され、URDFが&lt;code&gt;/human_description_&amp;lt;bodyID&amp;gt;&lt;/code&gt;としてパラメータサーバーに動的に読み込まれる&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="視線の非対称性"&gt;視線の非対称性&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;「AがBを見ている」という関係は、必ずしも「BもAを見ている」ことを意味しない。視線（Gaze）は送り手（sender）と受け手（receiver）の非対称な関係として表現される&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="kinematic-model-of-the-human"&gt;Kinematic Model of the Human&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/ros4hri%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF/frames.png"
width="1057"
height="729"
srcset="https://www.m1ke.org/p/ros4hri%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF/frames_hu_aa30b165b4aca593.png 480w, https://www.m1ke.org/p/ros4hri%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF/frames_hu_b9d0f50b0fcd0085.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="144"
data-flex-basis="347px"
&gt;&lt;/p&gt;
&lt;p&gt;The main 15 links defined on the human body are presented in the above diagram. Frames orientations and naming are based on REP-103 and REP-120. Right: render of the reference URDF model of the human body in rviz.&lt;/p&gt;
&lt;h2 id="全体像-ros4hriエコシステムの構成"&gt;全体像: ROS4HRIエコシステムの構成&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;公式サイト（ros4hri.github.io）で確認すると、ROS4HRIは単なるメッセージ規約ではなく、「知覚→人物統合→インタラクションのスキル→UI・可視化」という一連の流れを、パッケージ群として提供するエコシステムになっている&lt;/li&gt;
&lt;li&gt;大まかな処理の流れは以下の通り&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;順序&lt;/th&gt;
&lt;th&gt;段階&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;知覚（Perception）&lt;/td&gt;
&lt;td&gt;カメラ・マイクから、顔・身体・声を個別に検出する&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;人物統合（Person Fusion）&lt;/td&gt;
&lt;td&gt;検出された顔・身体・声を、hri_person_managerが1人の人物として統合する&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;インタラクションスキル（Interaction Skills）&lt;/td&gt;
&lt;td&gt;統合された人物の情報を使って、発話・注視・ナビゲーション・動作・把持といった、標準化された「スキル」をロボットに実行させる&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;UI・可視化（UI &amp;amp; Visualization）&lt;/td&gt;
&lt;td&gt;開発中のデバッグや、ロボットの対話用インターフェースの構築に使う&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="パッケージのカテゴリ一覧"&gt;パッケージのカテゴリ一覧&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;公式サイトでは、パッケージは大きく5つのカテゴリに分けられている&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;カテゴリ&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;コアライブラリ・メッセージ&lt;/td&gt;
&lt;td&gt;hri_msgsなど、全体の基盤となるメッセージ定義・ライブラリ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;知覚（Perception）&lt;/td&gt;
&lt;td&gt;顔・身体・音声の検出と、それらを人物に統合する機能&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;インタラクションスキル&lt;/td&gt;
&lt;td&gt;発話・ナビゲーション・操作など、ロボットに実行させる標準化された動作&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;可視化・デバッグ&lt;/td&gt;
&lt;td&gt;開発時の確認・デバッグ用のツール&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UI構築&lt;/td&gt;
&lt;td&gt;対話的なユーザーインターフェースを作るための部品&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;下の表では、「知覚」と「インタラクションスキル」をさらに細かいサブカテゴリ（知覚（顔）・知覚（身体）など）に分けて示している&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="カテゴリ別パッケージ一覧"&gt;カテゴリ別パッケージ一覧&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;カテゴリ&lt;/th&gt;
&lt;th&gt;パッケージ&lt;/th&gt;
&lt;th&gt;役割&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;コアライブラリ・メッセージ&lt;/td&gt;
&lt;td&gt;hri_msgs&lt;/td&gt;
&lt;td&gt;顔・身体・声・人物に関する標準メッセージ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;コアライブラリ・メッセージ&lt;/td&gt;
&lt;td&gt;hri_actions_msgs&lt;/td&gt;
&lt;td&gt;HRIのIntent（意図）に関する標準アクション&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;コアライブラリ・メッセージ&lt;/td&gt;
&lt;td&gt;human_description&lt;/td&gt;
&lt;td&gt;人体の標準URDFモデル&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;コアライブラリ・メッセージ&lt;/td&gt;
&lt;td&gt;libhri（C++）／pyhri（Python）&lt;/td&gt;
&lt;td&gt;ROS4HRIトピックを簡単に扱うためのライブラリ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;知覚（顔）&lt;/td&gt;
&lt;td&gt;hri_face_detect&lt;/td&gt;
&lt;td&gt;顔検出・ランドマーク・視線&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;知覚（顔）&lt;/td&gt;
&lt;td&gt;hri_emotion_recognizer&lt;/td&gt;
&lt;td&gt;表情認識&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;知覚（顔）&lt;/td&gt;
&lt;td&gt;hri_face_identification&lt;/td&gt;
&lt;td&gt;顔の識別・認識&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;知覚（身体）&lt;/td&gt;
&lt;td&gt;hri_body_detect&lt;/td&gt;
&lt;td&gt;身体に関する知覚機能&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;知覚（音声）&lt;/td&gt;
&lt;td&gt;asr_vosk&lt;/td&gt;
&lt;td&gt;音声特徴の抽出・発話区間検出&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;人物追跡・統合&lt;/td&gt;
&lt;td&gt;hri_face_body_matcher&lt;/td&gt;
&lt;td&gt;顔と身体のマッチング&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;人物追跡・統合&lt;/td&gt;
&lt;td&gt;hri_person_manager&lt;/td&gt;
&lt;td&gt;人物への統合（Mr. Potato algorithm）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;人物追跡・統合&lt;/td&gt;
&lt;td&gt;hri_engagement&lt;/td&gt;
&lt;td&gt;エンゲージメント（関わりの度合い）の追跡&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;インタラクションスキル&lt;/td&gt;
&lt;td&gt;Communication&lt;/td&gt;
&lt;td&gt;発話・対話（Say、Chat、Ask）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;インタラクションスキル&lt;/td&gt;
&lt;td&gt;Interaction&lt;/td&gt;
&lt;td&gt;社会的インタラクション（LookAt、LookFor、LED、Expressions）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;インタラクションスキル&lt;/td&gt;
&lt;td&gt;Navigation&lt;/td&gt;
&lt;td&gt;ナビゲーション（Navigate、Waypoints、Zones）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;インタラクションスキル&lt;/td&gt;
&lt;td&gt;Motions&lt;/td&gt;
&lt;td&gt;動作実行（関節・直交座標系の軌道）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;インタラクションスキル&lt;/td&gt;
&lt;td&gt;Manipulation&lt;/td&gt;
&lt;td&gt;操作（Grasp、Place、ハンド制御）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;開発ツール&lt;/td&gt;
&lt;td&gt;rpk&lt;/td&gt;
&lt;td&gt;スキル・タスク・アプリケーションのパッケージ生成器&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;開発ツール&lt;/td&gt;
&lt;td&gt;architecture_schemas / architecture_tools / std_skills&lt;/td&gt;
&lt;td&gt;スキル定義のJSONスキーマ・検証・標準メッセージ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;可視化・デバッグ&lt;/td&gt;
&lt;td&gt;hri_rviz&lt;/td&gt;
&lt;td&gt;RVizでの3Dスケルトン等の可視化プラグイン&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;可視化・デバッグ&lt;/td&gt;
&lt;td&gt;hri_visualization&lt;/td&gt;
&lt;td&gt;カメラ画像への顔・身体・表情のオーバーレイ表示&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;可視化・デバッグ&lt;/td&gt;
&lt;td&gt;rqt_human_radar / rqt_chat&lt;/td&gt;
&lt;td&gt;人物のレーダー表示／対話デバッグ用チャットUI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;可視化・デバッグ&lt;/td&gt;
&lt;td&gt;interaction_sim&lt;/td&gt;
&lt;td&gt;HRI研究用のROS 2シミュレーション環境&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UI構築&lt;/td&gt;
&lt;td&gt;ui_server / ui_msgs / ros-qml-plugin&lt;/td&gt;
&lt;td&gt;QMLを使った対話的UIの表示・ROS連携&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="対応ロボット"&gt;対応ロボット&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;区分&lt;/th&gt;
&lt;th&gt;ロボット&lt;/th&gt;
&lt;th&gt;特徴&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;商用&lt;/td&gt;
&lt;td&gt;PAL TIAGo&lt;/td&gt;
&lt;td&gt;7自由度アーム＋昇降トルソーを持つ、研究向けモバイルマニピュレータ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;商用&lt;/td&gt;
&lt;td&gt;PAL TIAGo Pro&lt;/td&gt;
&lt;td&gt;両腕7自由度、画面・LEDなどの対話機能を強化した上位版&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;商用&lt;/td&gt;
&lt;td&gt;PAL TIAGo Pro Head&lt;/td&gt;
&lt;td&gt;表情豊かな頭部のみの単体版。社会的信号・視線研究向け&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;商用&lt;/td&gt;
&lt;td&gt;PAL ARI&lt;/td&gt;
&lt;td&gt;受付・案内・エンターテインメント向けの、表情豊かな顔とジェスチャーを持つ社会的ロボット&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OSS・研究用&lt;/td&gt;
&lt;td&gt;EMOROBCARE&lt;/td&gt;
&lt;td&gt;ICMAT/IIIA（CSIC）が開発する、自閉症療育向けの低コストな社会的ロボット（球状の台座＋3自由度の頭部）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;開発元のPAL Robotics社自身が、TIAGo・ARIといった商用ロボットシリーズを展開しており、ROS4HRIはこれらのロボットの人間認識基盤としても使われている&lt;/li&gt;
&lt;li&gt;EUのHorizon Europe研究助成を受けて開発されている&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="メッセージ定義-hri_msgs"&gt;メッセージ定義: hri_msgs&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ROS4HRIでは、人間の認識結果を表現するための専用メッセージ型が定義されている。実際にリポジトリをクローンして、&lt;code&gt;msg/&lt;/code&gt;以下の17種類のファイルを確認した&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="カテゴリ一覧"&gt;カテゴリ一覧&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;17種類のメッセージは、内容に応じて5つのカテゴリに分けられる&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;カテゴリ&lt;/th&gt;
&lt;th&gt;対象&lt;/th&gt;
&lt;th&gt;含まれるメッセージ&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;顔・表情&lt;/td&gt;
&lt;td&gt;顔から読み取れる情報&lt;/td&gt;
&lt;td&gt;Expression、FacialActionUnits、FacialLandmarks、Gaze&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;身体&lt;/td&gt;
&lt;td&gt;身体から読み取れる情報&lt;/td&gt;
&lt;td&gt;Skeleton2D、Gesture、BodyPosture&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;属性・音声&lt;/td&gt;
&lt;td&gt;年齢・性別や、音声から読み取れる情報&lt;/td&gt;
&lt;td&gt;SoftBiometrics、AudioFeatures、LiveSpeech&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;集団・ID管理・関係性&lt;/td&gt;
&lt;td&gt;複数の人物・特徴の間の関係&lt;/td&gt;
&lt;td&gt;Group、IdsList、IdsMatch、EngagementLevel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;幾何的なプリミティブ型&lt;/td&gt;
&lt;td&gt;他のメッセージから使われる座標の基礎型&lt;/td&gt;
&lt;td&gt;NormalizedPointOfInterest2D、NormalizedPointOfInterest2DStamped、NormalizedRegionOfInterest2D&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="顔表情に関するメッセージ"&gt;顔・表情に関するメッセージ&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;メッセージ&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Expression&lt;/td&gt;
&lt;td&gt;表情を、カテゴリ（neutral、angry、happyなど25種類、Chambers 2020年MSc論文・Ekmanの基本6感情モデルに基づく）と、Valence/Arousalモデル（感情のpositive/negative度を表すvalence、興奮度を表すarousal、それぞれ-1.0〜+1.0）の両方で表す&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FacialActionUnits&lt;/td&gt;
&lt;td&gt;Ekmanが開発したFACS（Facial Action Coding System）の命名に従い、99種類のAU（Action Unit、表情を作る顔の部位ごとの動き）それぞれの強度と確信度を配列で表す。頭の向き・視線の向き・顔の可視性なども含む&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FacialLandmarks&lt;/td&gt;
&lt;td&gt;dlib・OpenPoseの規約に従った70点の顔のランドマーク（輪郭・眉・目・鼻・口など）を、正規化された2D座標の配列として表す&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gaze&lt;/td&gt;
&lt;td&gt;視線の送り手（sender）と受け手（receiver）の人物IDを表す。空文字列はロボット自身を意味する&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img src="https://www.m1ke.org/p/ros4hri%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF/facs2.jpg"
width="966"
height="483"
srcset="https://www.m1ke.org/p/ros4hri%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF/facs2_hu_f4bd2933d5d3b9b4.jpg 480w, https://www.m1ke.org/p/ros4hri%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF/facs2_hu_706c7be41836cd4f.jpg 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="200"
data-flex-basis="480px"
&gt;
&lt;img src="https://www.m1ke.org/p/ros4hri%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF/FACS.jpg"
width="2223"
height="4000"
srcset="https://www.m1ke.org/p/ros4hri%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF/FACS_hu_1e718d7aef739844.jpg 480w, https://www.m1ke.org/p/ros4hri%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF/FACS_hu_3b1924587118d1f9.jpg 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="55"
data-flex-basis="133px"
&gt;&lt;/p&gt;
&lt;h3 id="身体に関するメッセージ"&gt;身体に関するメッセージ&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;メッセージ&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Skeleton2D&lt;/td&gt;
&lt;td&gt;OpenPoseのCOCOモデルの規約に従い、鼻・両肩・両肘・両手首・両腰・両膝・両足首・両目・両耳という18点の骨格キーポイントを、正規化された2D座標の配列として表す&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gesture&lt;/td&gt;
&lt;td&gt;手を顔に当てる・腕を組む・手を挙げる・手を振るといった、身体から検出されるジェスチャーを表す&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BodyPosture&lt;/td&gt;
&lt;td&gt;立っている・座っている・しゃがんでいる・寝ているという、身体の姿勢を記号的に表す&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="属性音声に関するメッセージ"&gt;属性・音声に関するメッセージ&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;メッセージ&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SoftBiometrics&lt;/td&gt;
&lt;td&gt;推定した年齢・性別を、それぞれの確信度（confidence）付きで表す&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AudioFeatures&lt;/td&gt;
&lt;td&gt;INTERSPEECH 2009 Emotion Challengeで選定された16種類の音声特徴（ゼロ交差率、RMSフレームエネルギー、ピッチ、調波対雑音比、MFCC1〜12）を、openSMILEツールキットで抽出した値として表す&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LiveSpeech&lt;/td&gt;
&lt;td&gt;音声認識の途中結果（incremental）と最終結果（final）、その確信度、ISO 639-1の言語コード＋ISO 3166-1の地域コードによるlocale（例: en_GB）を表す&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="集団id管理関係性に関するメッセージ"&gt;集団・ID管理・関係性に関するメッセージ&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;メッセージ&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Group&lt;/td&gt;
&lt;td&gt;グループIDと、そのグループに属する人物IDのリストを表す&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IdsList&lt;/td&gt;
&lt;td&gt;顔ID・身体ID・人物IDなど、ROS4HRIのIDのリストを表す汎用的なメッセージ。例えば&lt;code&gt;/humans/faces/tracked&lt;/code&gt;で、現在検出されている顔のIDの一覧が配信される&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IdsMatch&lt;/td&gt;
&lt;td&gt;一時的なID（顔・身体・声）と永続的なID（人物）の対応候補を、確信度付きで表す。確信度0.0は「この2つは対応しない」という意味を持つ特別な値。&lt;code&gt;/humans/candidate_matches&lt;/code&gt;に配信され、Mr. Potato algorithmの入力になる&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;EngagementLevel&lt;/td&gt;
&lt;td&gt;人間がロボットにどれだけ関わっているかを、unknown・disengaged・engaging・engaged・disengagingという5段階の離散値で表す。&lt;code&gt;/humans/persons/&amp;lt;person_id&amp;gt;/engagement_status&lt;/code&gt;で配信される&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="幾何的なプリミティブ型"&gt;幾何的なプリミティブ型&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Skeleton2DやFacialLandmarksなど、複数のメッセージから共通して使われる、座標を表すための基礎的な型も定義されている&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;型&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;NormalizedPointOfInterest2D&lt;/td&gt;
&lt;td&gt;正規化された（0.0〜1.0の範囲の）点の座標（x, y）と、その点の確信度（c）を表す&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NormalizedPointOfInterest2DStamped&lt;/td&gt;
&lt;td&gt;NormalizedPointOfInterest2Dにタイムスタンプ付きヘッダを加えたもの&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NormalizedRegionOfInterest2D&lt;/td&gt;
&lt;td&gt;正規化された矩形領域を、左上（xmin, ymin）と右下（xmax, ymax）の座標と確信度（c）で表す&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="hri_actions_msgs-アクション意図の定義"&gt;hri_actions_msgs: アクション・意図の定義&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;hri_msgsが「知覚（Perception）」側のメッセージを扱うのに対し、hri_actions_msgsは「アクション（Action）」側、つまりロボットに何をさせるか・人間が何を意図しているかを表すメッセージを扱う&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="intent-意図の表現"&gt;Intent: 意図の表現&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Androidのintentに着想を得た、ロボットに実行させたい操作を抽象的に表すメッセージ&lt;/li&gt;
&lt;li&gt;&lt;code&gt;intent&lt;/code&gt;（どの操作か）と、&lt;code&gt;data&lt;/code&gt;（JSON形式のパラメータ）という2つの必須フィールドを持つ&lt;/li&gt;
&lt;li&gt;&lt;code&gt;data&lt;/code&gt;の中身は、動作主（agent）・対象（object）・目的地（goal）・受け手（recipient）という、言語学の主題役割（thematic role）に基づくキーで指定する&lt;/li&gt;
&lt;li&gt;例えば「キッチンにいるLukeに食材を持っていって」は、&lt;code&gt;intent: BRING_OBJECT&lt;/code&gt;、&lt;code&gt;data: {&amp;quot;object&amp;quot;: &amp;quot;groceries&amp;quot;, &amp;quot;goal&amp;quot;: &amp;quot;kitchen_1&amp;quot;, &amp;quot;recipient&amp;quot;: &amp;quot;person_luke&amp;quot;}&lt;/code&gt;のように表現される&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;定義済みIntent&lt;/th&gt;
&lt;th&gt;意味&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;RAW_USER_INPUT&lt;/td&gt;
&lt;td&gt;意図の抽出に失敗した場合のフォールバック&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ENGAGE_WITH&lt;/td&gt;
&lt;td&gt;相手と関わりたい&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MOVE_TO&lt;/td&gt;
&lt;td&gt;指定した場所に移動する&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GUIDE&lt;/td&gt;
&lt;td&gt;誰かをどこかへ案内する&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GRAB_OBJECT / BRING_OBJECT / PLACE_OBJECT&lt;/td&gt;
&lt;td&gt;物を取る／持っていく／置く&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GREET&lt;/td&gt;
&lt;td&gt;挨拶する&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SAY&lt;/td&gt;
&lt;td&gt;指定したテキストを話す&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PRESENT_CONTENT&lt;/td&gt;
&lt;td&gt;画面などで決められたコンテンツを提示する&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PERFORM_MOTION&lt;/td&gt;
&lt;td&gt;ダンスや手を振るなどの動作を実行する&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;START_ACTIVITY / STOP_ACTIVITY&lt;/td&gt;
&lt;td&gt;スクリプト化された振る舞いの開始・停止&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WAKEUP / SUSPEND&lt;/td&gt;
&lt;td&gt;システムの再起動・休止&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;Intentには、他にも&lt;code&gt;source&lt;/code&gt;（ロボット自身・リモート監督者・不明な相手のどれが発した意図か。REP-155準拠の場合は人物IDも使える）、&lt;code&gt;modality&lt;/code&gt;（発話・動作・タッチスクリーン・内部処理のどれで伝えられたか）、&lt;code&gt;priority&lt;/code&gt;（0〜255）、&lt;code&gt;confidence&lt;/code&gt;（0.0〜1.0）といったフィールドがある&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="その他のメッセージ"&gt;その他のメッセージ&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;メッセージ&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ActivityList&lt;/td&gt;
&lt;td&gt;START_ACTIVITY／STOP_ACTIVITY Intentで起動できる、アクティビティ名の一覧&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ClosedCaption&lt;/td&gt;
&lt;td&gt;発話者ID・テキスト・localeを持つ、字幕（クローズドキャプション）表示用のメッセージ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LookAtWithStyle&lt;/td&gt;
&lt;td&gt;注視対象の3D座標に加え、目だけ／頭だけ／両方（デフォルト）という、視線の動かし方のスタイルを指定する&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="アクション定義"&gt;アクション定義&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;ROS 2のAction（Goal・Result・Feedbackからなる、時間のかかる処理向けの通信方式）として、以下のようなものが定義されている&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;アクション&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;LookAt&lt;/td&gt;
&lt;td&gt;指定した3D座標を注視する&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ApplicationControl&lt;/td&gt;
&lt;td&gt;下位のアプリケーションコントローラーにJSON形式のパラメータを渡す&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SelfPresentation&lt;/td&gt;
&lt;td&gt;自己紹介などの、複数のフレーズからなる発話を実行し、進行状況（現在のフレーズ数／総フレーズ数）をフィードバックする&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FaceOverlay&lt;/td&gt;
&lt;td&gt;顔のディスプレイに画像・アニメーションを重ねて表示する。表示時間・レイヤー（背景／前景）・レイアウト（両目に表示／左右の目ごとなど）・スケール・位置・フェード効果を指定できる&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PointTrajectory&lt;/td&gt;
&lt;td&gt;複数の3D座標点と、それぞれに到達する時刻を指定し、軌道を描かせる&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="hri_person_manager-顔身体声を1人の人物に統合する"&gt;hri_person_manager: 顔・身体・声を1人の人物に統合する&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;カメラ・マイクなど複数のセンサーから得られる顔・身体・声の検出結果は、それぞれ別々に検出されるが、それらが同じ1人の人物のものだと紐付けなければ、ロボットは人間を1人の人物として認識できない&lt;/li&gt;
&lt;li&gt;hri_person_managerは、検出された顔・身体・声を集約し、一貫した「人物（person）」として扱い、それぞれの検出結果への紐付けを外部に公開するノード&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="mr-potato-algorithm"&gt;Mr. Potato algorithm&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;他のノード（顔認識ノードなど）が&lt;code&gt;/humans/candidate_matches&lt;/code&gt;に投稿する、IdsMatchメッセージ（特徴同士・特徴と人物の対応候補、確信度付き）を受け取り、確率的なグラフ（person features graph）を構築する&lt;/li&gt;
&lt;li&gt;アルゴリズムは、クローンしたリポジトリの&lt;code&gt;doc/ALGORITHM.md&lt;/code&gt;に、以下のような形式的な定義がある
&lt;ul&gt;
&lt;li&gt;特徴（feature）: 顔・身体・声のいずれか&lt;/li&gt;
&lt;li&gt;許容されるパス（permissible path）: 同じ種類のノードを2つ以上含まない経路。尤度はパス上の尤度の積&lt;/li&gt;
&lt;li&gt;関連（association）: 閾値（デフォルト0.5）を超える尤度の許容パスで結ばれた、ノードの連結集合&lt;/li&gt;
&lt;li&gt;要件として、(1) 全ての関連の尤度の合計を最大化する、(2) 全ての特徴は必ず1人の人物（匿名も含む）に紐付く、(3) 人物に紐付かない特徴は匿名の人物に紐付ける、(4) 間接的なパスが切れた場合も、尤度が閾値を超えていれば直接的な関連として安定的に維持する、という4点が定義されている&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;この手法は、&amp;ldquo;Probabilistic fusion of persons&amp;rsquo; body features: the Mr. Potato algorithm&amp;quot;という論文として発表されている（DOI: 10.1145/3610977.3637479）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="パラメータ"&gt;パラメータ&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;パラメータ&lt;/th&gt;
&lt;th&gt;デフォルト値&lt;/th&gt;
&lt;th&gt;意味&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;match_threshold&lt;/td&gt;
&lt;td&gt;0.5&lt;/td&gt;
&lt;td&gt;顔・身体・声を同じ人物とみなす最小尤度&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;reference_frame&lt;/td&gt;
&lt;td&gt;map&lt;/td&gt;
&lt;td&gt;人物のTFフレームを配信する基準フレーム。固定された基準フレームを使うことで、人物が一度カメラの視界から外れても、最後に見えた位置に留まり続ける&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;personal_distance&lt;/td&gt;
&lt;td&gt;1.2m&lt;/td&gt;
&lt;td&gt;近接学（proxemics）に基づく、個人距離圏の上限&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;social_distance&lt;/td&gt;
&lt;td&gt;3.6m&lt;/td&gt;
&lt;td&gt;社会距離圏の上限&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;public_distance&lt;/td&gt;
&lt;td&gt;20m&lt;/td&gt;
&lt;td&gt;公共距離圏の上限&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="主なトピック"&gt;主なトピック&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;トピック&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;/humans/candidate_matches&lt;/td&gt;
&lt;td&gt;他ノードから受け取る、特徴同士・特徴と人物の対応候補&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/humans/persons/known・/humans/persons/tracked&lt;/td&gt;
&lt;td&gt;人物の一覧&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/humans/persons/in_{personal|social|public}_space&lt;/td&gt;
&lt;td&gt;各近接圏にいる人物の一覧&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/humans/persons/&amp;lt;person_id&amp;gt;/proxemic_space&lt;/td&gt;
&lt;td&gt;個々の人物の近接圏&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/humans/graph&lt;/td&gt;
&lt;td&gt;特徴同士の対応関係をDOT形式で可視化したもの&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="libhri-人間の認識結果への簡単なアクセス"&gt;libhri: 人間の認識結果への簡単なアクセス&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ROS4HRIの各トピックを生のまま扱う代わりに、&lt;code&gt;HRIListener&lt;/code&gt;というクラスを通じて、検出された人間・顔・身体をオブジェクトとして扱える、簡易的なAPIを提供する&lt;/li&gt;
&lt;li&gt;C++実装の&lt;code&gt;hri&lt;/code&gt;パッケージと、それをPybind11でラップしたPython版の&lt;code&gt;pyhri&lt;/code&gt;パッケージがある&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="チュートリアル"&gt;チュートリアル&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ROS4HRIには、公式サイトの新しいチュートリアルと、IROS22で行われた（ROS 1 Noetic時代の）より古いチュートリアルの、2種類がある&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="新しいチュートリアル-llm対応インタラクティブアプリの構築"&gt;新しいチュートリアル: LLM対応インタラクティブアプリの構築&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;公式サイトには「ROS4HRIの知覚・スキルを使って、LLM対応のインタラクティブアプリを構築する」という、実践的なチュートリアルが用意されている&lt;/li&gt;
&lt;li&gt;使われているツール・ノードは以下の通り&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;層&lt;/th&gt;
&lt;th&gt;ツール・ノード&lt;/th&gt;
&lt;th&gt;役割&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;知覚&lt;/td&gt;
&lt;td&gt;gscam&lt;/td&gt;
&lt;td&gt;Webカメラの映像を配信&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;知覚&lt;/td&gt;
&lt;td&gt;hri_face_detect&lt;/td&gt;
&lt;td&gt;顔検出（確信度の閾値付き）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;知覚&lt;/td&gt;
&lt;td&gt;hri_emotion_recognizer&lt;/td&gt;
&lt;td&gt;検出した顔からの表情分類&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;知識・推論&lt;/td&gt;
&lt;td&gt;knowledge_core&lt;/td&gt;
&lt;td&gt;OWL/RDFベースの記号的な知識ベース（Webビューア付き）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;知識・推論&lt;/td&gt;
&lt;td&gt;hri_person_manager&lt;/td&gt;
&lt;td&gt;顔・身体・声を1人の人物に統合&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;対話&lt;/td&gt;
&lt;td&gt;dialogue_manager&lt;/td&gt;
&lt;td&gt;発話の入出力管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;対話&lt;/td&gt;
&lt;td&gt;ollama&lt;/td&gt;
&lt;td&gt;ローカルLLM推論（カスタムのチャットボットが利用）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;対話&lt;/td&gt;
&lt;td&gt;rqt_chat&lt;/td&gt;
&lt;td&gt;テキストでの対話確認用プラグイン&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;可視化&lt;/td&gt;
&lt;td&gt;rqt_human_radar&lt;/td&gt;
&lt;td&gt;検出した人物・空間的な関係のレーダー表示&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;制御・表出&lt;/td&gt;
&lt;td&gt;interaction_sim&lt;/td&gt;
&lt;td&gt;2Dのソーシャルインタラクション・シミュレーター&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;このチュートリアルで出てくるGUIは、ロボット・人間のアバターをSVGで描いた2Dの見下ろし型シミュレーター（&lt;code&gt;interaction_sim&lt;/code&gt;）と、procedural（手続き的）に生成された目だけの表情豊かなロボットの顔の2種類がある。アニメ風に見えたのは、おそらくこのどちらか&lt;/li&gt;
&lt;li&gt;手順は、Part 0（Docker環境構築）→Part 1（顔検出の動作確認）→Part 2（シミュレーターと知識ベースの導入）→Part 3（&lt;code&gt;rpk&lt;/code&gt;でミッションコントローラーを生成し、&lt;code&gt;/skill/say&lt;/code&gt;での発話や、検出した表情をロボットの表情にそのまま反映する「感情ミラーリング」を実装）→Part 4（ollamaでのLLM統合、意図抽出のプロンプト設計、知識ベースを使ったコンテキスト付与）という流れで進む&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="古いチュートリアル-iros22のros4hri完全ウォークスルー"&gt;古いチュートリアル: IROS22のROS4HRI完全ウォークスルー&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;ROS 1 Noetic時代に、IROS22で実施された、1日がかりの完全なチュートリアル&lt;/li&gt;
&lt;li&gt;題材として「OfficeBots」という、HRI研究用のマルチプレイヤーゲーム型シミュレーターを使っている。キャラクターを選んでプレイする、ゲームらしい見た目のGUIを持つ&lt;/li&gt;
&lt;li&gt;3部構成になっている&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;パート&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Part 1&lt;/td&gt;
&lt;td&gt;OfficeBotsを使い、ROS4HRIのAPIに触れながら、視線の合致度（mutual gaze）を使ったエンゲージメント推定器を自作する&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Part 2&lt;/td&gt;
&lt;td&gt;Webカメラの実データを使い、顔検出（hri_face_detect）・骨格検出（hri_fullbody）・ジェスチャー認識（waving検出）を実装する&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Part 3&lt;/td&gt;
&lt;td&gt;Rasaで作ったチャットボットと、音声認識結果（LiveSpeech）を統合した、マルチモーダルなチャットボットを完成させる&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;Part 1のエンゲージメント推定は、ロボットと人物が互いを見ている度合いを表す相互視線の指標$M_{RP}$（ロボットの視野内での人物の位置と、人物の視野内でのロボットの位置、それぞれの光軸からの距離の積）と、それを距離で正規化した社会的エンゲージメントの指標$S_{RP}=\min(1, M_{RP}/\text{dist}(R,P))$を使う&lt;/li&gt;
&lt;li&gt;Part 2のhri_face_detect・hri_fullbody（2D/3D骨格検出）はどちらもGoogleのMediaPipeを使っている。骨格検出の結果はrobot_state_publisherとhuman_descriptionパッケージのURDFを使って、3Dの関節状態・TFツリーとして公開される&lt;/li&gt;
&lt;li&gt;waving（手を振る）ジェスチャーの検出は、肩・肘・手首の間の距離（肩肘間・肘手首間・肩手首間）が、それぞれ特定の範囲（0.1〜0.25、0.1〜0.25、0.15〜0.25）に収まるかどうかで判定する、シンプルな閾値ベースの手法&lt;/li&gt;
&lt;li&gt;Part 3では、音声認識結果を&lt;code&gt;/humans/voices/&amp;lt;id&amp;gt;/speech&lt;/code&gt;からRasaのチャットボットサーバーに送り、その応答を&lt;code&gt;/say&lt;/code&gt;トピック（ROS4HRI標準ではない、OfficeBots独自のトピック）でロボットに発話させる&lt;/li&gt;
&lt;li&gt;顔と人物の対応付けも、&lt;code&gt;rostopic pub /humans/candidate_matches hri_msgs/IdsMatch&lt;/code&gt;のように、手動でIdsMatchメッセージを配信することで体験できる&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="今後の展望-生理指標への拡張sense4hri"&gt;今後の展望: 生理指標への拡張（Sense4HRI）&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Scheibl, Leichert, Görmez, Wrede (2026, Bielefeld University) &amp;ldquo;Sense4HRI: A ROS 2 HRI Framework for Physiological Sensor Integration and Synchronized Logging&amp;rdquo;（arXiv:2603.19914）は、ROS4HRIを生理指標（EEG・ECG・PPGなど）の統合に拡張する論文&lt;/li&gt;
&lt;li&gt;生理信号はHRIにおけるユーザーの心理状態の推定に重要性が増しているが、ROS 2ベースのHRIフレームワークには、こうしたデータストリームを標準化された形で統合する再利用可能な仕組みがまだ無いという問題意識から提案されている&lt;/li&gt;
&lt;li&gt;センサードライバと解釈ロジックを分離し、&lt;code&gt;PhysioRaw.msg&lt;/code&gt;という汎用的なメッセージ形式、ROS4HRIの命名規則に準拠した階層的なトピック名、複数センサーを同期させるためのデバイス側タイムスタンプなどを導入している&lt;/li&gt;
&lt;li&gt;Polar社のECG・PPGセンサーと表情認識を統合したプロトタイプで、複数モダリティを組み合わせた感情状態の推定を実証している&lt;/li&gt;
&lt;li&gt;ROS4HRI自体はこれまで顔・身体・声・表情といった外部から観測できる情報を中心にしていたが、Sense4HRIのような拡張によって、生理指標という内部状態の推定も同じ命名規則・名前空間の中に統合していく方向性が今後見込まれる&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="まとめ"&gt;まとめ&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ROS4HRI（REP-155）は、ROS上で人間を認識・表現するための標準的なメッセージ型・規約を定めた、OSSのフレームワーク&lt;/li&gt;
&lt;li&gt;REP-155は、Person ID（永続）・Face/Body/Voice ID（非永続）という4種類のIDと、&lt;code&gt;/humans/&lt;/code&gt;以下の名前空間、&lt;code&gt;face_&amp;lt;faceID&amp;gt;&lt;/code&gt;などの座標フレームを定義している。汎用的な単一メッセージではなく、サブトピックに分割することでモジュール性を確保している&lt;/li&gt;
&lt;li&gt;全体としては、知覚（顔・身体・声の検出）→人物統合（Mr. Potato algorithm）→インタラクションスキル（発話・注視・ナビゲーション・操作）→UI・可視化という流れを、一貫したパッケージ群として提供するエコシステムになっている&lt;/li&gt;
&lt;li&gt;開発元のPAL Robotics社のTIAGo・ARIといった商用ロボットや、CSICのEMOROBCAREのような研究用ロボットで実際に使われている&lt;/li&gt;
&lt;li&gt;hri_msgsが、表情（カテゴリ＋Valence/Arousal）・FACS準拠のAU・顔のランドマーク・視線・骨格・ジェスチャー・姿勢・年齢性別・音声特徴・音声認識結果・グループ・ID対応候補（IdsMatch）・エンゲージメント・座標のプリミティブ型を含む、全17種類のメッセージ型を定義している&lt;/li&gt;
&lt;li&gt;hri_actions_msgsが、知覚の反対側にあたる「アクション」側として、Androidのintentに着想を得たIntent（主題役割に基づくdata、14種類の定義済みIntent）や、LookAt・FaceOverlay・SelfPresentationといったROS 2 Actionを定義している&lt;/li&gt;
&lt;li&gt;hri_person_managerが、別々に検出される顔・身体・声を、確率的グラフマッチング（Mr. Potato algorithm、尤度の積で計算される許容パスと、要件を満たす最大尤度の分割）によって1人の人物として統合する&lt;/li&gt;
&lt;li&gt;近接学に基づく3つの距離圏（personal/social/public）と、固定された基準フレームによる位置の記憶も、hri_person_managerの機能の一部&lt;/li&gt;
&lt;li&gt;libhriが、これらの情報にオブジェクト指向的にアクセスできる簡易APIを提供する&lt;/li&gt;
&lt;li&gt;公式サイトのLLM対応チュートリアルでは、知覚（顔検出・表情認識）・知識ベース（knowledge_core）・対話（ollamaによるローカルLLM）・シミュレーター（interaction_sim）までを一通り組み合わせた、実践的な構築手順が示されている&lt;/li&gt;
&lt;li&gt;IROS22の古いチュートリアルでは、OfficeBotsというゲーム型シミュレーターを使い、相互視線に基づくエンゲージメント推定・骨格検出によるジェスチャー認識・Rasaチャットボットの統合を、実際にコードを書きながら体験できる&lt;/li&gt;
&lt;li&gt;Sense4HRIのように、ROS4HRIの命名規則・名前空間を踏襲しつつ、生理指標のような新しいモダリティを統合する拡張も登場している&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="参考文献"&gt;参考文献&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://ros4hri.github.io/" target="_blank" rel="noopener"
&gt;ROS4HRI 公式サイト&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://ros4hri.github.io/tutorials/interactive-social-robots/zero-to-llm.html" target="_blank" rel="noopener"
&gt;Build a complete LLM-enabled interactive app - ROS4HRI Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://wiki.ros.org/hri/Tutorials/ROS4HRI-walk-through" target="_blank" rel="noopener"
&gt;ROS4HRI Complete walk-through - ROS Wiki (IROS22)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.ros.org/reps/rep-0155.html" target="_blank" rel="noopener"
&gt;REP 155 &amp;ndash; Conventions, Topics, Interfaces for Perception in Human-Robot Interaction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Scheibl, M., Leichert, J., Görmez, S., &amp;amp; Wrede, B. (2026). &amp;ldquo;Sense4HRI: A ROS 2 HRI Framework for Physiological Sensor Integration and Synchronized Logging&amp;rdquo; (&lt;a class="link" href="https://arxiv.org/abs/2603.19914" target="_blank" rel="noopener"
&gt;arXiv:2603.19914&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/ros4hri" target="_blank" rel="noopener"
&gt;ros4hri - GitHub Organization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/ros4hri/hri_msgs" target="_blank" rel="noopener"
&gt;ros4hri/hri_msgs - GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/ros4hri/hri_actions_msgs" target="_blank" rel="noopener"
&gt;ros4hri/hri_actions_msgs - GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/ros4hri/libhri" target="_blank" rel="noopener"
&gt;ros4hri/libhri - GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/ros4hri/hri_person_manager" target="_blank" rel="noopener"
&gt;ros4hri/hri_person_manager - GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Probabilistic fusion of persons&amp;rsquo; body features: the Mr. Potato algorithm&amp;rdquo; (&lt;a class="link" href="https://doi.org/10.1145/3610977.3637479" target="_blank" rel="noopener"
&gt;DOI:10.1145/3610977.3637479&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://en.wikipedia.org/wiki/Facial_Action_Coding_System" target="_blank" rel="noopener"
&gt;Facial Action Coding System - Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>