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