Perseverance o Perseverancia —apodado Percy— es un vehículo robotizado diseñado y fabricado por el Laboratorio JPL de la NASA para explorar el cráter Jezero de Marte como parte de la misión Mars 2020 del Programa de Exploración de Marte de la NASA. Fue lanzado el 30 de julio de 2020 a las 11:50 UTC1 desde Cabo Cañaveral en Florida y aterrizó en Marte el 18 de febrero de 2021 a las 20:56 UTC. Fuente: Wikipedia
Perseverance es un proyecto para replicar a escala el rover marciano del mismo nombre en un modelo imprimible. No es un proyecto nuevo, empezó en 2016 con nombre Curiosity, el rover gemelo que la NASA lanzó unos años antes. En aquella ocasión se diseñó a dos escalas: 1:10 y 1:5, pero el primero nunca llegó a ser funcional (siendo sinceros, sí que hubo otros makers que lo hicieron funcional tal y como está referenciado en la página de Curiosity). A la hora de revivir el proyecto para esta vez sí lo sea, se le cambió el nombre.
perseverar
Del lat. perseverāre.
1. intr. Mantenerse constante en la prosecución de lo comenzado, en una actitud o en una opinión.
La parte mecánica mantiene el mecanismo de balancines del original -rocker-bogie - con barra estabilizadora, pero se han rediseñado algunas piezas para que sea más robusto y más fácil de imprimir. También se ha rediseñado el chasis, que ahora está basado en una plancha de Dibond. En una esquina tiene un soporte abatible para montar una GoPro u otra cámara y conducirlo en modo FPV.
El diseño está completo en Github, tanto en formato STL para imprimir directamente como los fuentes en .SCAD para modificar. Cada rueda tiene una llanta de PLA, una cubierta de Filaflex y un motor N20. Las cuatro de las esquinas utilizan un servo para girar; para que el diseño sea robusto lo ideal es que sean de engranajes metálicos. En conjunto es mucho más sencillo -y económico- que el Curiosity en escala 1:5.
Las uniones articuladas de los balancines se hacen con tornillos M6x30. Una de las piezas debe repasarse con una broca de 6mm para que el eje gire libremente. La otra tiene un diámetro ligeramente inferior para que el tornillo M6 haga rosca al entrar y quede fijado.
Aparte de las piezas impresas, para la parte mecánica necesitaremos los siguientes componentes:
Para este proyecto hemos elegido una electrónica sencilla y barata. La idea es que no tengas que comprarte una emisora de radiocontrol. De todos modos si quieres esa opción, tanto la electrónica del Curiosity 1:5 como la de ExoMars te valdrán. Y por supuesto si lo controlas con un Arduino -no digamos ya con una Raspberry- puedes hacerlo autónomo.
Para hacer moverse las ruedas vamos a utilizar un sencillo módulo de radiocontrol (RC) que ya usamos en el proyecto Meccano RC. Su conexión es muy simple: tiene una entrada de alimentación (cuatro pilas AA desechables o recargables) y dos salidas para dos motores con un puente H que permite la inversión de giro. En nuestro caso conectaremos a cada una de estas salidas los tres motores de cada lado.
La operación del mando RC es sencilla, cada cruceta maneja las ruedas de un lado. Pulsando ambas hacia delante o atrás de moverá en ese sentido. Pulsando uno hacia delante y otro hacia atrás rotará sobre si mismo, pero para eso necesitaremos girar las ruedas de las esquinas con los servos. Esto último no es imprescindible para que Perseverance se mueva, aunque mejora la fluidez.
El módulo va montado en un soporte ad-hoc en la parte trasera. Y para protegerlo lleva una cubierta con la forma del RTG de Perseverance.
Para conectar los motores debemos ser cuidadosos con la polaridad para que todos los de cada lado giren en el mismo sentido y además lo hagan según la dirección del mando.
Cuando el rover avance o retroceda en línea recta, todos los servos deberán hacer que las ruedas estén paralelas. Cuando rote sobre si mismo debemos colocarlas de modo que sus ejes pasen por el mismo punto central.
Para saber qué posición elegir necesitamos saber la dirección de giro de los motores comandada por el módulo RC, lo que haremos con un circuito integrado con optoacopladores (CNY74-4) utilizados como sensores.
Cada motor lleva dos fotodiodos en paralelo invertidos, de modo que sólo uno se encenderá en función del giro y nos dará salida en el fototransistor asociado, y con ello la información que queremos en dos entradas digitales D1/D2 del Arduino según la siguiente tabla:
Las salidas del optoacoplador se configuran como entradas (pines 10, 16, 14 y 15) en un Arduino que a su vez dará salida PWM para controlar cuatro servos (pines 3, 5, 6 y 9). En la foto se ve el montaje con un Arduino Pro Micro, pero cualquiera valdrá. Además se ha utilizado un pequeño step-up para garantizar la tensión de alimentación y que el sistema pueda alimentarse también con 4 pilas AA recargables.
El diagrama de bloques del control es el siguiente
El esquema se refiere al flujo de información, la parte electrónica. La parte de alimentación es diferente: las pilas AA alimentan al receptor RC, y en la salida de su interruptor (positivo, cable rojo) hemos soldado un cable de alimentación para que al encender y apagar el módulo lo hagamos con todo lo demás. Ese cable alimenta los servos y el elevador DC-DC para el Arduino, que a su vez con su salida de 5V alimenta el optoacoplador. Para estas dos alimentaciones (directa de las pilas/5V de Arduino) utilizamos las dos líneas laterales de la placa de prototipado.
La implementación física, por debajo del Dibond es la siguiente.
Con la electrónica sencilla que hemos elegido sólo utilizaremos un Arduino para leer el sentido de giro de los motores con cuatro entradas digitales, y posicionar los servos con cuatro salidas PWM. Aquí puedes ver el código:
void loop() { boolean rotate = (read(D1) && read(D4)) || (read(D2) && read(D3)); if (rotate){ servo1.write(s1giro); //posicion giro servo3.write(s3giro); servo4.write(s4giro); servo6.write(s6giro); } else{ servo1.write(s1center); //posicion recta servo3.write(s3center); servo4.write(s4center); servo6.write(s6center); } }
El programa completo está aquí. La lectura de los optoacopladores tiene algo de ruido por lo que se leen 5 veces y se hace un promedio.