Firmware de controlo comROS do servo da direcção e do ESC de um rover traxxas,para um ESP8266 nodeMCU V3 com um PCA9685.
Usado no rover traxxas do Automec – Universidade de Aveiro
O firmware subscreve os tópicos:
pub_dir, (angulo de direcção entre -90º e 90º a aplicar ao servo)
pub_vel (velocidade expressa entre |0, 90| sendo o seu sinal indicador da direcção, o negativo é marcha atrás)
Pode ser expandido para controlar também o servo do diff. traseiro e do diff. dianteiro.
ESP8266 (micontrolador de 32bits com wifi integrado);
PCA9685 (gerador de PWM de 12bits e 16canais)
IDE: platformIO,
Board: ESP8266 nodeMCU 12E
Na primeira fase está implementado o controlo do ESC e do servo da direcção.
A ligação do firmware aos node ROS depende do pacote rosserial.
Caso não esteja instalado, pode-se instalar com o seguinte comando (substituir noetic, pela identificação da distribuição do ROS):
sudo apt install ros-noetic-rosserial
Depende de um node que publique mensagens twist nos tópicos apropriados. Como por exemplo o node: linang_to_ackermann.py.
O node deve ser lançado com a seguinte configuração
message_type:=physical
O node pode ser configurado para dois tipos de input,:
train:=1 (subscreve um único tópico twist com velocidade angular e linear)
train:=0 (pré-definido, subscreve dois tópicos twist, um com velocidade angular, e outro com a velocidade linear)
Identificação da porta serie a usar na comunicação
~$ dmesg
[12722.986709] usbserial: USB Serial support registered for ch341-uart
[12722.986727] ch341 1-1:1.0: ch341-uart converter detected
[12722.987254] usb 1-1: ch341-uart converter now attached to ttyUSB0
Exemplos de exploração do sistema
Cada um dos comandos deve ser lançado num terminal independente
Exemplo de exploração em modo real e autónomo com o node linang_to_ackermann.py (usando um launch file)
Antes de volta a trabalhar no ficheiro urdf com o modelo do robot de lagartas, fui, mais uma vez, ver se conseguia colocar o plugin phobos para o blender de modo a passar a usar a funcionalidade de import/export de urdfs no blender e desse modo usar o blender para desennhar os modelos urdf dos robots.
Mais uma vez não tive sucesso nessa instalação.
Entretanto consegui acabar o urdf do robot com lagartas á mão e ficou com o seguinte aspecto no rviz e no gazebo:
Visualização do urdf do robot de lagartas (tracked robot) no RvizVisualização do urdf do robot de lagartas (tracked robot) no Gazebo
Existe uma pequena diferença relação ao modelo definido no sdf original, o angulo dos flippers face ao solo é menor (os flippers são as extremidades que existem anexas a cada lagarta)
Passado o problema da conversão do sdf para urdf, passei ao problema do controlo do movimento do robot, que gostava que fosse efectuado com base no seguinte plugin do gazebo (e a respectiva evocação no urdf):
Mas o problema, á primeira vista é que este plugin não tem interface para topicos do ROS e aparenta ter como input o teclado via o seguinte plugin do gazebo (e a respectiva evocação no urdf):
O modelo de robot de lagartas definido no mundo acima usa o seguinte plugin especifico para robots de lagartas (tracked robot):
libSimpleTrackedVehiclePlugin.so
Primeiro passei por um processo de conversão manual do sdf para urdf, no entanto o resultado não foi satisfatório. Todos os componentes do modelo ficaram colocados no eixo dos y, e as extremidades das lagartas também não ficaram bem posicionadas.
O modelo tal como está no mundo do gazebo em sdf tem o seguinte aspecto:
O aspecto original no rviz e no gazebo do modelo após o primeiro processo manual de conversão do sdf para urdf era o seguinte:
2021-04-22
sibotdiff_description & sibotdiff_bringup
Actualizei o sibotdiff_description da seguinte forma:
Removi os models antigos (robot01 e robot02) e respectivas pastas de includes, e copiei o model robot01 do multibot_description (e respectiva pasta de includes) para a para a pasta urdf do sibotdiff_description.
Na pasta launch do sibotdiff_bringup actualizei os ficheiros spawn_* e world_* para ficarem em linha com o existente no multibot_description.
Os modelos e ficheiros relacionados do sibotdiff_description vão ficar a ser desenvolvidos no multibot_description até ficarem estáveis e serem copiados para o sibotdiff_description.
multibot_description
Passando para o desenvolvimento no multibot_description o proximo passo é passar a usar macros e fazer com que a robot seja mais estavel (eventualmente pesado)
Sobre as propriedades fisicas seguem dois links importantes
Para além do rqt existem outras ferramentas de teleop para conduzir o robot.
Essas ferramentas são opcionais e tem de ser instaladas através do apt, e o pacote sibot_tools tem os launch files que permitem intermediar o seu lançamento.
Pacotes opcionais
Permitem opções alternativas ao uso do rqt para enviar mensagens para tópicos twist.msg
joy
teleop_tools
teleop_twist_joy
Joy
Pacote base para leitura do joystick e publicação de mensagens joy.msg, notopico joy
Install
sudo apt install ros-noetic-joy
Os pacotes seguintes pacotes dependem do joy para funcionar:
teleop_tools
teleop_twist_joy
O pacote teleop_tools é mais versátil e por isso o mais aconselhado
Teleop tools instructions
Pacote de teleop que publica twist messages
Depende do pacote joy
Install
sudo apt install ros-noetic-teleop-tools
Este pacote fornece as funcionalidades de teleop com base nos seguintes inputs:
Keyboard
Mouse
Joystick
A forma como se comporta o teleop pode ser configurado nos launch files e em config files em yaml.
Mouse teleop
Este pacote fornece as funcionalidades de teleop para conduzir os robots com base no rato
A forma como a mensagem é construída pode ser configurada no ficheiro yaml.
Mouse configuration files
config/teleop_tools/mouse.yaml
Joystick teleop
Este pacote fornece as funcionalidades de teleop para conduzir os robots com base no joystick
Os componentes linear e angular da mensagem twist, assim como os botões de activação, super speed,as diversas acções opcionais/complementares, e os factores aplicados, podem ser configurados no ficheiro yaml.
Joystick configuration files
config/teleop_tools/joystick.yaml
Keyboard teleop
Este componente não está funcional
Teleop twist_joy instructions
Este pacote fornece as funcionalidades de teleop para conduzir os robots com base no joystick
Depende do pacote joy
Install
sudo apt install ros-noetic-teleop-twist-joy
Ficheiro de configuração yaml
config/teleop_twist_joy/joystick.yaml
Para os novos comandos serem enviados para o topic tem de se estar a premir um botão.
Os componentes linear e angular da mensagem twist, assim como os botões de activação e super speed, e os factores aplicados, podem ser configurados no ficheiro yaml.
Neste projecto pretendo explorar o controlo de vários tipos de viaturas com o ROS (Robotic Operating System).
Numa primeira fase será abordado o controlo de modelos de robots em ambientes simulados com o Gazebo e posteriormente passarei para robots e situações reais.
Os tipos de viaturas abordados neste projecto são os seguintes:
Viaturas de 4 rodas com direcção akermann (sibotackm)
Viaturas de 2 rodas com direcção diferencial (sibotdiff)
Viaturas de 4 rodas com direcção derrapante (sibotskid)
Viaturas com 2 lagartas (sibottrak)
Viaturas mecanum com 4 rodas omnidirecionais (sibotmeca)
O software está dividido por vários pacotes dedicados a a cada tipo de viatura e pacotes comuns usados por todos os tipos de viaturas.