Índice:
- Etapa 1: Materiais
- Etapa 2: Conexão
- Etapa 3: Criação lógica de um código MATLAB para usar sensores
- Etapa 4: Testar o código e o robô
- Etapa 5: reconhecimento de erro
- Etapa 6: Conclusão
Vídeo: Roomba Parking Pal: 6 degraus
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:37
Este projeto usa um roomba programável iRobot Create, MATLAB r2018a e MATLAB mobile. Ao usar esses três meios e nosso conhecimento de codificação, programamos o iRobot Create para interpretar cores e usar sensores integrados para concluir tarefas. Este projeto depende da comunicação Raspberry Pi e MATLAB para realizar essas tarefas.
Etapa 1: Materiais
1. iRobot Create Robot
2. MATLAB r2018a
3. Raspberry Pi
4. Módulo de câmera
5. Suporte estabilizador de câmera impresso em 3-D
6. Smartphone com MATLAB móvel instalado
7. Laptop / Computador com MATLAB instalado
Etapa 2: Conexão
Esta etapa é sobre como conectar o Raspberry Pi ao robô, em segundo lugar conectar o robô ao seu computador e conectar o smartphone ao computador.
A parte mais fácil deste processo é conectar o Raspberry Pi ao seu robô, já que o Raspberry Pi é montado na parte superior do robô. Há um cabo do robô que tudo que você precisa fazer é conectá-lo na lateral do Raspberry Pi.
A próxima etapa é conectar o robô ao seu computador para que você possa executar comandos para o robô executar. A primeira coisa que você deve fazer é conectar seu computador à rede sem fio que o roomba está criando. Agora, é recomendável usar o ícone Definir caminho no MATLAB para definir o caminho para que você possa usar as funções na caixa de ferramentas do Roomba do MATLAB. Cada vez que você está começando e terminando o uso com o robô, você deve fazer uma "Saudação de Dois Dedos" reinicializando o robô, o que significa que você mantém pressionados os botões dock e spot por dez segundos até que a luz apague indicando para liberar. Você teve sucesso com este hard reset se ouvir o robô tocar uma pequena escala. Em seguida, você deve se conectar ao roomba usando uma linha de código como "r = roomba (x)", onde 'x' é o número designado ao robô que você possui.
Por último, você precisa baixar o MATLAB mobile em qualquer dispositivo móvel que você irá usar para este projeto, e este aplicativo está disponível em dispositivos Android e Apple. Assim que o aplicativo estiver instalado, você terá que fazer o login usando suas credenciais. Então você deve conectar este dispositivo ao seu computador, usando a guia rotulada "Mais" -> a seguir clique em "configurações" -> a seguir clique em "Adicionar um computador", isso deve abrir a tela mostrada nas imagens acima. a próxima etapa que você deve seguir é apenas conectar e chugging as informações que ele solicita. Assim que estiver conectado com êxito, você será capaz de chamar funções que você define em seu computador em seu telefone para controlar seu robô.
Etapa 3: Criação lógica de um código MATLAB para usar sensores
O código será mais fácil de criar quando a maior parte dele estiver dentro do loop while, para que o roomba possa atualizar constantemente os valores válidos que está procurando. Se houver um erro, o MATLAB exibirá um erro e onde ele aparece no código, tornando a solução de problemas relativamente simples.
Projetado no r2018a MATLAB, este código faz uso das caixas de ferramentas padrão, a caixa de ferramentas iRobot Create, bem como a caixa de ferramentas móvel MATLAB. O roomba usado neste exemplo é designado como 26 e r = roomba (26) precisa ser executado apenas uma vez para se comunicar totalmente com o roomba.
Código:
função parkassist (x) se x == 1
r = roomba (26)% conecta-se ao roomba
enquanto verdadeiro
r.setDriveVelocity (.05,.05)% define o roomba para uma velocidade de direção mais lenta
bump = r.getBumpers% obtém os dados dos sensores de impacto
cliff = r.getCliffSensors% obtém os dados dos sensores de penhasco
light = r.getLightBumpers% obtém os dados dos sensores de colisão de luz
img = r.getImage;% lê a câmera do robô
red_mean = mean (mean (img (:,:, 1)))% lê a quantidade média de pixels vermelhos
green_mean = mean (mean (img (:,:, 2)))% lê a quantidade média de pixels verdes
blue_mean = mean (mean (img (:,:, 3)))% lê a quantidade média de pixels azuis
if bump.front == 1% lê os sensores de colisão frontais
r.stop% para o roomba
msgbox ('Path Obscured!', 'Parking Assistant Message')% exibe mensagem dizendo que o caminho está obscurecido break% termina o loop
elseif green_mean> 150
r.stop% para o roomba
cont = questdlg ('Continuar?', 'Caminho concluído')% exibe uma caixa de pergunta pedindo para continuar
if cont == 'Sim'
parkassist (1)% reinicia o código
outro
fim
break% termina o loop
elseif red_mean> 140
r.turnAngle (45)% gira o roomba 45 graus
r.timeStart% inicia um contador de tempo
enquanto verdadeiro
r.setDriveVelocity (.05,.05)% define a velocidade do roomba
time = r.timeGet% atribui o tempo a uma variável
bump = r.getBumpers% obtém os dados dos sensores de impacto
cliff = r.getCliffSensors% obtém os dados dos sensores de penhasco
light = r.getLightBumpers% obtém os dados dos sensores de colisão de luz
img = r.getImage;% lê a câmera do robô
red_mean = mean (mean (img (:,:, 1)))% lê a quantidade média de pixels vermelhos
green_mean = mean (mean (img (:,:, 2)))% lê a quantidade média de pixels verdes
blue_mean = mean (mean (img (:,:, 3)))% lê a quantidade média de pixels azuis
se média_ azul> 120
r.moveDistance (-0,01)% move o roomba para trás uma distância definida songPlay (r, 'T400, C, R, E, F, G, A, B, C ^', 'true')% reproduz uma escala musical crescente
msgbox ('Água encontrada!', 'Mensagem do assistente de estacionamento')% exibe uma mensagem dizendo que água foi encontrada r.turnAngle (-80)% gira o roomba 80 graus
break% termina o loop atual
elseif light.rightFront> 25 || light.leftFront> 25% lê sensores de colisão de luz
r.moveDistance (-0,01)% move o roomba para trás uma distância definida
r.turnAngle (-35)% gira o roomba 35 graus
break% termina o loop atual
elseif cliff.rightFront <2500 && cliff.leftFront <2500% lê os dois sensores de penhasco
r.moveDistance (-0,1)% move o roomba para trás uma distância definida
r.turnAngle (-80)% gira o roomba 80 graus
break% termina o loop atual
elseif tempo> = 3
r.stop% para o roomba
contin = questdlg ('Station Free, Continue?', 'Parking Assistant Message')% pergunta se o roomba deve continuar se contin == 'Yes'
r.turnAngle (-90)% gira o roomba 90 graus
parkassist (1)% reinicia a função
outro
r.stop% para o roomba
fim
outro
fim
fim
elseif cliff.rightFront <2500 && cliff.leftFront <2500% lê os dois sensores de penhasco
r.moveDistance (-0,1)% move o roomba para trás uma distância definida
r.turnAngle (-90)% gira o roomba 90 graus
elseif cliff.rightFront <2500% lê o sensor de penhasco correto
r.turnAngle (-5)% gira levemente o roomba na direção oposta do sensor de penhasco
elseif cliff.leftFront <2500% lê o sensor de precipício esquerdo
r.turnAngle (5)% gira ligeiramente o roomba na direção oposta do sensor de penhasco
outro
fim
fim
fim
Etapa 4: Testar o código e o robô
Depois que o código foi desenvolvido, a próxima etapa foi testar o código e o robô. Como há muitos ajustes diferentes que podem ser feitos no código, como o ângulo que o robô gira, a velocidade em que se move e os limites para cada cor, a melhor maneira de descobrir esses valores para o seu robô é testando eles e mudam conforme você avança. Para cada dia de trabalho que tínhamos, mudávamos constantemente esses valores, já que alguns deles dependem do ambiente em que seu robô está operando. A melhor maneira que encontramos foi colocar o roomba no caminho que você deseja que ele siga, e ter uma barreira alta o suficiente para que a câmera não detecte cores indesejadas. A próxima etapa é deixá-lo funcionar e mostrar as cores que você quiser, quando quiser que ele conclua a tarefa. Conforme você avança, se você encontrar um problema, a melhor coisa a fazer é empurrar o para-choque dianteiro, fazendo-o parar, e alterar o parâmetro com o qual você teve problemas.
Etapa 5: reconhecimento de erro
Com cada projeto concluído, sempre há fontes de erro. Para nós, experimentamos um erro com o simples fato de que o robô não é preciso com o ângulo em que ele gira, então se você disser para ele girar em 45 graus, não vai ser exato. Outra fonte de erro para nós era que às vezes o robô não funcionava bem e você o reinicializava antes de funcionar novamente. A principal fonte de erro para nós foi que o mesmo código não terá o mesmo efeito em robôs diferentes, portanto, você deve ter paciência e fazer os ajustes necessários.
Etapa 6: Conclusão
Agora você tem todas as ferramentas para brincar com seu roomba, o que significa que você pode manipular o código da maneira que quiser para atingir os objetivos que deseja. Esta deve ser a melhor parte do seu dia, então divirta-se e dirija com segurança!
Recomendado:
Farol para bicicleta: 7 degraus
Farol para Bicicleta: Neste projeto vou mostrar-lhe como criar o seu farol para bicicleta, que pode iluminar o seu caminho durante a noite, indicar o caminho que vai seguir, incluindo o farol de quebra
Sala de exposições com LEDs: 12 degraus
Sala de exposições com LEDs: Olá a todos! Nesta página vou mostrar-lhe o conceito de solução de luz portátil para maquetes de edifícios. Aqui está a lista de materiais. Para o layout do pavilhão de exposições (design): 1. Embalagem (aproximadamente 2x2 m) 2. Papel vegetal (0,5
Lâmpada noturna colorida da galáxia: 7 degraus
Lâmpada noturna colorida da galáxia: Olá amigos, hoje vou mostrar a vocês como fazer uma lâmpada noturna soberba galáxia com frasco de vidro
Braço clap-off: 27 degraus (com fotos)
Clap-Off Bra: A primeira vez que li sobre Lingerie Síria fiquei bastante emocionado. No Ocidente, muitas vezes pensamos nas culturas árabes como sociedades sexualmente reprimidas, quando - na verdade - descobrimos que elas estão claramente à nossa frente em avanços em lingerie
Tree Windscreen, San Francisco: 25 degraus
Tree Windscreen, San Francisco: Muitos dos principais espaços das ruas púbicas de San Francisco são atualmente túneis de vento, já que as forças dinâmicas que chegam do outro lado da baía são canalizadas para corredores urbanos estreitos. À medida que a cidade continua a ter experiências urbanas e arquitetônicas incomparáveis