Robot asistente doméstico autónomo
Componentes y suministros
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 4 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 | ||||
| × | 4 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 |
Aplicaciones y servicios en línea
| ||||
| ||||
| ||||
|
Acerca de este proyecto
1. Introducción
¡Conoce a O'nine! Un compañero robótico personal para el hogar que puede moverse, recoger objetos y cuidar su casa. Gracias a Alexa, O'nine puede escucharlo y realizar tareas programables como alimentar a sus peces.
Este proyecto espera ampliar las capacidades de Alexa al proporcionar una plataforma de robot escalable y abierta que puede realizar tareas dinámicas en un entorno de hogar inteligente. Las soluciones actuales para el hogar inteligente requieren equipos personalizados que están diseñados solo para una función específica. O'nine tiene como objetivo cerrar esta brecha minimizando estos requisitos de hardware y utilizando la robótica como alternativa. La idea es crear una plataforma de prueba de tecnología para probar la viabilidad y viabilidad del uso de robots como otro componente de un sistema de automatización del hogar. Con suerte, podemos responder preguntas como " ¿Tiene sentido usar un robot para apagar las unidades de aire acondicionado en lugar de montar microcontroladores en cada habitación solo para controlar cada unidad de aire acondicionado? "ya que lo que solía ser una solución estática ahora puede ser móvil con la ayuda de un robot.
Aquí hay un video de O'nine alimentando a mis peces.
TL; DW (video secuencial)
Video completo.
¿Quieres ver cómo está tu bebé o quién está en la puerta? O'nine tiene una cámara incorporada, por lo que también puedes pedirle que tome una foto.
Este tutorial lo guiará sobre cómo construir el robot y cómo crear una habilidad de Alexa que pueda ordenar al robot que realice tareas autónomas.
2. Arquitectura de alto nivel
En resumen, así es como funciona la integración de O'nine - Alexa:
1. Amazon Echo Dot escucha el comando de voz.
2. La habilidad personalizada de Alexa detecta la intención.
3. La función AWS Lambda recibe una solicitud de Amazon Alexa Skill y la publica en el agente PubNub MQTT.
4. O'nine recibe datos suscribiéndose al corredor MQTT.
5. O'nine ejecuta la tarea requerida de forma autónoma.
3. Hardware
3.1 Base de robot
Conecte los componentes como se muestra a continuación. Este circuito traduce todos los comandos de velocidad enviados desde ROS Navigation Stack en movimientos de motor. El firmware incluye un controlador PID para mantener la velocidad requerida utilizando la retroalimentación de los codificadores del motor.
Algunas fotos de la base del robot ensamblada.
El chasis del robot es un contenedor de hojalata de papel A4 reciclado. También puede usar una caja de plástico vieja para albergar sus componentes.
Puede consultar mi proyecto Linorobot para obtener un tutorial completo sobre cómo construir robots compatibles con ROS de bricolaje.
3.2 Vertical Levante Circuito (Armar Padre)
Conecte los componentes como se muestra a continuación. Este circuito controla la elevación vertical del brazo y traduce la altura requerida enviada por http://moveit.ros.org/ en movimientos paso a paso. Este es un sistema de circuito abierto que calcula la altura actual del brazo correlacionando el número de pasos realizados en la distancia en milímetros. El microcontrolador también transmite los datos enviados desde MoveIt al brazo robótico que está montado en la plataforma vertical móvil.
Aquí hay fotos del circuito ensamblado para el levantamiento vertical.
El cable en espiral aloja los cables Tx / Rx para la comunicación en serie entre el circuito de elevación vertical y el controlador del brazo robótico, y el suministro de +12 V CC para potenciar el brazo robótico.
3.3 Robótico Armar Controlador ( Armar Niño )
Conecte los componentes como se muestra a continuación después de ensamblar el brazo robótico y apilar su escudo en Arduino Uno. Este circuito se comunica con el brazo principal a través de una comunicación en serie. Los datos recibidos son una matriz de ángulos requeridos para cada articulación que se utiliza para accionar los servomotores.
Aquí hay fotos del controlador de brazo robótico ensamblado apilado en un Arduino Uno.
Y algunos más para mostrar el resto de piezas mecánicas de O'nine.
3.4 Integrar todos los circuitos
Finalmente, conecte todos los circuitos que ha cableado previamente como se muestra a continuación. El diagrama también muestra cómo alimentar cada circuito:
4. Software
Tenga en cuenta que este proyecto debe ejecutarse en dos máquinas Linux (Ubuntu 14.04 o 16.04). Una máquina de desarrollo para ejecutar MoveIt y visualización de datos (Rviz) y otra máquina (placa de desarrollo ARM) para ejecutar el paquete de navegación del robot y los controladores de hardware / sensor.
Haga clic aquí para ver las placas de desarrollo compatibles con ROS que puede usar para el robot (preferiblemente 2 GB de RAM).
4.1 Instalación de ROS
Instale ROS en ambas máquinas:
git clone https://github.com/linorobot/rosmecd rosme./install
El instalador detecta automáticamente el sistema operativo y la arquitectura de la máquina para que no tenga que preocuparse de qué versión de ROS instalar.
4.2 ROS Paquetes Instalación
4.2.1 Instale lo siguiente en la máquina de desarrollo:
cd ~ / catkin_ws / srcgit clon https://github.com/linorobot/lino_pidgit clone https://github.com/linorobot/lino_msgsgit clone https://github.com/linorobot/lino_visualizecd .. &&catkin_make
4.2.2 Instale Linorobot en la computadora del robot (base del robot):
git clone https://github.com/linorobot/lino_installcd lino_install./install mecanum kinect
Esto instala el firmware, el software de navegación y los controladores de hardware / sensor de la base del robot.
4.2.3 Instale el paquete de O'nine en ambas máquinas:
clon de cdgit https://github.com/grassjelly/onine_installcd onine_install./install
Esto instala el firmware del brazo robótico, el solucionador de cinemática y las tareas autónomas de Onine.
4.2.4 Instalar alexa_tasker:
cd ~ / onine_ws / srcgit clon https://github.com/grassjelly/onine_alexacdcatkin_make
Esto descarga el cliente MQTT que vincula a O'nine y alexa. El paquete también contiene la aplicación NodeJS que se comprimirá como un archivo zip y se cargará en AWS Lambda.
5. Configuración del software
5.1 Configuración Arriba Habilidad de Alexa
5.1.1 Regístrese e inicie sesión
Cree una cuenta de desarrollador de Alexa aquí y haga clic en 'Iniciar a Habilidad ' :
Introduzca su dirección de correo electrónico y contraseña:
5.1.2 Iniciar una habilidad de Alexa
Haga clic en 'Obtener Comenzó ' En el kit de habilidades de Alexa.
Haga clic en 'Agregar a Nuevo Habilidad ' en el arriba derecha de el ventana:
5.1.3 Información sobre habilidades
Marque 'Personalizado Interacción Modelo ' en Tipo de habilidad.
Introduzca el nombre de su habilidad (opcionalmente el nombre de su robot) en 'Nombre'.
Introduzca el nombre de invocación de su habilidad (nombre para activar su habilidad) en 'Invocación Nombre '.
Haga clic en 'Siguiente'.
5.1.4 Modelo de interacción
Copie y pegue los códigos de https://github.com/grassjelly/onine_alexa/blob/master/lamda/assets/schema.json en 'Intent Schema' .
Copie y pegue los códigos de https://github.com/grassjelly/onine_alexa/blob/master/lamda/assets/utterances.txt en 'Muestra Expresiones '.
Haga clic en ' Siguiente'.
5.1.5 Configuración de habilidades
Copie su ID de habilidad de la aplicación de la esquina superior izquierda y vaya al paso 5.2 para crear una función Lambda. Tome nota del nombre del recurso de Amazon una vez que haya terminado de crear la función.
Marque 'AWS Lambda ARN ' e ingrese su ARN en la pestaña predeterminada.
Haga clic en 'Siguiente'.
5.1.6 Prueba de la habilidad
Ingrese el comando de voz debajo de 'Enter Expresión ' y haga clic en ' Preguntar
Puede comprobar si su habilidad funciona si hay una respuesta en 'Servicio Respuesta '.
5.2 Configuración Función Up Lambda
5.2.1 Regístrese e inicie sesión
Cree una cuenta de AWS Lamda aquí y haga clic en 'Firmar En a Consola ' en el arriba derecha de el ventana :
Introduzca su dirección de correo electrónico y contraseña.
5.2.2 Crear función Lambda
Haga clic en ' Crear Función ' en la parte superior derecha de la ventana para comenzar a hacer la función Lambda.
Elija 'NodeJS 4.3' en Runtime *.
Elija 'Elegir an existente función ' en Rol *.
Elija 'lambda_basic_execution' en Rol existente *.
Haga clic en ' Crear función' .
5.2.3 Vincular Alexa
Agregue un disparador y elija 'Alexa Habilidades Kit '
Ingresa tu 'id de habilidad' de Alexa Skill en ID de habilidad.
luego haga clic en 'Agregar'.
5.2.4 Cargar la aplicación
Antes de crear la función, copie y pegue las claves Pub-Sub de PubNub en el código de la función.
cd ~ / onine_ws / src / onine_alexa / lambda / appnano
Ahora genere el archivo zip que se cargará en AWS Lambda:
cd ~ / onine_ws / src / onine_alexa / lambda / appnpm install./zipme
Esto comprimirá la función lambda y los node_modules requeridos en un .zip
En Código de función, elija 'Cargar a .ZIP Archivo ' en Tipo de entrada de código.
Haga clic en 'Subir' y elija Onine.zip que se creó anteriormente para cargar.
Haga clic en 'Guardar' en el arriba derecha de el ventana.
Ahora su función Lambda está lista.
5.3 Creación de una cuenta PubNub
5.3.1 Registrarse e iniciar sesión
Cree una cuenta PubNub aquí.
Ingrese su correo electrónico y contraseña:
5.3.2 Cree una nueva aplicación PubNub
Haga clic en 'Crear Nuevo APLICACIÓN ' en el arriba derecha de el ventana :
Ingrese el nombre de su aplicación en ' Aplicación Nombre ' :
5.3.3 Registre sus claves públicas y de suscripción.
5.3.4 Introduzca sus claves de publicación y suscripción en estas líneas.
5.4 Creación Pusover Notificaciones
O'nine usa Pushover para enviar fotos al teléfono del usuario. Regístrese para obtener una cuenta aquí y descargue la aplicación para que pueda recibir fotos de O'nine cuando le pida que verifique algo dentro de la casa.
5.4.1 Iniciar sesión en Pushover
e ingrese su correo electrónico y contraseña:
Registre su clave de usuario una vez que haya iniciado sesión correctamente.
5.4.2 Crear una aplicación
Haga clic en ' Aplicaciones y complementos' en la parte superior de la ventana. Haga clic en 'Crear a Nuevo Solicitud / Token de API ' .
Introduzca el nombre de la aplicación en 'Nombre' .
Elija 'Aplicación' debajo de 'Tipo'.
Introduzca cualquier descripción de la aplicación.
Haga clic en 'Crear Aplicación '.
Una vez hecho esto, registre su token de API.
5.4.3 Copie y pegue el token de su aplicación y la clave de usuario en 'snaptask' de O'nine.
5.5 Instalando el firmwares
5.5.1 Reglas de uDev
Los puertos serie de los microcontroladores se definen utilizando sus nombres estáticos en los archivos roslaunch. Para que los puertos seriales se recuerden y se vinculen a sus nombres estáticos, se debe crear una regla uDev. Ejecute la herramienta uDev en la computadora del robot.
rosrun lino_udev lino_udev.py
Conecte la placa Teensy de la base del robot y escriba "linobase". Haga lo mismo para el circuito de elevación vertical y asígnele el nombre "un brazo". Guarde sus reglas de uDev presionando CTRL + C.
Copie las reglas de udev guardadas en /etc/udev/rules.d:
sudo cp 58-lino.rules /etc/udev/rules.d/58-lino.rules
Reinicie udev:
sudo service udev reloadsudo service udev restart
Confirme si las reglas de uDev funcionaron:
ls / dev / linobasels / dev / oninearm
Si no se detectaron los puertos, reinicie la computadora del robot y vuelva a verificar.
5.5.2 Cargar el firmware de la base del robot
Antes de cargar el firmware de la base del robot, debe definir las especificaciones de sus componentes, como el diámetro de la rueda, el PPR del codificador, etc. Haga clic aquí para configurar su robot.
Conecte la placa Teensy de la base del robot a la computadora del robot y ejecute:
roscd linorobot / firmware / teensyplatformio run --target upload
5.5.3 Cargar el firmware del elevador vertical
Conecte la placa Teensy del elevador vertical a la computadora del robot y ejecute:
cdplatformio run --target upload
5.5.4 Cargar el firmware del controlador del robot
Conecte el Arduino Uno a la computadora del robot y ejecute:
cdplatformio run --target upload
Recuerde desconectar el Arduino Uno después de cargar los códigos, ya que los datos recibidos se transmiten a través de la placa Teensy del Vertical Lift mediante comunicación en serie.
5.6 Editando Linorobot's códigos
Debe editar algunas líneas en los archivos de inicio de Linorobot (base de robot) para agregar los controladores necesarios para ejecutar Onine.
5.6.1 Añada lo siguiente después de esta línea en bringup.launch.
Esto agrega el paquete de software requerido para hablar con el microcontrolador de elevación vertical y Onine define las transformaciones de Onine (ubicación de las partes mecánicas de Onine en el espacio 3D).
5.6.2 Cambie esta línea a:
Esto es para crear un marco virtual que se utilizará para traducir los datos de la nube de puntos leídos del Kinect en datos de escaneo láser 2D.
5.6.3 Comente esta línea ya que las transformaciones para este enlace ya están definidas en el archivo URDF de Onine.
5.6.4 Reemplace las siguientes líneas por:
Esto ejecuta el paquete de software para traducir los datos de la nube de puntos leídos del Kinect en datos de escaneo láser 2D.
5.6.5 Reemplazar el marco de referencia base de Linorobot de base_link a base_footprint:
Cambiar de ' base_link 'a' base_footprint 'en lo siguiente:
linorobot / launch / amcl.launch
linorobot / launch / slam.launch
linorobot / param / navigation / global_costmap_params.yaml
linorobot / param / navigation / local_costmap_params.yaml
linorobot / src / lino_base_node.cpp - línea 90
linorobot / src / lino_base_node.cpp - lino 111
5.6.6 Vuelva a compilar el nodo de odometría:
cd ~ / linorobot_wscatkin_make
5.7 Configuración arriba O'nine's objeto detector
Para facilitar que O'nine detecte objetos, utiliza etiquetas AR para distinguir los objetos de interés cuando realiza tareas de selección y colocación. Concepto similar al de estos robots:
Imprime la imagen de abajo y pégala en el objeto que quieres que recoja O'nine. La dimensión de la imagen debe ser de 2 cm x 2 cm. Estos números son arbitrarios, solo recuerde cambiar la dimensión en el archivo de inicio del rastreador de Onine.
El software de percepción utilizado es http://wiki.ros.org/ar_track_alvar. Esto se puede reemplazar fácilmente si prefiere usar su propio software de detección de objetos o usar otros paquetes compatibles con ROS como:
http://wiki.ros.org/find_object_2d
http://wiki.ros.org/tabletop_object_detector
6. Ejecución de la demostración
Asegúrese de configurar su red antes de iniciar la demostración. Consulte esta red ROS para obtener un tutorial más completo.
6.1 Creando el mapa
O'nine utiliza un mapa creado previamente para localizarse y planificar su ruta cuando se desplaza por la casa. Ejecute lo siguiente para crear un mapa:
En la computadora del robot, abra 2 nuevas ventanas de terminal. Ejecute bringup.launch:
roslaunch linorobot bringup.launch
Ejecute slam.launch:
roslaunch linorobot slam.launch
En su computadora de desarrollo, abra 2 nuevas ventanas de terminal:Ejecute teleop_twist_keyboard:
rosrun teleop_twist_keyboard teleop_twist_keyboard.py
Ejecute rviz:
roscd lino_visualize / rvizrviz -d slam.rviz
Con teleop_twist_keyboard, conduce el robot por el área que deseas mapear.
Una vez que haya terminado de mapear, guarde el mapa ejecutando map_server en la computadora del robot:
rosrun map_server map_saver -f ~ / linorobot_ws / src / linorobot / maps / map
Compruebe si se han guardado map.pgm y map.yaml:
roscd linorobot / mapsls -a map.pgm map.yaml
Cambie el mapa invocado en navigate.launch para cargar su propio mapa. Cambiar 'house.yaml' a 'map.yaml' .
6.2 Obtener las coordenadas del objetivo objetivo
Cuando le pides a O'nine que realice una tarea que requiere una navegación autónoma dentro de la casa, tiene que conocer las coordenadas del punto donde tiene que hacer el trabajo.
Puede hacer eco de estas coordenadas suscribiéndose a move_base_simple / goal y señalando la ubicación de destino en Rviz.
SSH a la computadora robot y ejecute lo siguiente:
Ejecute bringup.launch:
roslaunch linorobot bringup.launch
En otra terminal, ejecute la pila de navegación:
roslaunch linorobot navigate.launch
Ejecute Rviz en su computadora de desarrollo:
roscd lino_visualize / rvizrviz -d navigate.rviz
Abra otra terminal en su computadora de desarrollo y ejecute:
eco rostopic move_base_simple / goal
This will echo the coordinates and heading of the target pose that you will click on Rviz.
On Rviz, click the point that is approximately 1 meter away from where you want the robot to perform the task and drag towards where the robot is supposed to face when it has reached it's goal. (1 box in Rviz is equals to 1 square meter).
Copy the coordinates on the window where you echo 'move_base_simple/goal '
Edit onine/onine_apps/scripts/fishtask.py and replace Point(x,y,z) with position/x position/y, and position/z from the echoed values. Replace Quaternion(x,y,z,w) with orientation/x, orientation/y, orientation/z, and orientation/w from the echoed values.
6.3 Running O'nine
6.3.1 Open a new terminal on the development computer and run the ROSCORE:
roscore
Open three new terminals on the development computer and SSH to the robot computer.
6.3.2 Run robot base's and robotic arm's driver:
roslaunch linorobot bringup.launch
6.3.3 Run the navigation software on the second terminal:
roslaunch linorobot navigate.launch
6.3.4 Run the object detection software on the third terminal:
roslaunch onine_apps ar_tracker.launch
On the development computer open two new terminals.
6.3.5 Run MoveIt software:
roslaunch onine_moveit_config demo.launch
This will run all the software required to move the robotic arm and open Rviz for data visualization.
6.3.6 Run the PubNub client which launches the autonomous task upon voice command through Amazon Echo Dot:
rosrun onine_alexa alexa_tasker.py
6.3.7 Before talking to executing voice commands, you have to help O'nine localize relative to the map.
On Rviz, click '2D Post Estimate' and click on the map the approximate location of the robot and drag towards O'nine's current heading.
Once O'nine is localized, you're now ready to command Alexa to ask Onine to perform tasks.
Have fun with your new personal home assistant robot!
7. Future Works
7.1 O'nine simulation model
Building the hardware can be time consuming and tedious. I'm planning to create a Gazebo simulation model so that users can play around with O'nine without the need of a hardware. This way, O'nine's Alexa Custom skill can be tried purely with software.
7.2 Better computing power
The first ARM board I used to run O'nine was an Nvidia Jetson TK1 which comes in nifty for computer vision applications. Due to power reasons I replaced it with an Odroid XU4 as it only requires 5V and has a smaller form factor. I'm currently eyeing on a Rock64 board which has 4GB of RAM and hopefully get more juice to run more applications concurrently. The current setup requires to offload some of the applications to my laptop and has to be hardwired to the dev board (ethernet cable) as there's a huge stream of data running across both machines.
Código
O'nine Software
Contains all robotics related code - Autonomous Navigation, Kinematics Solver, and high level scripts to accomplish pick and place tasks.https://github.com/grassjelly/onineAlexa - Robot integration
Contains all the codes that integrate Alexa Skill with the robotics system - Lambda App (NodeJS), Robot Tasker (A PubNub client that waits for Alexa commands and runs high level scripts to perform robot tasks).https://github.com/grassjelly/onine_alexaRobot Base
This is another project of mine - Linorobot. It is a suite of Open Source ROS compatible robots that aims to provide students, developers, and researchers a low-cost platform in creating new exciting applications on top of ROS.https://github.com/linorobot/linorobotEsquemas
Proceso de manufactura
- Robot Raspberry Pi controlado por Bluetooth
- Robot autónomo cuadrúpedo JQR
- Robot Pi simple
- Haga una máquina de escribir para hacer tareas caseras en casa
- Obstáculos que evitan el robot con servomotor
- Robot seguidor de línea
- Robot controlado por voz
- Plataforma de entrenamiento Arduino
- Brazo de robot Arduino DIY:controlado por gestos con las manos
- Robot de 4 ruedas hecho con Arduino controlado usando Dabble
- Robot para navegación interior supercogedora