Taller de optimización bayesiana con una Radxa ZERO 3W, un NeoPixel y un
sensor de color TCS34725. Las tres variables son la intensidad de los canales
del LED (R, G, B). El sensor produce otro color (R, G, B) y BayesOpt busca
el LED que minimiza la distancia al color objetivo.
La función de costo es la distancia euclidiana en RGB:
distancia = √((Rt − Rm)² + (Gt − Gm)² + (Bt − Bm)²)
Una distancia 0 es una coincidencia perfecta; valores menores son mejores.
El RGB del TCS34725 se normaliza como canal / clear × 255. La luz ambiente
sigue formando parte de la lectura, pero las exposiciones pequeñas ya no se
comprimen artificialmente a valores entre 0 y 2.
Desde una terminal del escritorio compartido:
./get-bayesopt-code
cd cdmx-bayesopt
./scripts/color-lab.shAbra http://equipoN.local:8010/. Color Lab permite elegir el color y la
intensidad del LED, ver las lecturas RGB del sensor, limpiar el historial y
ajustar el máximo de la gráfica. Ctrl-C detiene el sitio y el muestreo. Color
Lab funciona de manera independiente a los ejercicios de BayesOpt.
Los únicos conceptos de BayesOpt viven en src/bo/:
search_space.py: definir los límites de rojo, verde y azul.metric.py: implementar la distancia RGB.prior.py: implementar el prior RBF del proceso gaussiano.sampling.py: elegir la siguiente muestra con expected improvement.
Cada función contiene un bloque PUT YOUR CODE HERE y lanza
NotImplementedError intencionalmente. Esto permite que cada equipo vea con
claridad qué debe completar. El programa encuentra los pasos en ese mismo
orden. Al ejecutar antes de resolverlos aparece
workshop exercise incomplete en lugar de comenzar una campaña incorrecta.
Después de completar o cambiar un paso, ejecute:
make test-exercisesLas pruebas comprueban solamente el comportamiento esencial. Por ejemplo, la métrica puede usar norma L1, L2 u otra distancia razonable; no tiene que coincidir exactamente con la solución de los instructores.
Detenga Color Lab para liberar GPIO y ejecute:
./scripts/bayesopt.sh '#4A80C0'
# también acepta: ./scripts/bayesopt.sh '74,128,192'La campaña aparece en http://equipoN.local:8000/. El historial se guarda en
runs/color-campaign/ con el RGB del LED, el RGB medido y la distancia. El GP
siempre recibe tres entradas: rojo, verde y azul.
Dentro de src/ hay directamente tres carpetas y ningún paquete intermedio:
bo/ espacio de búsqueda, métrica, prior GP y muestreo
utils/ hardware, campaña, CLI, colores y artefactos compartidos
web/ únicamente la aplicación Color Lab y su HTML
| Dispositivo | Señal | Pin físico |
|---|---|---|
| TCS34725 | VCC / GND / SCL / SDA | 4 / 6 / 8 / 10 |
| NeoPixel | VCC / DIN / GND | 2 / 19 / 20 |
La imagen mantiene activos i2c-gpio-cdmx en los pines 8/10 y SPI3_MOSI en
el pin 19. Se recomienda un 74AHCT125 o 74HCT245 para DIN si el NeoPixel usa
5 V.
En RadxaOS, una sola vez desde una sesión donde sudo esté permitido:
git clone https://github.com/the-matter-lab/cdmx-bayesopt.git
cd cdmx-bayesopt
./scripts/setup.sh
sudo rebootSin hardware, pruebe Color Lab con ./scripts/color-lab.sh --simulate.
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --editable '.[visual]'
make testLas interfaces locales no tienen autenticación: úselas solamente en una LAN
de confianza. Proyecto inspirado por
self-driving-lab-demo;
licencia y atribución en LICENSE y NOTICE.md.