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 "/>