最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

ROS パラメーター サーバーへのアクセス

この例では、ROS パラメーター サーバー上でのパラメーターの追加方法と取得方法を調べます。パラメーター サーバーは通常、ROS マスターを起動するものと同じデバイス上で実行されます。パラメーターは ROS ネットワーク全体でグローバルにアクセス可能であり、構成パラメーターなどの静的データの格納に使用できます。サポートされるデータ型には、string、整数、double、logical、cell 配列などがあります。

必要条件: ROS 入門ROS ネットワークへの接続

パラメーター ツリーの作成

MATLAB® で ROS マスターとパラメーター サーバーを起動します。

rosinit
Initializing ROS master on http://bat5216glnxa64:44281/.
Initializing global node /matlab_global_node_22332 with NodeURI http://bat5216glnxa64:36871/

パラメーター サーバーと交信するパラメーター ツリー オブジェクトを作成します。パラメーター ツリーを使用すると、パラメーター サーバーと交信できるようになり、setgetdelhassearch などの関数が提供されます。この例では新しいパラメーター サーバーを起動したため、現在そこにパラメーターは保管されていません。

ptree = rosparam
ptree = 
  ParameterTree with properties:

    AvailableParameters: {}

新規パラメーターの追加

ロボットの IP アドレスにパラメーターを設定するには、パラメーター名 ROBOT_IP を使用します。同じ名前をもつパラメーターが既に存在しているかどうかをチェックします。関数 has を使用します。

has(ptree,'ROBOT_IP')
ans = logical
   0

has が出力として 0 (false) を返す場合は、現時点で ROBOT_IP という名前がパラメーター サーバー上で見つからなかったことを意味します。

ロボットの IP アドレスをパラメーター サーバーに指示するパラメーターをいくつか追加します。これを行うために、関数 set を使用します。

set(ptree,'ROBOT_IP','192.168.1.1');
set(ptree, '/myrobot/ROBOT_IP','192.168.1.100');

これで、この ROS マスターに接続しているすべてのノードで ROBOT_IP パラメーターを使用できるようになりました。パラメーターは名前空間内に指定できます。たとえば、この例では、/myrobot 名前空間内に /myrobot/ROBOT_IP パラメーターがあります。

異なるデータ型のパラメーターをさらに設定します。

set(ptree,'MAX_SPEED',1.5);

関数 set への入力として cell 配列を使用します。ロボットの目標座標 {x, y, z} をもつパラメーターを設定します。

set(ptree,'goal',{5.0,2.0,0.0});

パラメーター サーバーに入力する追加のパラメーターを設定します。

set(ptree, '/myrobot/ROBOT_NAME','TURTLE');
set(ptree, '/myrobot/MAX_SPEED',1.5);
set(ptree, '/newrobot/ROBOT_NAME','NEW_TURTLE');

パラメーター値の取得

ROBOT_IP パラメーターからロボットの IP アドレスを取得するとします。この IP アドレスを使用してこのロボットに接続するためです。名前 ROBOT_IP をもつパラメーターは 2 つありますが、myrobot の IP アドレスのみが必要です。関数 get を使用してこのパラメーターの値を取得できます。

robotIP = get(ptree, '/myrobot/ROBOT_IP')
robotIP = 
'192.168.1.100'

すべてのパラメーターのリストの取得

パラメーター サーバーに保存されているパラメーターのリスト全体を取得するために、AvailableParameters プロパティを検査します。リストには、これまでの節で追加したすべてのパラメーターが含まれます。

plist = ptree.AvailableParameters
plist = 7x1 cell array
    {'/MAX_SPEED'          }
    {'/ROBOT_IP'           }
    {'/goal'               }
    {'/myrobot/MAX_SPEED'  }
    {'/myrobot/ROBOT_IP'   }
    {'/myrobot/ROBOT_NAME' }
    {'/newrobot/ROBOT_NAME'}

既存のパラメーターの変更

関数 set を使用してパラメーター値を変更することもできます。パラメーター サーバーは単にパラメーターを新規の値で上書きするため、パラメーターの変更は不可逆的であることに注意してください。関数 has を使用して、パラメーターが既に存在するかどうかを確認できます。

MAX_SPEED パラメーターを変更します。

set(ptree, 'MAX_SPEED', 1.0);

変更後の値は、前に割り当てた値と異なるデータ型にすることができます。たとえば、MAX_SPEED パラメーターの現在の値は double 型です。MAX_SPEED パラメーターに対し string 値を設定します。

set(ptree, 'MAX_SPEED', 'none');

パラメーターの削除

関数 del を使用して、パラメーター サーバーからパラメーターを削除できます。

goal パラメーターを削除します。

del(ptree, 'goal');

goal パラメーターが削除されたかどうかをチェックします。関数 has を使用します。

has(ptree, 'goal')
ans = logical
   0

出力は 0 (false) で、これは、パラメーターがパラメーター サーバーから削除されたことを意味します。

パラメーターの検索

コマンドを使用して、'myrobot'search を含むすべてのパラメーターを検索します。

results = search(ptree, 'myrobot')
results = 1x3 cell array
    {'/myrobot/MAX_SPEED'}    {'/myrobot/ROBOT_IP'}    {'/myrobot/ROBOT_...'}

ROS ネットワークのシャットダウン

ROS マスターをシャットダウンしてグローバル ノードを削除します。

rosshutdown
Shutting down global node /matlab_global_node_22332 with NodeURI http://bat5216glnxa64:36871/
Shutting down ROS master on http://bat5216glnxa64:44281/.

次のステップ