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.