gazebo calibration package

Este é o relato da experiência de utilização do pacote calibration_gazebo que está disponível no seguinte repositório:

https://github.com/oKermorgant/calibration_gazebo

Na primeira execução reparei que este pacote depende do pacote slide_publisher. Esta dependência pode ser satisfeita com o seguinte comando

sudo apt install ros-noetic-slider-publisher

Também está disponível no seguinte repositório

https://github.com/oKermorgant/slider_publisher

O erro que denuncia a dependência é o seguinte

Resource not found: slider_publisher

O comando que faz o spawn do quadro de xadrez para a calibração da camera é o seguinte:

roslaunch calibration_gazebo landmark.launch

Este comando pressupõe que o ambiente simulado já esteja em execução, pelo que no caso do projecto do automec será necessário executar por exemplo o seguinte comando:

roslaunch simulation_bringup traxxas_free_drive.launch

No entanto na experiência efectuada o quadro de xadrez não apareceu.

Segundo a descrição do pacote o programa tentará identificar o link da camera (o primeiro a ter a palavra camera) e a fazer o spawn do quadro de xadrez á sua frente, caso não encontre o quadro aparece numa posição fixa.

O pacote contem os launch files que permite lançar dois ambientes simulados para testar o seu funcionamento.

  • roslaunch calibration_gazebo perspective.launch
  • roslaunch calibration_gazebo fisheye.launch

A execução do primeiro, seguido do comando para lançar o quadro, permitiu verificar que o quadro aparece em frente da camera.

Numa tentativa de identificar o que estava a acontecer, foi efectuada uma correcção do launch file de modo a poder observar as mensagens geradas pelo node.

No caso do do ambiente exemplo pré configurado no pacote 0 resultado na consola foi  o seguinte:

process[calibration_gazebo/landmark_bridge-2]: started with pid [404599]
False
False
Found camera link at camera::camera_link
[INFO] [1632494079.717182, 0.000000]: Loading model XML from file /home/inaciose/catkin_ws/src/calibration_gazebo/sdf/landmark.sdf
[INFO] [1632494079.735229, 0.000000]: Waiting for service /gazebo/spawn_sdf_model
[INFO] [1632494079.743581, 16.158000]: Calling service /gazebo/spawn_sdf_model
[INFO] [1632494080.021423, 16.313000]: Spawn status: SpawnModel: Successfully spawned entity

Ficando o processo de calibração disponível conforme a imagem acima

No caso do ambiente simulado do projecto do automec o quadro de xadrez nunca aparece no ecrã e surgem as seguintes mensagens de erro.

process[calibration_gazebo/landmark_bridge-2]: started with pid [415518]
False
(...)
False
Could not find camera link, spawning landmark at (0,0,0.5)
[INFO] [1632494966.819862, 0.000000]: Loading model XML from file /home/inaciose/catkin_ws/src/calibration_gazebo/sdf/landmark.sdf
[INFO] [1632494966.824028, 24.350000]: Waiting for service /gazebo/spawn_sdf_model

Como após algumas pesquisas e verificações não consegui colocar o paccote a funcionar no ambiente de simulação usado no projecto do automec, passei para outra abordagem.

A nova abordagem foi usar apenas ficheiro sdf que define o quadro de xadrez, integrando-no pacote que define o ambiente de simulação.

 

traxxas_firmware

Firmware de controlo com ROS 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)

rosrun rosserial_python serial_node.py /dev/ttyUSB0
roslaunch ackermann_vehicle_gazebo linang_to_ackermann.launch message_type:=physical

Exemplo de exploração em modo real e treino com o node linang_to_ackermann.py (usando um launch file)

rosrun rosserial_python serial_node.py /dev/ttyUSB0
roslaunch ackermann_vehicle_gazebo linang_to_ackermann.launch message_type:=physical train:=1
rqt

 

Exemplo do output de uma ligação bem sucedida do node serial_node.py

~$ rosrun rosserial_python serial_node.py /dev/ttyUSB0
[INFO] [1620470781.458011]: ROS Serial Python Node
[INFO] [1620470781.460781]: Connecting to /dev/ttyUSB0 at 57600 baud
[INFO] [1620470783.566170]: Requesting topics...
[INFO] [1620470783.599243]: Note: subscribe buffer size is 512 bytes
[INFO] [1620470783.603585]: Setup subscriber on pub_dir [std_msgs/Int16]
[INFO] [1620470783.618133]: Setup subscriber on pub_vel [std_msgs/Int16]
^C[INFO] [1620470867.461564]: Sending tx stop request

 

Ligações entre o ESP32 e o PCA9685

ESP32 > PCA9685

Ligações entre o PCA9685 com o servo da direcção e o esc

canal 0 – servo da direção

cana 1 – esc

multibot_description

ROS multi robot in Rviz and Gazebo demo

https://github.com/inaciose/multibot_description

 

roslaunch multibot_description world_1bot.launch

roslaunch multibot_description spawn_bot.launch ns:=sibot2 botcolor:=Blue x:=2

roslaunch multibot_description spawn_bot.launch ns:=sibot3 botcolor:=Red x:=3

roslaunch multibot_description world_2bot.launch

sibot_tools

TODO:

Need to update to stay on pair with automec version

  • linang_to_ackermann.py
  • linang_to_ackermann.launch

 

sibot_tools

Tools for exploring the sibot robots

https://github.com/inaciose/sibot_tools

Nodes

linang_to_ackermann.py

twist_to_ackermann.py

 

Teleop

O teleop primário é efectuado com o rqt, executado simplesmente por:

rqt

Caso não estejam já presentes no interface, deve-se proceder à configuração dos seguintes plugins:

  • Plugins > Robot tools > Robot Steering (select namespace/ topic cmd_vel)
  • Plugins > Visualization > Image Viewer (select namespace/ topic image_raw)

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.

 

sibot_gazebo

sibot_gazebo

Pacote ROS com os mundos, modelos e nodes de controlo de objectos.

Launch

roslaunch sibot_gazebo world.launch
roslaunch sibotdiff_bringup gazebo_world.launch world:=signal_panel
roslaunch sibot_gazebo signal.launc

Nodes

sidual_signal_panel_controller

  • name=”ns” default=”/”
  • name=”spackage” default=”sibot_gazebo”
  • name=”sfolder” default=”images/panel_signals”
  • name=”mon1″ default=”monitor1/image1″
  • name=”mon2″ default=”monitor2/image2″
todo
change to allow 1 or 2 panels mode
change to read the first 10 images of folder and remove image load params

sibot_opencv

sibot_opencv

Pacote ROS com os nodes de visão artificial só com opencv

https://github.com/inaciose/sibot_opencv

Launch

roslaunch sibot_opencv signal_recognition.launch

Nodes

signal_regonition.py

    • name=”image_raw_topic” default=”/camera2/rgb/image_raw”
    • name=”twist_cmd_topic” default=”/vel_cmd”
    • name=”twist_linear_x” default=”0.5″

 

sibotackm_mlcnn

sibotackm_mlcnn

Pacote com nodes de machine learning com convolutional neural networks

https://github.com/inaciose/sibotackm_mlcnn

Launch

roslaunch sibotackm_bringup world_bot_mldrive_signal.launch folder:=cleantrack3

Nodes

write_data

training_node

ml_driving-dave

Required python packages

sudo apt install python3-pip
pip3 install opencv-python
pip3 install pandas
pip3 install sklearn
pip3 install tensorflow
pip3 install imgaug

end

sibotackm_bringup

sibotackm_bringup

https://github.com/inaciose/sibotackm_bringup

Launch depends

sibotackm_gazebo

sibotackm_tools

Launch

Run world with robot and ackerman publisher node

roslaunch sibotackm_bringup world_bot_twist.launch

roslaunch sibotackm_bringup world_bot_twist_mix.launch

 

Run all nodes for autonomous drive in lanes with panel signals

roslaunch sibotackm_bringup world_bot_mldrive_signal.launch mlmodel:=cleantrack1.h5

end