ROS controllers config

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