ROS control controller_manager

Na forma mais simplificada podermos dizer que o gestor de controlador (controller_manager) fornece a infraestrutura para interagir com os controladores.

O gestor de controlador também fornece um ciclo compatível com requerimentos de hard-realtime para controlar um mecanismo robótico.

O mecanismo robótico tem de estar representado por uma instância hardware_interface :: RobotHW (ver hardware_interface), e o controlador (ros_controller) a carregar tem de herdar a classe controller_interface::Controller. (ver controller_interface)

O controller_manager fornece diferentes ferramentas para os controladores.  Com uma flexibilidade permite a execução de controladores a partir de um ficheiro de lançamento (launch files), da linha de comandos ou de um node ROS. De uma forma geral fornece os mecanismos para carregar, libertar, iniciar e parar controladores.

Ao carregar um controlador, o controller_manager usará o nome do controlador como raiz para todos os parâmetros específicos do controlador. Sendo o mais importante, o tipo que identifica qual o plugin (ros_controller) a carregar.

Ferramentas de linha de comandos do gestor de controlador

O pacote controller_manager tem duas ferramentas para operar com os controllers. O controller_manager , o spawner e o unspawner .

controller_manager

Podemos interagir com o controlador especifico com o seguinte input na linha de comandos:

rosrun controller_manager controller_manager <command> <name1> <name2> ...

Na linha acima, <name1> e <name2> representam os ros_controlers com que queremos interagir.

Ainda na linha acima, o <command> representa as seguintes acções a executar sobre os ros_controllers especificados na linha.

  • load: carrega controllers (carrega e inicializa controladores)
  • unload: liberta controllers (destrói controladores previamente carregados)
  • start: arranca controllers (arranca controladores carregados)
  • stop: pára controllers (pára controladores a executar)
  • spawn: carrega e arranca  controllers
  • kill: pára e liberta controllers

Quando não se especifica controladores é possível obter informações sobre os controladores e recarregar as suas bibliotecas.

rosrun controller_manager controller_manager <command>

list: lista todos os controladores pela ordem em que foram executados e fornece o estado de cada controlador

list-types: lista todos os tipos de controladores que o gestor de controlador conhece. Se o controlador não estiver nesta lista, então não poderá gerá-lo.

reload-libraries: recarrega todos os controladores disponíveis como plugins. Esta operação é conveniente quando se está a desenvolver um controlador e se deseja testar o novo código, sem reiniciar sempre todo o robot. Esta operação não reinicia os controladores que estavam a ser executados antes.

reload-libraries –restore: recarrega todos os controladores disponíveis como plugins e restaura todos os controladores ao seu estado original.

spawner

Para carregar e iniciar automaticamente, de uma só vez, um conjunto de controladores, e posteriormente, parar e destruir automaticamente os mesmos controladores de uma só vez, usa-se a ferramenta spawner:

rosrun controller_manager spawner [--stopped] <name1> <name2> ...

Quando se executa o spawner, os controladores indicados na linha de comandos serão carregados e iniciados (a menos que se especifique –stopped). O Spawner continuará a funcionar enquanto os controladores estiverem activos. Quando se mata o spawner com (ctrl-c), todos os controladores iniciados por ele param e são destruídos.

unspawner

Para parar automaticamente um conjunto de controladores e reiniciá-los mais tarde, pode-se usar a ferramenta unspawner, com a seguinte linha de comando:

rosrun controller_manager unspawner <name1> <name2> ...

Os controladores indicados serão parados, mas não destruídos. Assim que que o unspawner for morto com (ctrl-c) os controladores serão reiniciados.

controller_group

No ROS melodic foi incluído um novo comando que permite alternar um grupo de de controladores com propósitos especiais. Para saber mais consultar a página do ros wiki cujo o endereço está disponível no fim deste artigo.

Ferramentas de lançamento (launch)

Pode-se executar controller_manager para iniciar os controladores em ficheiros de lançamento (launch files). No entanto, este procedimento não é recomendado pois o controlador permanecerá activo mesmo depois de o ficheiros de lançamento for morto com (ctrl+c).  Em vez disso, nos ficheiros de lançamento deve-se usar a ferramenta spawner para carregar, iniciar, parar e descarregar automaticamente um ou mais controladores.

Exemplo de ficheiro launch para lançar controllers.

 <launch>
   <node pkg="controller_manager"
         type="spawner"
         args="controller_name1 controller_name2" />
 </launch>

Para carregar os controllers mas não proceder ao seu arranque, incluir o comando –stopped nos argumentos. Fica conforme exemplo abaixo.

 <launch>
   <node pkg="controller_manager"
         type="spawner"
         args="--stopped controller_name1 controller_name2" />
 </launch>

Caso se use um ficheiro controllers.yaml, o nome dos controllers a ser nos ficheiros launch está ligado ao nome e a forma como o nome está estruturado no ficheiro controllers.yaml.

Para saber mais sobre a interacçao sobre o ficheiro  controllers.yaml e o lançamento de controllers em ficheiros launch, ver o seguinte artigo: ROS controllers config.

ROS API

Para interagir com os ros_controllers a partir de outro node ROS, o controller_manager fornece cinco chamadas de serviço (com indicação do respectivo tipo de mensagens):

  • controller_manager/load_controller (controller_manager_msgs/LoadController)
  • controller_manager/unload_controller (controller_manager_msgs/UnloadController)
  • controller_manager/switch_controller (controller_manager_msgs/SwitchController)
  • controller_manager/list_controllers (controller_manager_msgs/ListControllers)
  • controller_manager/list_controller_types (controller_manager_msgs/ListControllerTypes)
  • controller_manager/reload_controller_libraries (controller_manager_msgs/ReloadControllerLibraries)

Para saber mais sobre as mensagens usadas pelos serviços do controller_manager ver: ROS control controller_manager_msgs

Para saber mais consultar a página do ros wiki cujo o endereço está disponível no fim deste artigo.

http://wiki.ros.org/controller_manager?distro=melodic