diff_drive_controller

O pacote diff_drive_controller faz parte dos ros_controllers e aplica-se ao controlo a uma base de robot com propulsão diferencial.

O diff_drive_controller necessita de um node que implemente a interface com o hardware de acordo com o estabelecido para o ros control. Ou seja um programa baseado numa classe que herde a hardware_interface::RobotHW, e implemente os métodos que façam a ligação com o controller_manager, o diff_drive_controller e o hardware, via firmware.

O controlo é efectuado por comandos de velocidade, ou seja mensagens do tipo geometry_msgs/Twist). Destas mensagens o controlador extrai o componente x da velocidade linear e o componente z da velocidade angular (os outros componentes são ignorados), que utiliza para calcular a velocidade de cada uma das rodas. Estas velociades são então enviadas através do node com o hardware interface para cada uma das duas rodas existentes num robot 2WD. A odometria é calculada e publicada pelo controlador com base no feedback que provem do hardware através do mesmo interface.

O diff_drive_controller necessita de um conjunto de configurações que devem obedecer a critérios especificos e estarem adequadas ao hardware.

O ficheiro robot.urdf que descreve o robot deve conter as articulações (joints), neste caso das rodas, com os nomes adequados, ou em consonancia com os nomes usados no programa e no ficheiro de configuração (controllers.yaml).

Exemplo de joints relevantes num robot.urdf
<joint name="front_right_wheel_joint" type="continuous">
(...)
</joint>

<joint name="front_left_wheel_joint" type="continuous">
(..)
</joint>

O ficheiro controllers.yaml que contém a configuração dos controllers, entre os quais a do diff_drive_controller, tendo cada um deles os seus parametros de configuração. No minimo tem de conter a identificação do controller com o respectivo tipo e as articulações (joints) neste caso as rodas com o mesmo nome que está no urdf e no programa.

O conteúdo minimo para o diff_drive_controller  no controllers.yaml é o seguinte:

robot_velocity_controller:
    type: "diff_drive_controller/DiffDriveController"
    left_wheel: 'front_left_wheel_joint'
    right_wheel: 'front_right_wheel_joint'
    pose_covariance_diagonal: [0.001, 0.001, 1000000.0, 1000000.0, 1000000.0, 1000.0]
    twist_covariance_diagonal: [0.001, 0.001, 1000000.0, 1000000.0, 1000000.0, 1000.0]

Note que o nome indicado para o left_wheel e right_wheel é o mesmo que o indicado no urdf.

Outra coisa importante é que a indentação é importante para a atribuição dos parâmetros ao controlador respectivo.

A descrição do robot incluida no ficheiro robot.urdf e a configuração dos controllers no ficheiro controllers.yaml são carregadas no servidor de paramentros rod ROS (parameter server) por intermédio de um launch file com os seguintes elementos:

<param name="robot_description" command="$(find xacro)/xacro '$(find diff_drive_base1)/urdf/robot.urdf.xacro'
--inorder"/>
<rosparam command="load" file="$(find diff_drive_base1)/config/controllers.yaml"/>

No que se refere a forma como os ros controllers são executados ter em atenção que eles são executados indirectamente por referência aos parametros carregados pelo ficheiro yaml, como por exemplo no caso abaixo em que o diff_drive_controller é carregado pela evocação do robot_velocity_controller.

<node name="base_controller_spawner" pkg="controller_manager" type="spawner"
args="robot_joint_publisher robot_velocity_controller"/>

Apesar de não esta referido aqui, o robot_joint_publisher refere-se ao  joint_state_controller, que é também um ros controller e na mesma por referência á sua inclusão no ficheiro de configuração controllers.yaml.

A identificação usada no controllers.yaml para o diff_drive_controller é usada também no nome dos topicos que são publicados e subscritos pelo node que usa o controller conforme exemplo abaixo:

/robot_velocity_controller/cmd_vel
/robot_velocity_controller/odom
/robot_velocity_controller/parameter_descriptions
/robot_velocity_controller/parameter_updates

 

Fontes

http://wiki.ros.org/diff_drive_controller

3-DOF_Manipulator

O conjunto de pacotes 3-DOF_Manipulator é usado para explorar um robot planar com 3DOF.

É composto pelos seguintes pacotes do ROS

  • three_dof_planar_manipulator
  • three_dof_planar_manipulator_ikfast_arm_plugin
  • three_dof_planar_manipulator_moveit_config

Este conjunto de pacotes tem um repositório com o mesmo nome (3-DOF_Manipulator)

https://github.com/bandasaikrishna/3-DOF_Manipulator

ros_hardware_interfaces

O ros_hardware_interfaces é um conjunto de pacotes com hardware_interfaces para serem usadas com o ros control e  vários ros controllers.

Este conjunto de pacotes é elaborado no ambito da minha aprendizagem do ROS.

É composto pelos seguintes pacotes:

  • arm3dof_all_nofb (não está completamente funcional)
  • arm3dof_jpc_nofb (funcional)
  • arm3dof_jpc_nolim_nofb (funcional)
  • dcmotor_one (completo)
  • diff_drive_base1 (completo)
  • ebamk2_hardware_interface (abandonado a refazer)
  • robotpos1 (investigar o estado do pacote)

Este conjunto de pacotes tem um repositório com o mesmo nome (ros_hardware_interfaces)

ntbd_base

O ntbd_base é um conjunto de pacotes com uma interface genérica para exploração de braços robóticos.

É composto pelos seguintes pacotes:

  • ntbd_core
  • ntbd_msgs

Este conjunto de pacotes tem um repositório com o mesmo nome (ntbd_base)

gc_bridge

O gc_bridge é um conjunto de pacotes destinados a explorar os recursos do google cloud.

É composto pelos seguintes pacotes:

  • gc_dialogflow bridge
  • gc_msgs
  • gc_speech_bridge
  • gc_vision_bridge

Este conjunto de pacotes tem um repositório com o mesmo nome (gc_bridge)

eezybotarm

O pacote do ROS eezybotarm para o braço robotico eezybotarm mk1 é um projecto abandonado. O pacote foi substituido pelos seguintes pacotes:

  • ebamk1_description;
  • ebamk2_description;
  • rosarm_control;

O firmware está incluido no pacote rosarm_firmware.

 

ebamk2_description

O pacote ROS ebamk2_description contem a descrição do braço róbótico EezyBotArm MK2.

O pacote ROS ebamk2_description contem a descrição do braço róbótico EezyBotArm MK2.

Existem três versões base com a descrição do braço robotico nos seguintes  ficheiros urdf.

ebamk2.urdf

Esta versão descreve o robot com os solidos geométricos base e inclui a garra. Reproduz a alteração no angulo entre a haste principal e a horizontal quando a primeira se movimenta, assim como a manutenção da horizontalidade da garra aquando do movimento da haste horizontal.

ebamk2_mesh.urdf

Esta versão descreve o robot com meshes e inclui a garra. Reproduz a alteração no angulo entre a haste principal e a horizontal quando a primeira se movimenta, assim como a manutenção da horizontalidade da garra aquando do movimento da haste horizontal.

ebamk2_web.urdf

Versão original que não reproduz tão bem o movimento do braço robótico e está incluida no repositório ntbd .