Condução autónoma em pista – ackerbot – primeiros testes

No dia 1 de Agosto de 2021 foram feitos os primeiros testes de condução autónoma do robot com direcção ackermann.

Os resultados foram promissores. Apesar do despiste inicial, a segunda tentativa foi bem sucedida.

A pista onde foram realizados os testes foi feita com cartolina preta. e fita cola amarela fina.

Os primeiros testes foram efectuados sem a linha central.  A faixa de rodagem tem 40 cm. O circuito está compreendido num espaço rectangular de 1.90M por 2.40M,

O resultado do primeiro teste pode ser observado no seguinte video.

O resultado da condução autónoma não foi propriamente bom mas foi promissor. Existiram despistes. Mas também sessões em que o robot conduziu várias voltas sem qualquer problema.

Na fase de recolha. o problema detectado foi a dificuldade de controlar o veiculo com precisão e suavidade.

O método de conversão da mensagem twist na velocidade aplicada ao motor e o angulo aplicado na direcção, extrai a velocidade linear, e computa o angulo com base na relação entre a velocidade angular, a velocidade linear e distancia entre eixos.

Este método faz com que a capacidade de virar o carro diminui com o aumento da velocidade, e que apenas a velocidades baixas se consegue virar de forma notável.

Estes teste foram realizados com o mcu ESP8266 e o usado nele subscrevia e descodificava a mensagem twist.

A mensagem twist era produzida por um joystick virtual na app ROS-Mobile.

 

ackerbot ms2 rms tests

Resumo dos testes

Depois de acertar com as modificações para o mcu passar a subscrever apenas o pub_dir e pub_vel, e com o circuito ainda com a linha ao centro foram efectuadas 9 sessões de condução com recolha de dados (write). Posteriormente foi treinado o modelo rrm01.h5 com uma selecção das sessões.

Os resultados da condução autónoma foram muito desanimadores.

Retirei a fita cola que fazia de linha central e fiz mais uma serie de sessões de condução para  recolha de dados,

Posteriormente com base nos dados de condução recolhidos foi treinados os modelos:

  • rrm02.h5 (set 12)
  • rrm02a.h5 (set 14)
  • rrm02b.h5 (set 11)
  • rrm02c.h5 (set 13)

A inexperiência de condução autonoma inicial com o modelo rrm02.h5, no mesmo sentido que foi efectuado o treino, também foi desanimadora.

No entanto, quando experimentei colocar o robot no sentido contrário os resultados melhoraram muito. O robot deu muitas voltas sem se despistar.

Com o modelo rrm02a.h5, o comportamento em sentido contrario foi bom, e no mesmo sentido foi ligeiramente melhor.

Os melhores resultados no mesmo sentido foram obtidos com o modelo rrm02c.h5, e não foram satisfatórios mas o desempenho no sentido contrário não foi o melhor.

A melhor situação será provavelmente a que foi obtida com o modelo rrm02a.h5.

Condições gerais dos testes

A camera estava inclinada o mais possível para baixo, a apontar para o mais perto do robot.

Velocidade de 0.15 M/s

Factor angular de 2

tamanho das imagens: 320 x 160

Software usado nos testes

https://github.com/inaciose/ackerbot_firmware/tree/a603cdecd182929d5878c34179876f9577fe9d89

https://github.com/inaciose/ackerbot/tree/8c3089886eb8cd15f8af7ec1eee050a3b7f1cb17

 

ackerbot

 

Github Repositories for this Project

https://github.com/inaciose/ackerbot_firmware

https://github.com/inaciose/ackerbot

https://github.com/inaciose/ackerbot_esp32

 

Dependências

https://github.com/inaciose/jetson_camera

sudo apt install ros-melodic-gps-common

sudo apt install ros-noetic-gps-common

Comandos básicos

roslaunch ackerbot free_drive.launch

Sessões

No dia 1 de Agosto de 2021 foram feitos os primeiros testes de condução autónoma do robot com direcção ackermann.

Testes de 24 de Agosto de 2021 no radiomaker.space.

 

Scripts e commandos usados

Comandos úteis

nmap -sn 192.168.1.0/24

sudo ip addr add 192.168.0.166/24 broadcast 192.168.0.255 dev ens33

Ligação a uma nova rede wifi

Login pela consola Serial do jetson nano por cabo FTDI, ligado aos pinos RX, TX & GND disponíveis por baixo do modulo (. . R T . . G . …)

Lista as redes wifi disponíveis

nmcli d wifi list

Ligar a um SSID com PASSWORD

sudo nmcli dev wifi connect SSID password PASSWORD

Adicionar um IP extra

nmtui

Usar a interface d o nmtui para adicionar o ip extra.

Eventualmente pode ser usado algo parecido com o comando abaixo

sudo ip addr add 192.168.0.64/24 broadcast 192.168.0.255 dev ens33

 

No computador remoto

source jnrosmaster.bash

jnrosmaster.bash
export ROS_MASTER_URI=http://192.168.1.64:11311

ROS mobile

http://wiki.ros.org/ROS-Mobile

https://github.com/ROS-Mobile/ROS-Mobile-Android

Experiencia na execução de PCBs com CNC3018

Design no eagle para nova placa para o microcontrolador.

Esquema – akbesp32v1-05-esquema

Board – akbesp32v1-05-board

 

Rosserial TCP

Quando o node rosserial estabelece ligação tcp com a o microcontrolador a correr um programa preparado para o rosserial é exibida a seguinte mensagem informativa do ip do microcontrolador.

[INFO] [1629761354.148552]: Established a socket connection from 192.168.1.136 on port 53589

Este ip pode ser usado para fazer o upload de um novo programa para o mcu por OTA.

Required packages

sudo apt install ros-melodic-usb-cam
sudo apt install ros-melodic-rosserial

pip3 install matplotlib
#Successfully installed cycler-0.10.0 kiwisolver-1.3.1 matplotlib-3.3.4 numpy-1.19.5 pillow-8.3.1 pyparsing-2.4.7 python-dateutil-2.8.2 six-1.16.0

pip3 install scikit-learn
#Successfully installed joblib-1.0.1 numpy-1.19.5 scikit-learn-0.24.2 scipy-1.5.4 threadpoolctl-2.2.0

#pip3 install imgaug
#ModuleNotFoundError: No module named ‘skbuild’

pip install scikit-build
#Successfully installed distro-1.5.0 packaging-21.0 pyparsing-2.4.7 scikit-build-0.11.1 setuptools-57.4.0 wheel-0.36.2

pip3 install imgaug
#Successfully installed Pillow-8.3.1 PyWavelets-1.1.1 Shapely-1.7.1 cycler-0.10.0 decorator-4.4.2 imageio-2.9.0 imgaug-0.4.0 kiwisolver-1.3.1 matplotlib-3.3.4 networkx-2.5.1$

pip3 install tensorflow

 

rosrun rosserial_python serial_node.py tcp

# important before run
source ~/catkin_build_ws/install/setup.bash –extend

# run basic
roslaunch ackerbot mlwrite_data_lanefollow.launch
roslaunch ackerbot mltraining_lanefollow.launch
roslaunch ackerbot mldriving_lanefollow.launch

 

 

https://github.com/espressif/esptool/wiki/ESP32-Boot-Mode-Selection

https://docs.platformio.org/en/latest/platforms/espressif32.html

 

 

https://github.com/peter-moran/jetson_csi_cam

Install gscam with gstreamer-1.0 support

cd ~/catkin_ws/src
git clone https://github.com/ros-drivers/gscam.git
cd ~/catkin_ws
catkin_make

 

https://github.com/sfalexrog/jetson_camera

roslaunch jetson_camera jetson_camera.launch

Kinect v2 – Kinect xbox one on ROS noetic – ubuntu 20.04 – Cuda 10.1

Exploring Kinect v2 – Kinect xbox one on ROS noetic – ubuntu 20.04 – Cuda 10.1

Software required, cuda its optional

cuda 10.1

libfreenect2

iai-kinect2

 

https://www.notaboutmy.life/posts/run-kinect-2-on-ubuntu-20-lts/

I followed the document available on  address above, to successfully install the cuda and libfreenect2 with cuda.

As is, the procedure described failed. I need  to add some more steps. The steps are found after hours of trial and error.

This process install the cuda 10.1 from the ubuntu 20.04 repos. Before this procedure I tried the installation form nvidia repos, but i never had success.

Install and test nvidia cuda from ubuntu repos

apt-get install cuda-toolkit -y

After install you may check the installed cuda compiler version with

nvcc –version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Sun_Jul_28_19:07:16_PDT_2019
Cuda compilation tools, release 10.1, V10.1.243

Then to check if the cuda is working, you need to compile the hello.cu code available in the following address:

https://linuxconfig.org/how-to-install-cuda-on-ubuntu-20-04-focal-fossa-linux

Compile a Sample CUDA code

$ nvcc -o hello hello.cu
$ ./hello
Max error: 0.000000

The result must be

Max error: 0.000000

if we get the following, something is wrong

Max error: 2.000000

You can proceed with libfreenect2 installation, but cuda will not work

 

Prepare the install of libfreenect2, installing the build tools and libraries

sudo apt-get install build-essential cmake pkg-config
sudo apt-get install libusb-1.0-0-dev
sudo apt-get install libturbojpeg0-dev
sudo apt-get install libglfw3-dev
sudo apt-get install libva-dev libjpeg-dev
sudo apt-get install libopenni2-dev
sudo apt-get install doxygen
sudo apt-get install nvidia-opencl-dev

You need gcc 8 to compile libfreenect2 with cuda

sudo apt -y install gcc-7 g++-7 gcc-8 g++-8 gcc-9 g++-9
sudo update-alternatives –install /usr/bin/gcc gcc /usr/bin/gcc-7 7
sudo update-alternatives –install /usr/bin/g++ g++ /usr/bin/g++-7 7
sudo update-alternatives –install /usr/bin/gcc gcc /usr/bin/gcc-8 8
sudo update-alternatives –install /usr/bin/g++ g++ /usr/bin/g++-8 8
sudo update-alternatives –install /usr/bin/gcc gcc /usr/bin/gcc-9 9
sudo update-alternatives –install /usr/bin/g++ g++ /usr/bin/g++-9 9

# select v8:

sudo update-alternatives –config gcc
sudo update-alternatives –config g++

# check version

gcc –version
g++ –version

 

 

ESP32-CAM ROS rosserial_arduino platformio

ESP32-CAM ROS rosserial_arduino platformio

Create a new project, and select:
Board: AI Thinker ESP32-CAM
Framework: Arduino

Add the Rosserial Arduino Library from frankjoshua to the project
lib_deps = frankjoshua/Rosserial Arduino Library@^0.9.1

For a simple demo over wifi copy the sample in the following file

Esp8266HelloWorld.ino
.pio/libdeps/esp32cam/Rosserial Arduino Library/examples/Esp8266HelloWorld

Remove the following line (near line 13)
#include <ESP8266WiFi.h>

//Change the wifi ssid and pass
const char* ssid = “your-ssid”;
const char* password = “your-password”;

// Set the rosserial socket server IP address
IPAddress server(192,168,1,1);

// Check the
const uint16_t serverPort = 11411;

Compile and upload

On the ros master run the rosserial node in tcp mode

rosrun rosserial_python serial_node.py tcp

We can build and install the ros_lib for the current ros version by install the rosserial arduino

sudo apt install ros-noetic-rosserial-arduino

And build the library with the following command

rosrun rosserial_arduino make_libraries.py .

After, we shall copy the ros_lib folder to the lib folder of the platformio project

The last rosserial_arduino version on the following address

https://github.com/ros-drivers/rosserial/

ESP32-CAM Video on ROS

ESP32-CAM on ROS

Install the Micro-RTSP in Platformio (use the add library to a project tool)

https://github.com/geeksville/Micro-RTSP

The github version altough the same number is not the same installed by add library to a project tool, in platformio.

So dont mix the samples or you will get some linking errors.

This error can be the result of a bad powering, or bad board configuration (because there are more than one model of ESP32-CAM)

[E][camera.c:1049] camera_probe(): Detected camera not supported.
[E][camera.c:1249] esp_camera_init(): Camera probe failed with error 0x20004

To fix it, it is a configuration issue, in setup(), try to change

cam.init(esp32cam_config);

to

cam.init(esp32cam_aithinker_config);

or to:

cam.init(esp32cam_ttgo_t_config);

 

The file folowing file have the configurarion for each model:

.pio/libdeps/esp32can/Micro-RTSP/OV3640.cpp

If we reduce the .frame_size we can make a more fluid video.

Change from

.frame_size = FRAMESIZE_SVGA,

To

.frame_size = FRAMESIZE_QVGA,

Its a good improvement

There are chances of some serial monitor issues,

Check, if  cannot see any output in platformio serial monitor.

 

Stream URL

rtsp://[IPADDRESS]:8554/mjpeg/1

In VLC choose :network-caching=0 in VLC

There are some issues with performance with ROS compared with VLC

For ESP32-Cam we need the following firmware

https://github.com/inaciose/esp32-cam-rtsp

 

For ROS we may use the following packages

http://wiki.ros.org/video_stream_opencv

sudo apt install ros-noetic-video-stream-opencv

Or

https://github.com/inaciose/sibot_video

Clone and catkin_make

 

Serial issue ESP32-CAM – MB – vscode – platformio

If  the serial monitor of platformio in vscode doesnt output anything, maybe its because some ESP32 boards have a mechanism that connects RTS/DTR to the EN/GPIO0 lines, and if the RTS/DTR are driven the wrong way when the serial monitor opens, it might shut down the ESP32.

We can try adding each of follow blocks to the platformio.ini and retry opening the serial monitor, until it works.

If one doesn’t make a difference, delete it and try again withthe next one.

1.)

monitor_rts = 0
monitor_dtr = 0

2.)

monitor_rts = 0
monitor_dtr = 1

3.)

monitor_rts = 1
monitor_dtr = 0

4.)

monitor_rts = 1
monitor_dtr = 1

https://docs.platformio.org/en/latest/projectconf/section_env_monitor.html

For me, with the ESP32-CAM (aithinker clone) with MB (The mother board allow to program directly from usb cable), the one that works was:

monitor_rts = 0
monitor_dtr = 0

platformio.ini file sample for the project

[env:esp32cam]
platform = espressif32
board = esp32cam
framework = arduino
monitor_speed = 115200
lib_deps = geeksville/Micro-RTSP@^0.1.6
monitor_rts = 0
monitor_dtr = 0

There are some usefull comands to check the serial comunications on platformio, the following are a sample;

pio device monitor –encoding hexlify
pio device monitor –filter debug

pio device –help
pio device COMMAND –help

Info source

https://community.platformio.org/t/noob-stuck-on-esp32-cam-mb-with-pio-vscode/19117/4

sibot log

2021-04-05

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 Rviz
Visualização do urdf do robot de lagartas (tracked robot) no Rviz
Visualização do urdf do robot de lagartas (tracked robot) no Gazebo
Visualizaçã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):

libSimpleTrackedVehiclePlugin.so

<plugin filename=”libSimpleTrackedVehiclePlugin.so” name=”simple_tracked_vehicle”>
<body>base_link</body>
<left_track>left_track</left_track>
<right_track>right_track</right_track>
<left_flipper>front_left_flipper</left_flipper>
<left_flipper>rear_left_flipper</left_flipper>
<right_flipper>front_right_flipper</right_flipper>
<right_flipper>rear_right_flipper</right_flipper>
<track_mu>2</track_mu>
<track_mu2>0.5</track_mu2>
</plugin>

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):

libKeysToCmdVelPlugin.so

<gui>
<plugin name=”keyboard” filename=”libKeyboardGUIPlugin.so”/>
</gui>

<plugin filename=”libKeysToCmdVelPlugin.so” name=”keyboard_control”>
<publish_as_twist>true</publish_as_twist>
<cmd_vel_topic>~/simple_tracked/cmd_vel_twist</cmd_vel_topic>
</plugin>

Apesar da referência ao seguinte tópico do ros:

~/simple_tracked/cmd_vel_twist

não vejo qualquer referencia a esse topico com o rostopic list

/bot1/joint_states
/clock
/gazebo/link_states
/gazebo/model_states
/gazebo/parameter_descriptions
/gazebo/parameter_updates
/gazebo/set_link_state
/gazebo/set_model_state
/rosout
/rosout_agg
/tf
/tf_static

O codigo fonte dos gazebo  plugins envolvidos estão disponíveis em:

https://github.com/osrf/gazebo/blob/gazebo11/plugins/KeyboardGUIPlugin.cc

https://github.com/osrf/gazebo/blob/gazebo11/plugins/KeysToCmdVelPlugin.cc

https://github.com/osrf/gazebo/blob/gazebo11/plugins/TrackedVehiclePlugin.cc

https://github.com/osrf/gazebo/blob/gazebo11/plugins/SimpleTrackedVehiclePlugin.cc

Compare gazebo plugins source

https://github.com/osrf/gazebo/blob/gazebo11/plugins/DiffDrivePlugin.cc

https://github.com/osrf/gazebo/blob/gazebo11/plugins/SkidSteerDrivePlugin.cc

 

Compare rROS gazebo plugins source

https://github.com/ros-simulation/gazebo_ros_pkgs/blob/noetic-devel/gazebo_plugins/src/gazebo_ros_diff_drive.cpp

https://github.com/ros-simulation/gazebo_ros_pkgs/blob/noetic-devel/gazebo_plugins/src/gazebo_ros_skid_steer_drive.cpp

 

Linux gazebo plugins lib files

/usr/lib/x86_64-linux-gnu/gazebo-11/plugins/libSimpleTrackedVehiclePlugin.so
/usr/lib/x86_64-linux-gnu/gazebo-11/plugins/libTrackedVehiclePlugin.so
/usr/lib/x86_64-linux-gnu/gazebo-11/plugins/libWheelTrackedVehiclePlugin.so

 

Desenvolver ros plugins para o gazebo

sudo apt install libgazebo11

sudo apt install libgazebo11-dev

http://gazebosim.org/tutorials?tut=ros_installing&cat=connect_ros

https://github.com/ros-simulation/gazebo_ros_pkgs

cd ~/catkin_ws/src
git clone https://github.com/ros-simulation/gazebo_ros_pkgs.git -b noetic-devel

www.theconstructsim.com/create-a-ros-sensor-plugin-for-gazebo/

 

Desenvolver plugins para o gazebo

http://gazebosim.org/tutorials?cat=write_plugin

http://gazebosim.org/tutorials?tut=plugins_model&cat=write_plugin

 

Other plugins sources

https://github.com/onlytailei/gym_ped_sim

https://github.com/wojiaojiao/pegasus_gazebo_plugins

 

Other robots

https://wiki.cogni.io/Simulation

2021-04-24

Já desde ontem que ando de volta da simulação do robot com lagartas, que vai ficar no seguinte repositório.

https://github.com/inaciose/sibottrkd_description

Alguns launch files

roslaunch sibottrkd_description spawn_bot.launch

roslaunch sibottrkd_description world_1bot.launch

roslaunch sibottrkd_description world.launch world:=tracked_vehicle_simple

Tenho estado a construir o modelo com base no modelo disponível no seguinte mundo (world file) do gazebo:

https://github.com/osrf/gazebo/blob/gazebo11/worlds/tracked_vehicle_simple.world

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

http://wiki.ros.org/urdf/Tutorials/Adding%20Physical%20and%20Collision%20Properties%20to%20a%20URDF%20Model

<inertial>
<mass value=”10″/>
<inertia ixx=”0.4″ ixy=”0.0″ ixz=”0.0″ iyy=”0.4″ iyz=”0.0″ izz=”0.2″/>
</inertial>

<mass> (massa) em Kg

<inertia> Matriz de inercia. 3×3, só são necessárias as bolds.

Para mais informações sobre como calcular estes valores, ver:

https://en.wikipedia.org/wiki/List_of_moments_of_inertia#List_of_3D_inertia_tensors

Este tipo de cálculos (inertia) pode ser executado por macros.

 

 

rviz.launch melhorado para usar multiplas configurações

modelos robot00, e robot01, alterados para terem as rodas e o chassis com cores diferentes (a cor do chassis é escolhido num dos argumentos)

2021-04-21

multibot_description

Depois de ter conseguido por o multi robot a funcionar no sibot, decidi fazer um pacote especifico para servir como demo.

launch commands

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

relativamente ao sibotdiff_description & bringup, removei o botname, e substitui pelo namespace onde ele era usado.

Consegui por o imu a funcionar.

Sibot, multi robot experiences

De volta da tentativa de colocar multiplos robots a funcionar correctamente no gazebo e no rviz.

Há três dias que ando de volta disto e ainda não consegui por as coisas a funcionar no rviz.

Creio que o problema esta no tf_prefix que deixou de funcionar, no ros noetic, mas não tenho a certeza.

No gazebo creio que não há problemas vejo a simulação a funcionar.

Tentativa 1

Hoje tentei a solução que está no primeiro link, o segundo link é para o pacote rosbot_description necessário para este teste

https://community.husarion.com/t/rviz-with-multiple-rosbots/792/4

https://github.com/husarion/rosbot_description

Também não funcionou.

Tentativa 2

Com base nos ficheiros xacro robot02 que tem o namespace tem todos os links e joints fiz as seguintes alterações:

Alterei ficheiro gazebo.diff_drive_controller.xacro, com base nas tags com a variável namespace disponíveis no ficheiro gazebo.xacro rosbot

Comentei as entradas do IMU.

E funcionou !

Tenho que fazer um pacote especifico para o multi robot.

 


 

roslaunch sibotdiff_bringup world_with_botns.launch model:=robot02

roslaunch sibotdiff_bringup spawn_botns.launch ns:=sibot1 botname:=bot1 botcolor:=Red x:=1

roslaunch sibotdiff_bringup spawn_botns.launch ns:=sibot2 botname:=bot2 botcolor:=Blue x:=2

 

 

aplicar xacro e converter xacro files para um urdf único

rosrun xacro xacro -o model.urdf robot02.urdf.xacro botname:=bot1 namespace:=bot1 botcolor:=Green


 

roslaunch sibotackm_bringup world_bot_twist.launch

Joystick para conduzir os robots no gazebo

Passar a usar o joystick em vez do rqt para conduzir o robot

As coisas não correram muito bem. O manipulo para andar nas diversas direcções não funciona bem para conduzir o carro.

 

Instalar

sudo apt-get install ros-melodic-joy

sudo apt install ros-noetic-teleop-twist-joy

Mais informação:

Joystick no ROS

http://wiki.ros.org/teleop_twist_joy

 

rospibot6

Pacote ROS para controlar base de robot móvel de propulsão diferencial com um RaspberryPi e um STM32F.

https://github.com/inaciose/rospibot6

O pacote do ROS inclui o seguinte software:

  • O node base que comunica por I2C com o  microcontrolador STM32F
  • Vários nodes em Python que implementam isoladamente algumas das funções incluídas no node base.
  • Conjuntos de  launch files e yaml com parâmetros de exemplo para a exploração da base em tarefas de navegação autónoma.

O node base depende do software para o microcontrolador STM32F.

O node base foi pensado para ser monolítico e incluir nele várias funções que podem estar dispersas por vários módulos.

  • twist_diff
  • pid controler
  • IMU MPU6050
  • odometria
  • interface de LCD e botões
  • interface MCU ROS

No entanto, apesar de todos estas funções estarem implementadas, até este momento momento as tarefas de navegação bem sucedidas fizeram uso dos node externo para a odometria e do controlo pid existente no microcontrolador,

Enumerando as funcionalidades no node base e o seu estado

O componente twist_diff que faz a conversão das velocidades expressas nas mensagens twist para as velocidades que cada um das duas rodas deve ter está a funcionar e a ser usado (se bem que foi desenhado de forma diferente da implementação do chefbot)

O pid controler tanto quanto me lembro está a funcionar, mas não está a ser usado.

O IMU está funcional e foi objeto de testes bem sucedidos com o pacote robot_pose_ekf.

A odometria, está implementada mas tanto quanto me lembro tem problemas e não está a ser usada, pois os robots estão a usar um node externo.

O interface de LCD e botões está funcional mas não está a ser usado, porque nenhum dos robots atuais tem o hardware necessário.

O interface MCU ROS está a funcionar.

O software para o microcontrolador STM32F será uma das versões disponíveis no seguinte repositório.

https://github.com/inaciose/rospibot6mcu

Sem uma averiguação mais detalhada o programa adequado deve ser um destes dois:

  • rospibot6_stm32d_v4
  • rospibot6_stm32d_v4d

A principal diferença entre estes dois programas é que o v4d faz uso de dois interrupts, um por cada canal do encoder , o que me faz apostar que este seja o programa adequado pois os pulsos por rotação que estão definidos nos parâmetros do node base são bastante elevados.