Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implementação do ROS com Arduino #8

Open
5 of 8 tasks
brenopmeneses opened this issue May 13, 2023 · 4 comments
Open
5 of 8 tasks

Implementação do ROS com Arduino #8

brenopmeneses opened this issue May 13, 2023 · 4 comments
Assignees
Labels
activities Assignments of new activities hardware Activities performed by the hardware team

Comments

@brenopmeneses
Copy link
Member

brenopmeneses commented May 13, 2023

Data de Entrega: 11/05/2023

Objetivo: Controle das juntas do manipulador por meio de um código Python e ROS, utilizando o pacote rosserial.

Atividades:

  • Estudar sobre ROS;
  • Instalar e configurar um ambiente com ROS 1;
  • Instalar e configurar o pacote rosserial;
  • Testar um código exemplo de uso da rosserial;
  • Criar código de comunicação ROS para Arduino;
  • Código de limitação de ângulos para as juntas em python;
  • Criar um programa que controla um servo motor com a biblioteca rosserial e um programa python;
  • Realizar o controle de posição dos 5 servos do manipulador robótico utilizando rosserial.
@brenopmeneses brenopmeneses added hardware Activities performed by the hardware team activities Assignments of new activities labels May 13, 2023
@brenohmartins
Copy link
Contributor

brenohmartins commented May 15, 2023

*Estudo produzido nas datas de 11/05/2023 - 14/05/2023

  • O estudo do ROS básico utilizou o ros2-foxy, para se ter noção sobre nós, tópicos, serviços, parâmetros e ações. Através desse estudo foi gerado um documento de resumo sobre o conteúdo que aborda os comandos mais utilizados e importantes.

  • Após alguns problemas com a biblioteca "rosserial" em que estava tendo dificuldades em instalá-la, em uma reunião o problema foi resolvido e descobrimos que o problema era na versão do ROS. Sendo assim foi feita a troca do ros2-foxy para o ros-noetic no qual é onda a biblioteca funciona. Estudo básico do ROS2-foxy

  • Foi feita a instalação do ROS1-noetic no sistema para que se tornasse possível a utilização da biblioteca proposta, devido que a mesma não funciona nas versões ROS2 e ROS3.

@brenohmartins
Copy link
Contributor

Dia 16 de Agosto fiz testes de controle de arduino utilizando a biblioteca rosserial, foi notaldo que a biblioteca que simula um ambiente ROS no arduino, coisa que não é de seu natural, faz necessário a utilização de um shield pois ela sozinha não consegue fornecer alimentação para emular e sustentar um único servo, mesmo sendo um micro servo sg90. É bom também notar que durante a utilização do arduino é de extrema importância ligar primeiro a fonte de alimentação no servo e posteriomente fazer a ligação da porta USB no mesmo, e quando finalizar os trabalhos retirar primeiro a porta usb e posteriormente a fonte de alimentação da tomada.

@brenohmartins
Copy link
Contributor

Dia 19/10 foi dado início a produção do código de recebimento dos comandos das juntas, tendo o ROS Noetic aplicado em conjunto com o arduino, utilizando a bliblioteca roserial.

@brenohmartins
Copy link
Contributor

brenohmartins commented Oct 19, 2023

Testar esse código com dois servos. (Se funcionar, aprimorar para 5 servos)

`// Recive menseger for two servo mechanics ---> test

#if (ARDUINO >= 100)
#include <Arduino.h>
#else
#include <WProgram.h>
#endif

#include <Servo.h>
#include <ros.h>
#include <std_msgs/UInt16.h>

ros::NodeHandle nh; // create a node

Servo servo1; // objetics
Servo servo2;

void servo1_cb( const std_msgs::UInt16& cmd_msg){

if(cmd_msg.data >= 0){ // && cmd_msg1.data < 180 ---> essa limitação de 180 graus pode ser feito no código de python

servo1.write(cmd_msg.data); //atribui valores ao servo
// digitalWrite(13, !digitalRead(13));  pode se fazer teste de debug com esse led

}
}

void servo2_cb( const std_msgs::UInt16& cmd_msg){

if(cmd_msg.data >= 0){ //verifica se a variável não esta vazia

servo2.write(cmd_msg.data); 
// digitalWrite(13, !digitalRead(13));

}
}

//atribuição

ros::Subscriber<std_msgs::UInt16> sub1("servo1", servo1_cb);
ros::Subscriber<std_msgs::UInt16> sub2("servo2", servo2_cb);

void setup(){
pinMode(13, OUTPUT);

nh.initNode();
nh.subscribe(sub1); //envio dos dados para o servo 1
nh.subscribe(sub2); //envio dos dados para o servo 2

servo1.attach(9); //servo1 pino 9
servo2.attach(8); //servo2 pino 9
}

void loop(){
nh.spinOnce(); //
delay(15);
}
`

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
activities Assignments of new activities hardware Activities performed by the hardware team
Projects
None yet
Development

No branches or pull requests

2 participants