O ficheiro de configuração dos ros controllers controllers.yaml pode ser expresso de forma plana, como no exemplo 1a ou de forma hierarquica como no exemplo 2a.
Uma das consequencias da diferente forma de exprimir os elementos participantes no controlo é que no ficheiro launch estes tem de ser referidos tendo em conta a forma como foram expressos no respectivo ficheiro controllers.yaml.
Exemplo 1a: controllers.yaml
robotname:
# Publish all joint states
joints_update:
type: joint_state_controller/JointStateController
publish_rate: 50
# Position Controllers
joint_1:
type: position_controllers/JointPositionController
joint: joint_1
pid: {p: 1.0, i: 1.0, d: 0.0}
joint_2:
type: position_controllers/JointPositionController
joint: joint_2
pid: {p: 1.0, i: 1.0, d: 0.0}
# Effort Controllers
joint_3:
type: effort_controllers/JointEffortController
joint: joint_3
Exemplo 1b: controllers.launch
<rosparam file="$(find robotnamepkg)/config/controllers.yaml" command="load"/>
<node name="controller_spawner" pkg="controller_manager" type="spawner" respawn="false" output="screen"
args="
/robotname/joints_update
/robotname/joint_1
/robotname/joint_2
/robotname/joint_3
"/>
Exemplo 2a: controllers.yaml
robotname:
controller:
# Publish all joint states
state:
type: joint_state_controller/JointStateController
publish_rate: 50
# Position Controllers
position:
joint_1:
type: position_controllers/JointPositionController
joint: joint_1
pid: {p: 10.0, i: 0.0, d: 1.0}
joint_2:
type: position_controllers/JointPositionController
joint: joint_2
pid: {p: 10.0, i: 0.0, d: 1.0}
# Effort Controllers
effort:
joint_3:
type: effort_controllers/JointEffortController
joint: joint_3
Exemplo 2b: controllers.launch
<rosparam file="$(find robotnamepkg)/config/controllers.yaml" command="load"/>
<node name="controller_spawner" pkg="controller_manager" type="spawner" respawn="false" output="screen"
args="
/robotname/controller/state
/robotname/controller/position/joint_1
/robotname/controller/position/joint_2
/robotname/controller/effort/joint_3
"/>