<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>制御ゲイン on Physical AI Hub</title>
    <link>https://physicalaihub.net/tags/%E5%88%B6%E5%BE%A1%E3%82%B2%E3%82%A4%E3%83%B3/</link>
    <description>Recent content in 制御ゲイン on Physical AI Hub</description>
    <generator>Hugo</generator>
    <language>ja-jp</language>
    <lastBuildDate>Wed, 04 Nov 2026 15:01:42 +0900</lastBuildDate>
    <atom:link href="https://physicalaihub.net/tags/%E5%88%B6%E5%BE%A1%E3%82%B2%E3%82%A4%E3%83%B3/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>ROS 2実行時パラメータ設計：動的変更・検証・適用境界をどう決めるか</title>
      <link>https://physicalaihub.net/posts/ros2-runtime-parameter-safety-design/</link>
      <pubDate>Wed, 04 Nov 2026 15:01:42 +0900</pubDate>
      <guid>https://physicalaihub.net/posts/ros2-runtime-parameter-safety-design/</guid>
      <description>&lt;p&gt;実行中に設定を変えられるROS 2の柔軟性は、適用境界をどう設計するかで安全性が変わります。&lt;/p&gt;&#xA;&lt;h2 id=&#34;結論&#34;&gt;結論&lt;/h2&gt;&#xA;&lt;p&gt;ROS 2の実行時パラメータ変更は、再起動なしの運用に役立ちます。ただし、変更できることと、安全に運転中へ即時反映できることは別です。影響範囲が限定された値だけを動的変更の対象にし、型・値域・単位・相互依存関係を検証したうえで、関連パラメータを原子的に更新します。&lt;/p&gt;&#xA;&lt;p&gt;制御ゲイン、速度・加速度上限、衝突判定閾値などは、安全な制御周期境界、またはLifecycle NodeのInactive状態で反映する設計が基本です。資源の再確保、通信設定、QoS、コンポーネント構成の変更を伴う値は、Lifecycle遷移や再起動を適用境界にします。認証・認可、監視、監査、ロールバックまでを一つの運用フローとして設計することが、運用性と安全性を両立する条件です。&lt;/p&gt;&#xA;&lt;h2 id=&#34;なぜ適用境界が必要か&#34;&gt;なぜ適用境界が必要か&lt;/h2&gt;&#xA;&lt;p&gt;ROS 2のパラメータはノードに関連付けられ、ノードのパラメータサービスから取得・設定できます。変更はParameterEventとして通知できるため、再起動せずにセンサー閾値や診断設定を調整し、変更を監視できます。&lt;/p&gt;&#xA;&lt;p&gt;一方、パラメータ機構が支援するのは、主に型やAPIレベルの整合性です。制御安定性、機械的安全、停止距離、センサー間の依存関係まで自動判定するわけではありません。数値として正しいゲインでも、ロボットの機構や制御周期との組み合わせによって安全とは限らないため、「変更可能か」と「運転中に反映できるか」を分けて判断します。&lt;/p&gt;&#xA;&lt;h2 id=&#34;パラメータ変更の仕組み&#34;&gt;パラメータ変更の仕組み&lt;/h2&gt;&#xA;&lt;p&gt;パラメータは宣言して使用し、宣言時に型や説明を付与します。ParameterDescriptorでは、&lt;code&gt;read_only&lt;/code&gt;、動的型付け、整数・浮動小数点の範囲、追加制約などを記述できます。ただし、メタデータだけでドメイン固有の安全条件が満たされるわけではありません。必要な値域や組み合わせ条件は、対象ディストリビューションのAPI仕様を確認し、ノード側の検証処理でも明示します。&lt;/p&gt;&#xA;&lt;p&gt;ノードにはパラメータ変更コールバックを登録できます。コールバックは値が確定する前に候補を検証し、要求を受け入れるか拒否する場所です。ここでアクチュエータを操作したり、再帰的に別のパラメータ変更を呼び出したりせず、検証と実際の適用を分離します。&lt;/p&gt;&#xA;&lt;p&gt;複数のパラメータが関係する場合は、通常の&lt;code&gt;set_parameters&lt;/code&gt;ではなく&lt;code&gt;set_parameters_atomically&lt;/code&gt;を使います。&lt;code&gt;set_parameters&lt;/code&gt;は非原子的で、各パラメータの結果を個別に返します。これに対し、&lt;code&gt;set_parameters_atomically&lt;/code&gt;は候補のいずれかが失敗した場合、パラメータ全体を変更しません。ゲインと上限値など、組み合わせの整合性が必要な変更に適しています。&lt;/p&gt;&#xA;&lt;p&gt;ただし、この原子性はパラメータ設定に関するものです。外部ハードウェア、制御器内部状態、すでに送信した指令まで自動的に元へ戻す仕組みではありません。&lt;/p&gt;&#xA;&lt;figure class=&#34;mermaid-figure&#34;&gt;&#xA;    &lt;pre class=&#34;mermaid&#34; role=&#34;img&#34; aria-label=&#34;パラメータの受付、検証、原子的更新、適用、監視、監査、異常時の復旧を分離した安全な変更フロー。&#34;&gt;flowchart LR&#xA;  A[&#34;変更要求&#34;] --&gt; B[&#34;認証・認可&#34;]&#xA;  B --&gt; C[&#34;型・値域・単位・相互依存を検証&#34;]&#xA;  C --&gt; D{&#34;検証に成功?&#34;}&#xA;  D -- &#34;いいえ&#34; --&gt; E[&#34;変更を拒否して記録&#34;]&#xA;  D -- &#34;はい&#34; --&gt; F[&#34;set_parameters_atomicallyで候補を更新&#34;]&#xA;  F --&gt; G{&#34;適用境界を満たす?&#34;}&#xA;  G -- &#34;いいえ&#34; --&gt; H[&#34;安全な制御周期境界またはInactiveまで保留&#34;]&#xA;  H --&gt; I[&#34;実値へ適用&#34;]&#xA;  G -- &#34;はい&#34; --&gt; I&#xA;  I --&gt; J[&#34;動作・制御状態・異常を監視&#34;]&#xA;  I --&gt; K[&#34;ParameterEventと外部監査ログを記録&#34;]&#xA;  J --&gt; L{&#34;異常を検知?&#34;}&#xA;  L -- &#34;いいえ&#34; --&gt; M[&#34;変更後状態を継続監視&#34;]&#xA;  L -- &#34;はい&#34; --&gt; N[&#34;旧設定へ復元、停止、または再起動&#34;]&#xA;  K --&gt; M&#xA;  N --&gt; O[&#34;復旧結果を記録&#34;]&lt;/pre&gt;&lt;figcaption&gt;パラメータの受付、検証、原子的更新、適用、監視、監査、異常時の復旧を分離した安全な変更フロー。&lt;/figcaption&gt;&lt;/figure&gt;&lt;h2 id=&#34;lifecycleと適用タイミング&#34;&gt;Lifecycleと適用タイミング&lt;/h2&gt;&#xA;&lt;p&gt;Lifecycle Nodeには、Unconfigured、Inactive、Activeなどの状態と、configure、activate、deactivate、cleanupなどの遷移があります。どの状態でパラメータを適用し、どの資源を再構成するかはノード実装が定義します。Inactive状態だから自動的にアクチュエータ出力が停止する、という保証もありません。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
