Índice:

Roomba controlado por MATLAB: 5 etapas
Roomba controlado por MATLAB: 5 etapas

Vídeo: Roomba controlado por MATLAB: 5 etapas

Vídeo: Roomba controlado por MATLAB: 5 etapas
Vídeo: 🚗 CONTROL proporcional navegación autónoma con ARDUINO y MATLAB (Video #19) 🚁 2024, Novembro
Anonim
Roomba controlado por MATLAB
Roomba controlado por MATLAB
Roomba controlado por MATLAB
Roomba controlado por MATLAB

O objetivo deste projeto é utilizar o MATLAB, bem como um robô programável iRobot modificado. Nosso grupo combinou nossas habilidades de codificação para criar um script MATLAB que usa muitas funções do iRobot, incluindo os sensores de penhasco, sensores de pára-choques, sensores de luz e a câmera. Usamos essas leituras de sensor e câmera como entradas, o que nos permite criar certas saídas que queremos usando funções de código MATLAB e loops. Também usamos o dispositivo móvel MATLAB e o giroscópio como uma forma de conectar-se ao iRobot e controlá-lo.

Etapa 1: peças e materiais

Peças e Materiais
Peças e Materiais
Peças e Materiais
Peças e Materiais
Peças e Materiais
Peças e Materiais
Peças e Materiais
Peças e Materiais

MATLAB 2018a

-A versão 2018 do MATLAB é a versão preferida, principalmente porque funciona melhor com o código que se conecta ao dispositivo móvel. No entanto, a maior parte do nosso código pode ser interpretado na maioria das versões do MATLAB.

iRobot Criar Dispositivo

-Este dispositivo é um dispositivo especial feito exclusivamente para programação e codificação. (Não é um vácuo real)

Raspberry Pi (com câmera)

- Esta é uma placa de computador barata que funciona como o cérebro do iRobot. Pode ser pequeno, mas é capaz de muitas coisas. A câmera é um complemento adicional. Ele também usa o framboesa pi para obter todas as suas funções e comandos. A câmera da foto acima está montada em um suporte impresso em 3D, criado pelos departamentos de Fundamentos de Engenharia da Universidade do Tennessee

Etapa 2: arquivo de banco de dados do Roomba

Arquivo de banco de dados do Roomba
Arquivo de banco de dados do Roomba

Há um arquivo principal de que você precisará para usar as funções e comandos adequados para seu roomba. Este arquivo é de onde você escreve o código e extrai funções para tornar a operação do seu roomba mais gerenciável.

Você pode baixar o arquivo neste link ou o arquivo para download abaixo

ef.engr.utk.edu/ef230-2017-08/projects/roomba-s/setup-roomba-instructable.php

Etapa 3: Conectando ao Roomba

Primeiro, você deve se certificar de que o seu robô está conectado à placa do raspberry pi usando um plugue micro USB. Então você precisa conectar corretamente seu computador e robô ao mesmo WiFi. Depois de fazer isso, você pode ligar o robô e conectar-se a ele usando o comando fornecido no arquivo de banco de dados do robô. (Sempre reinicie o robô antes e depois de usá-lo). Por exemplo, usamos o comando "r.roomba (19)" para conectar ao nosso robô, atribuindo a variável r ao nosso dispositivo. Isso se refere ao arquivo de banco de dados, que configura nossa variável como uma estrutura que podemos referenciar a qualquer momento.

Etapa 4: O Código

O código
O código
O código
O código

Anexamos o código completo abaixo, mas aqui está uma breve visão geral que destaca os elementos importantes em nosso script. Utilizamos todos os sensores, bem como a câmera, para maximizar totalmente o potencial do nosso robô. Também incluímos um código que nos permitiu conectar um dispositivo móvel ao nosso robô e usar seu grioscópio para controlá-lo manualmente.

Começamos com o comando simples "r.setDriveVelocity (.06)" que define a velocidade de avanço do robô para 0,06 m / s. Isso é apenas para fazer o robô se mover de antemão

Em seguida, nosso script principal é iniciado com um loop while que recupera os dados do robô fornecido, criando estruturas que podemos fazer referência e usar nas declarações condicionais abaixo, permitindo-nos dizer ao robô para executar um determinado comando com base nos dados da estrutura o robô lê com seus sensores. Nós o configuramos de forma que o robô leia seus sensores de penhasco e siga um caminho escuro

while true% while loop vai até que algo "falso" ocorra (neste caso, ele continua infinitamente) data = r.getCliffSensors; data2 = r.getBumpers;% recupera dados continuamente sobre os valores do sensor de penhasco e os atribui a uma variável% img = r.getImage; % Tira uma foto da câmera montada% imagem (img); % Mostra a imagem que foi tirada% red_mean = mean (mean (img (:,:, 1)));% Obtém o valor médio da cor verde se data.rightFront <2000 r.turnAngle (-2); % gira o Roomba aproximadamente 0,2 grau CW quando o valor para os sensores de penhasco frontal direito cair abaixo de 2000 r.setDriveVelocity (.05); elseif data.leftFront data.leftFront && 2000> data.rightFront r.moveDistance (.1); % diz ao Roomba para continuar avançando a aproximadamente 0,2 m / s se ambos os valores dos sensores dianteiro direito e esquerdo caírem abaixo de 2000% r.turnAngle (0); % diz ao Roomba para não virar se as condições acima mencionadas forem verdadeiras

elseif data2.right == 1 r.moveDistance (-. 12); r.turnAngle (160); r.setDriveVelocity (0,05); elseif data2.left == 1 r.moveDistance (-. 2); r.turnAngle (5); r.setDriveVelocity (0,05); elseif data2.front == 1 r.moveDistance (-. 12); r.turnAngle (160); r.setDriveVelocity (0,05);

Após este loop while, entramos em outro loop while que aciona os dados obtidos através da câmera. E usamos uma instrução if dentro desse loop while que reconhece uma imagem usando um programa específico (alexnet) e, uma vez que identifica a imagem, aciona imediatamente o controle remoto do dispositivo móvel

anet = alexnet; % Atribui o aprendizado profundo do alexnet a uma variável while true% Infinite while loop img = r.getImage; img = imresize (img, [227, 227]); rótulo = classificar (anet, img); if label == "toalha de papel" || label == "refrigerador" label = "água"; imagem final (img); título (char (rótulo)); drawnow;

O loop while que nos permite controlar o dispositivo com nosso telefone recupera os dados do giroscópio do telefone e o conectamos a uma matriz que envia dados continuamente de volta ao MATLAB no computador. Usamos uma instrução if que lê os dados da matriz e fornece uma saída que move o dispositivo com base em certos valores do giroscópio do telefone. É importante saber que usamos os sensores de orientação do dispositivo móvel. A matriz um por três mencionada acima é categorizada por cada elemento dos sensores de orientação do telefone, que é azimute, inclinação e lado. As declarações if criaram condições que declararam quando o lado excede os valores 50 ou cai abaixo de -50, então o robô se move uma certa distância para frente (50 positivos) ou para trás (50 negativos). E o mesmo vale para o valor do pitch. Se o valor da inclinação ultrapassar o valor de 25 ou cair abaixo de -25, o robô girará em um ângulo de 1 grau (25 positivo) ou 1 grau negativo (25 negativo)

while true pause (.1)% Pausa de.5 segundos antes de cada valor ser obtido Controller = iphone. Orientation; % Atribui a matriz dos valores da orientação do iPhone a uma variável Azimutal = Controlador (1); % Atribui o primeiro valor da matriz a uma variável Pitch = Controller (2); % Atribui o segundo valor da matriz a uma variável (inclinação para frente e para trás quando o iPhone é segurado de lado) Lado = Controlador (3); % Atribui o terceiro valor da matriz a uma variável (inclinação para a esquerda e para a direita quando o iPhone é segurado de lado)% Causa uma saída com base na orientação do telefone se Lado> 130 || Side 25 r.moveDistance (-. 1)% Move o Roomba para trás aproximadamente 0,1 metros se o iPhone estiver inclinado para trás pelo menos 25 graus elseif Side 25 r.turnAngle (-1)% Gira o Roomba aproximadamente 1 grau CCW se o iPhone é inclinado para a esquerda em pelo menos 25 graus elseif Pitch <-25 r.turnAngle (1)% Gira o Roomba aproximadamente 1 grau CW se o iPhone estiver inclinado pelo menos 25 graus no final

Esses são apenas os destaques das principais partes do nosso código, que incluímos se você precisar copiar e colar rapidamente uma seção para seu benefício. No entanto, todo o nosso código está anexado abaixo, se necessário

Etapa 5: Conclusão

Este código que escrevemos é projetado especificamente para nosso robô, bem como para nossa visão geral do projeto. Nosso objetivo era usar todas as nossas habilidades de codificação do MATLAB para criar um script de design adequado que utilizasse a maioria dos recursos do robô. Usar o controlador de telefone não é tão difícil quanto você pode pensar e esperamos que nosso código possa ajudá-lo a entender melhor o conceito por trás da codificação de um iRobot.

Recomendado: