ROS control joint_limits_interface

ROS control joint_limits_interface

A classe joint_limits_interface contém as estruturas de dados para representar os limites das articulações, métodos para carregar os limites a aplicar a partir de formatos comuns, como ficheiros URDF e o servidor de parâmetros ROS, e métodos para impor os limites a diferentes tipos de interfaces de hardware.

O joint_limits_interface é usado na implementação do hardware_interface no método write() (ou equivalente) já após a actualização dos controladores. A imposição de limites substituirá os comandos definidos pelos controladores e  não é efectuada no mesmo buffer de dados.

Na configuração de uma interface de limites de articulação (joint limits interface), devem-se tomar em consideração os seguintes elementos:

Representação dos limites

JointLimits – Posição, velocidade, aceleração, empurrão (jerk) e esforço.

SoftJointLimits – Limites de posição de software, k_p, k_v

Mais informações sobre os joint limits e os soft joint limits mais abaixo.

Fontes para obtenção dos limites:

  • Ficheiros URDF – Existem métodos para carregar do URDF as informações dos limites ao movimento das articulações, joint limits, (posição, velocidade e esforço), assim como sobre os soft limites das articulações, soft joint limits.
  • Servidor de parâmetros do ROS – Existem métodos de para carregar a partir do servidor de parâmetros do ROS os limites ao movimento das articulações, joint limits, (posição, velocidade, aceleração, empurrão e esforço). A especificação dos parâmetros é a mesma usada no MoveIt, e inclui também os limites de empurrão e esforço.

A implementação concreta dos limites varia consoante o tipo de articulação.

  • Para articulação controladas por esforço, a implementação de limites flexíveis do PR2 foi portada.
  • Para articulação com posição controlada, uma versão modificada dos limites flexíveis PR2 foi implementada.
  • Para articulação com velocidade controlada, foi implementado um método de  saturação simples com base nos limites de aceleração e velocidade.

No seguinte link está o exemplo oficial da utilização de joint limits na implementação de uma hardware_interface de um robot.

https://github.com/ros-controls/ros_control/wiki/joint_limits_interface

Mais informação sobre a classe joint_limits_interface em:

http://docs.ros.org/melodic/api/joint_limits_interface/html/c++/index.html

Joint Limits vs Soft Joint Limits

Os limites da articulações, podem ser de dois tipos, os hard, que são simplesmente referidos de Joint Limits e os soft referidos como Soft Joint Limits.

A diferença fundamental entre os dois tipos de limites é que os soft limits consideram um limite de segurança (safety limit) que é tomado em consideração na implementação dos limites no software.

Os dois tipos de limites podem ser especificado no ficheiro urdf, conforme o exemplo abaixo. O elemento <limit> contêm os atributos correspondentes aos hard joint limits. Enquanto que o elemento <safety_controller>  contêm os atributos correspondentes aos soft joint limits.

<joint name="joint1" type="revolute">
<origin rpy="0 0 0" xyz="0 0 0.05"/>
<axis xyz="1 0 0"/>
<parent link="base"/>
<child link="link1"/>
<dynamics damping="0.1" friction="0"/>
<limit effort="300" lower="-0.523599" upper="0.523599" velocity="12"/>
<safety_controller k_position="100" k_velocity="100" soft_lower_limit="-10.5236" soft_upper_limit="10.5236"/>
</joint>

Para saber mais sobre ficheiros URDF no ROS, consultar o artigo sobre Ficheiros URDF.

Para saber mais sobre os safety limits consultar a informação disponível no seguinte endereço: https://wiki.ros.org/pr2_controller_manager/safety_limits

Instruções simples para usar o joint limits no hardware_interface do robot.

No ficheiro do header incluir:

 

Mais informação

 

https://github.com/ros-controls/ros_control/wiki/joint_limits_interface