# パラメータサーバー
動作中にさまざまなパラメータを格納するために使用されます
- 構成パラメータなどの静的データ
---
コマンド `rosparam` の使用
```bash
# すべてのパラメータをプリント
rosparam list
# パラメータ値を出力
rosparam get <パラメータ名>
# パラメータ値の設定
rosparam set <パラメータ名> <新値>
```
https://wiki.ros.org/rosparam
https://wiki.ros.org/ja/ROS/Tutorials/UnderstandingServicesParams
---
## パラメータ値
パラメータの定義方法
- 直接launchファイル内
- ``タグを使用
- 特別なファイル(yaml形式)
- launchファイルから読み取るためには ``タグを使用
yamlファイルの例(*config.yaml*)
```yaml
camera:
left:
name: left_camera
exposure: 1
right:
name: right_camera
exposure: 1.1
```
使用例(*package.launch*)
```xml
```
---
## パラメータを操作するためのAPI
パラメータの取得
```python
変数名 = rospy.get_param(パラメータ名)
```
例
```python
try:
param = rospy.get_param('param')
except KeyError:
rospy.logerr("Parameter param does not exist!")
```
https://wiki.ros.org/roscpp/Overview/Parameter%20Server
---
# アドレス指定について
ROSのノード、トピック、サービス、パラメータの名前の指定方法がいくつかあります。
- グローバルアドレス指定
- 名前が「/」で始まる
- 例: `rospy.get_param("/ns1/camera/left/exposure")`
- 相対アドレス指定(ノードの名前空間以下)
- 名前の初めに「/」がない
- 例: `rospy.get_param("camera/left/exposure")`
詳細はこちらを参考: https://wiki.ros.org/ja/Names
---
# 複数台のロボットの使用
---
## 名前の重複の問題
- 複数のロボット(シミュレーション内または実際のロボット)、または複数のセンサなどのリソースを使用する場合は、名前の重複に注意する必要があります。
- ノード名はユニークである必要があります。2つ目の同じ名前のノードを実行しようとすると、最初のノードが停止されます。
```bash
# 確認したいなら・・・
roscore
# 一つ目のノード
rosrun turtlesim turtlesim_node
# 2つ目の同じ名前のノード
rosrun turtlesim turtlesim_node
```
---
## 名前空間(ネームスペース)
この問題を避けるためには、各ロボット/リソースに別の名前空間を割り当てます。
以下の例のように、launchファイルの`group`タグを使えば、名前空間を簡単に設定できます。
```xml
```
個々のロボットのすべてのトピック、パラメーターなどは、そのロボットの名前空間下に移動されます(`/sim1/...`など)。
---
→ [実習その2](v4_2.html)
↑ [ホームページ](index.html)