Índice:
- Suprimentos
- Etapa 1: Configurando tudo
- Etapa 2: Compreendendo como o controlador funciona
- Etapa 3: Criação de uma interface ROS-MATLAB
- Etapa 4: Obtendo o endereço IP
- Etapa 5: Crie uma GUI para o controlador
- Etapa 6: Programação dos botões editáveis da GUI
- Etapa 7: Programação dos botões da GUI
- Etapa 8: Definir a configuração de rede em ROS PC (Linux)
- Etapa 9: execute o controlador
Vídeo: Controlador robótico ROS baseado em Matlab: 9 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:36
Desde criança sempre sonhei em ser o Homem de Ferro e ainda sou. O Homem de Ferro é um daqueles personagens que são realisticamente possíveis e, simplesmente, eu aspiro me tornar o Homem de Ferro algum dia, mesmo que as pessoas riam de mim ou digam que é impossível porque "só é impossível até que alguém o faça" -Arnold Schwarzenegger.
ROS é uma estrutura emergente usada para desenvolver sistemas complexos de robótica. Suas aplicações incluem: Sistema de Montagem Automatizada, Teleoperação, Braços Protéticos e Maquinários Pesados do setor industrial.
Pesquisadores e engenheiros aproveitam o ROS para desenvolver os protótipos, enquanto diferentes fornecedores o usam para criar seus produtos. Ele tem uma arquitetura complexa que o torna difícil de ser gerenciado por um manco. Usar o MATLAB para criar o link de interface com ROS é uma abordagem inovadora que pode ajudar pesquisadores, engenheiros e fornecedores no desenvolvimento de soluções mais robustas.
Portanto, este instrutivo é sobre como fazer um controlador robótico ROS baseado em Matlab, este será um dos poucos tutoriais sobre isso por aí e entre os poucos instrutíveis ROS. O objetivo deste projeto é projetar um controlador que possa controlar qualquer robô ROS conectado à sua rede. Então vamos começar!
créditos de edição de vídeo: Ammar Akher, em [email protected]
Suprimentos
Os seguintes componentes são necessários para o projeto:
(1) ROS PC / Robô
(2) Roteador
(3) PC com MATLAB (versão: 2014 ou superior)
Etapa 1: Configurando tudo
Para isso, estou usando o Ubuntu 16.04 para o meu linux pc e ros-kinetic, portanto, para evitar confusão, recomendo usar ros kinetic e ubuntu 16.04, pois tem o melhor suporte para ros-kinetic. Para obter mais informações sobre como instalar o ros kinetic, vá para https://wiki.ros.org/kinetic/Installation/Ubuntu. Para o MATLAB, você compra uma licença ou baixa uma versão de teste aqui.
Etapa 2: Compreendendo como o controlador funciona
Um PC executa o controlador robótico no MATLAB. O controlador obtém o endereço IP e a porta do ros pc / robô.
Um ros-topic é usado para a comunicação entre o controlador e o ros pc / robô, que também é considerado como entrada pelo controlador. O modem é necessário para criar uma LAN (rede local) e é o que atribui os endereços IP a todos os dispositivos conectados à sua rede. Portanto, o ros pc / robô e o pc que executa o controlador devem estar conectados à mesma rede (ou seja, a rede do modem). Agora que você sabe "como funciona", vamos ver "como é construído" …
Etapa 3: Criação de uma interface ROS-MATLAB
O ROS-MATLABInterface é uma interface útil para pesquisadores e alunos para prototipar seus algoritmos de robô no MATLAB e testá-lo em robôs compatíveis com ROS. Esta interface pode ser criada pela caixa de ferramentas do sistema robótico no matlab e podemos prototipar nosso algoritmo e testá-lo em um robô habilitado para ROS ou em simuladores de robô, como Gazebo e V-REP.
Para instalar a caixa de ferramentas do sistema de robótica em seu MATLAB, simplesmente vá para a opção Add-on na barra de ferramentas e pesquise por caixa de ferramentas robótica no explorador de add-ons. Usando a caixa de ferramentas robótica, podemos publicar ou assinar um tópico, como um nó ROS, e podemos torná-lo um mestre ROS. A interface MATLAB-ROS possui a maioria das funcionalidades ROS que você pode precisar para seus projetos.
Etapa 4: Obtendo o endereço IP
Para que o controlador funcione, é necessário que você saiba o endereço IP do seu robô / pc ROS e do pc que está executando o controlador no MATLAB.
Para obter o ip do seu pc:
No Windows:
Abra o prompt de comando e digite o comando ipconfig e anote o endereço IPv4
Para Linux:
Digite o comando ifconfig e anote o endereço inet. Agora que você tem o endereço IP, é hora de construir a GUI …
Etapa 5: Crie uma GUI para o controlador
Para criar a GUI, abra o MATLAB e digite guia na janela de comando. Isso abrirá o aplicativo guia, por meio do qual criaremos nossa GUI. Você também pode usar o designer de aplicativo no MATLAB para projetar sua GUI.
Estaremos criando 9 botões no total (como mostrado na fig.):
6 botões de pressão: Avançar, Recuar, Esquerda, Direita, Conectar ao Robô, Desconectar
3 botões editáveis: Ros pc ip, porta e nome do tópico.
Os botões editáveis são os botões que pegarão o ip do ROS pc, sua porta e o nome do tópico como entrada. O nome do tópico é o meio pelo qual o controlador MATLAB e o robô / pc ROS se comunicam. Para editar a string no botão editável, clique com o botão direito no botão >> vá para as propriedades do Inspetor >> String e edite o texto do botão.
Assim que sua GUI estiver concluída, você pode programar os botões. Aqui é onde a verdadeira diversão começa…
Etapa 6: Programação dos botões editáveis da GUI
A GUI é salva como um arquivo.fig, mas as funções de código / retorno de chamada são salvas no formato.m. O arquivo.m contém o código para todos os seus botões. Para adicionar funções de retorno de chamada aos seus botões, clique com o botão direito no botão> > Ver callbacks >> callback. Isso abrirá o arquivo.m para sua GUI onde aquele botão específico está definido.
O primeiro retorno de chamada que codificaremos é para o botão editável ROS IP. Na função edit1_Callback, escreva o seguinte código:
função edit1_Callback (hObject, eventdata, alças)
ros_master_ip global
ros_master_ip = get (hObject, 'String')
Aqui, a função é definida como edit1_Callback, que se refere ao primeiro botão editável. Quando inserimos um endereço IP da rede ROS neste botão editável, ele armazenará o endereço IP como uma string em uma variável global chamada ros_master_ip.
Então, logo abaixo de _OpeningFcn (hObject, eventdata, alças, varargin), defina o seguinte (veja a fig.):
ros_master_ip global
ros_master_port global
teleop_topic_name global
ros_master_ip = '192.168.1.102';
ros_master_port = '11311';
teleop_topic_name = '/ cmd_vel_mux / input / teleop';
Você acabou de codificar globalmente o ip do ros-pc (ros_master_ip), a porta (ros_master_port) e o nome do tópico do Teleop. O que isso significa é que, se você deixar os botões editáveis vazios, esses valores predefinidos serão usados quando você se conectar.
O próximo retorno de chamada que codificaremos é para o botão editável da porta.
Na função edit2_Callback, escreva o seguinte código:
função edit2_Callback (hObject, eventdata, alças)
ros_master_port global
ros_master_port = get (hObject, 'String')
Aqui, a função é definida como edit2_Callback, que se refere ao segundo botão editável. Quando inserimos a porta do ros pc / robot aqui a partir da rede ROS neste botão editável, ele armazenará a porta como uma string em uma variável global chamada ros_master_port.
Da mesma forma, o próximo retorno de chamada que codificaremos é para o botão editável do nome do tópico.
Na função edit3_Callback, escreva o seguinte código:
função edit3_Callback (hObject, eventdata, alças)
teleop_topic_name global
teleop_topic_name = get (hObject, 'String')
Semelhante a ros_master_port, também é armazenado como string em uma variável global.
A seguir, veremos as funções de retorno de chamada para os botões de pressão …
Etapa 7: Programação dos botões da GUI
Os botões que criamos anteriormente são os que usaremos para mover, conectar e desconectar o robô do controlador. Os retornos de chamada do botão de pressão são definidos da seguinte forma:
por exemplo. função pushbutton6_Callback (hObject, eventdata, alças)
Nota: dependendo da ordem em que você criou seus botões de pressão, eles seriam numerados de acordo. Portanto, a função pushbutton6 em meu arquivo.m pode ser para Avançar, enquanto em seu arquivo.m pode ser para Voltar, portanto, tenha isso em mente. Para saber qual é a função exata para o seu botão de pressão, simplesmente clique com o botão direito do mouse em >> Ver callbacks >> callbacks e ele abrirá a função para o seu botão, mas para este instrutível, estou assumindo que é igual ao meu.
Para o botão Conectar ao robô:
Na função pushbutton6_Callback (hObject, eventdata, handles):
função pushbutton6_Callback (hObject, eventdata, alças) ros_master_ip global
ros_master_port global
teleop_topic_name global
robô global
velmsg global
ros_master_uri = strcat ('https://', ros_master_ip, ':', ros_master_port)
setenv ('ROS_MASTER_URI', ros_master_uri)
rosinit
robot = rospublisher (teleop_topic_name, 'geometry_msgs / Twist');
velmsg = rosmessage (robô);
Este retorno de chamada definirá a variável ROS_MASTER_URI concatenando ros_master_ip e a porta. Então, o comando rosinit inicializará a conexão. Após a conexão, ele criará um editor de geometry_msgs / Twist, que será usado para enviar o comando velocity. O nome do tópico é o nome que fornecemos na caixa de edição. Assim que a conexão for bem-sucedida, poderemos operar os botões Forward, Backward, Left, Right.
Antes de adicionar callbacks aos botões push para frente e para trás, precisamos inicializar as velocidades linear e angular.
Portanto, abaixo de _OpeningFcn (hObject, eventdata, alças, varargin) defina o seguinte (ver fig):
global left_spinVelocity global right_spinVelocity
global forwardVelocity
global backwardVelocity
left_spinVelocity = 2;
right_spinVelocity = -2;
forwardVelocity = 3;
backwardVelocity = -3;
Nota: todas as velocidades estão em rad / s
Agora que as variáveis globais estão definidas, vamos programar os botões de movimento.
Para o botão de avanço:
função pushbutton4_Callback (hObject, eventdata, alças) velmsg global
robô global
teleop_topic_name global
global forwardVelocity
velmsg. Angular. Z = 0;
velmsg. Linear. X = forwardVelocity;
enviar (robô, velmsg);
latchpub = rospublisher (teleop_topic_name, 'IsLatching', true);
Da mesma forma para o botão de retrocesso:
função pushbutton5_Callback (hObject, eventdata, alças)
velmsg global
robô global
global backwardVelocity
teleop_topic_name global
velmsg. Angular. Z = 0;
velmsg. Linear. X = backwardVelocity;
enviar (robô, velmsg);
latchpub = rospublisher (teleop_topic_name, 'IsLatching', verdadeiro);
Da mesma forma para o botão esquerdo: função pushbutton3_Callback (hObject, eventdata, handles)
global velmsgglobal robot global left_spinVelocity
teleop_topic_name global
velmsg. Angular. Z = left_spinVelocity;
velmsg. Linear. X = 0;
enviar (robô, velmsg);
latchpub = rospublisher (teleop_topic_name, 'IsLatching', verdadeiro);
Da mesma forma para o botão direito:
robô velmsgglobal global
global right_spinVelocity
teleop_topic_name global
velmsg. Angular. Z = right_spinVelocity;
velmsg. Linear. X = 0;
enviar (robô, velmsg);
latchpub = rospublisher (teleop_topic_name, 'IsLatching', verdadeiro);
Uma vez que todas as funções de callback foram adicionadas e os arquivos salvos, podemos testar nosso controlador.
Etapa 8: Definir a configuração de rede em ROS PC (Linux)
Estaremos testando o controlador em um ros pc (Linux), o que exigirá a definição da configuração de rede. Se você também estiver executando o controlador em um pc linux, terá que definir a configuração de rede lá também.
Configuração de rede:
Abra sua janela de terminal e digite gedit.bashrc
Assim que o arquivo for aberto, adicione o seguinte:
#Robot Machine Configuration
exportar ROS_MASTER_URI = https:// localhost: 11311
# Endereço IP do nó mestre ROS
exportar ROS_HOSTNAME =
exportar ROS_IP =
echo "ROS_HOSTNAME:" $ ROS_HOSTNAME
echo "ROS_IP:" $ ROS_IP
echo "ROS_MASTER_URI:" $ ROS_MASTER_URI
Você deve seguir esta etapa todas as vezes devido à atribuição dinâmica de IP.
Etapa 9: execute o controlador
Vamos testar nosso controlador em um bot Turtle no Gazebo.
Para instalar o Gazebo, consulte
Para instalar o bot Turtle, consulte
Abra a pasta onde você salvou seus arquivos.fig e.m no MATLAB e pressione Executar (como mostrado na imagem). Isso abrirá o controlador no PC. Antes de pressionar conectar, certifique-se de que seu simulador de tartaruga está funcionando.
Para testar sua simulação TurtleBot:
Abra o Terminal no Ros pc e digite: $ roslaunch turtlebot_gazebo turtlebot_world.launch. Isso abrirá uma simulação do Turtlebot naquele PC. O nome do tópico do TurtleBot é / cmd_vel_mux / input / teleop, que já fornecemos no aplicativo. Digite o endereço IP do ros pc, a porta e o nome do tópico nos botões editáveis e pressione o botão Conectar ao Robô. Seu robô tartaruga deve começar a se mover quando você pressiona Avançar, Voltar, etc.
Para visualizar as velocidades linear e angular:
Abra um novo terminal e digite o comando: $ rostopic echo / cmd_vel_mux / input / teleop
E aí está, seu próprio ROS Robotic Controller baseado em Matlab. Se você gostou do meu instrutível, dê um voto no Concurso de Autoria pela Primeira Vez e compartilhe com o máximo de pessoas possível. Obrigada.
Recomendado:
Controle remoto IR baseado em Arduino automático baseado em temperatura: 7 etapas
Controle remoto IR baseado em Arduino automático baseado em temperatura: Ei, e aí, pessoal! Akarsh aqui da CETech. Cansado de acordar no meio de um sono profundo só porque a temperatura ambiente está muito baixa ou muito alta por causa do seu AC mudo. Então este projeto é para você. Neste projeto, vamos fazer o nosso
Controlador de jogo DIY baseado em Arduino - Controlador de jogo Arduino PS2 - Jogando Tekken com gamepad Arduino DIY: 7 etapas
Controlador de jogo DIY baseado em Arduino | Controlador de jogo Arduino PS2 | Jogando Tekken com DIY Arduino Gamepad: Olá pessoal, jogar é sempre divertido, mas jogar com seu próprio controlador de jogo DIY personalizado é mais divertido. Portanto, faremos um controlador de jogo usando arduino pro micro neste instructables
Termômetro infravermelho sem contato baseado em Arduino - Termômetro baseado em IR usando Arduino: 4 etapas
Termômetro infravermelho sem contato baseado em Arduino | Termômetro baseado em IR usando Arduino: Olá pessoal, neste instructables faremos um termômetro sem contato usando arduino. Já que às vezes a temperatura do líquido / sólido é muito alta ou muito baixa e então é difícil fazer contato com ele e ler sua temperatura então naquele cenário
Braço robótico baseado em microcontrolador PIC: 6 etapas (com imagens)
Braço robótico baseado em microcontrolador PIC: da linha de montagem das indústrias de fabricação de automóveis aos robôs de telecirurgia no espaço, os braços robóticos podem ser encontrados em todos os lugares. Os mecanismos desses robôs são semelhantes aos de um ser humano, que podem ser programados para funções semelhantes e aumentar
Como montar um braço robótico impressionante de madeira (Parte 1: Robô para rastreamento de linha) - Baseado no Micro: Bit: 9 etapas
Como montar um braço robótico impressionante de madeira (Parte 1: Robô para rastreamento de linha) - Baseado no Micro: Bit: Este cara de madeira tem três formas, é muito diferente e impressionante. Então vamos entrar nisso um por um