Skip to content

matheussiqueira-dev/Robotics-Spatial-Understanding

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

23 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Robotics Spatial Understanding

CI License: MIT Node 20+ TypeScript React

Plataforma fullstack para analise espacial de cenas roboticas. Interface web moderna com API dedicada para inferencia visual de objetos em 2D, segmentacao por instancia, pontos de interesse e caixas delimitadoras 3D.


Visao geral

O sistema apoia operacoes de robotica aplicada β€” picking, inventario visual, inspecao e manipulacao assistida β€” com foco em:

  • Iteracao rapida de prompt e parametros de analise
  • Visualizacao tecnica clara das deteccoes sobre a imagem
  • Contrato de API estavel, versionado e com validacao rigorosa
  • Arquitetura preparada para substituicao do simulador por motores de inferencia reais

Arquitetura

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Frontend  (React 19 + Vite + TypeScript)                   β”‚
β”‚                                                             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚ TopBar    β”‚ Content Viewer    β”‚ Inspector (JSON)     β”‚  β”‚
β”‚  β”‚ SideCtrls β”‚ (Canvas + SVG)    β”‚ Request / Response   β”‚  β”‚
β”‚  β”‚ Examples  β”‚ Overlays          β”‚                      β”‚  β”‚
β”‚  β”‚ DetectSel β”‚ DrawMode          β”‚                      β”‚  β”‚
β”‚  β”‚ Prompt    β”‚                   β”‚                      β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚              β”‚                                              β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚ Jotai Atoms (state)                                    β”‚ β”‚
β”‚  β”‚ image Β· detections Β· ui Β· config Β· session            β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚              β”‚                                              β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚ services/spatialApi.ts  (HTTP client + fallback)       β”‚ β”‚
β”‚  β”‚ services/validators.ts  (runtime type guards)          β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
               β”‚ Vite proxy /api β†’ :8787
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Backend  (Express 5 + Zod + Helmet)                        β”‚
β”‚                                                             β”‚
β”‚  POST /api/v1/spatial/analyze                               β”‚
β”‚  GET  /api/v1/health                                        β”‚
β”‚                                                             β”‚
β”‚  β€’ Zod schema validation                                    β”‚
β”‚  β€’ Per-IP rate limiting (80 req/min)                        β”‚
β”‚  β€’ Content-Security-Policy via Helmet                       β”‚
β”‚  β€’ Structured JSON logging                                  β”‚
β”‚  β€’ simulateSpatialAnalysis  (shared/spatialSimulation.ts)   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Modos de deteccao

Modo Saida Uso tipico
2D Bounding Boxes [x, y, w, h] normalizado 0-1 Picking, contagem
Segmentation Masks Caixa + mascara SVG por instancia Inspeccao, separacao
Points Ponto (x, y) normalizado Planejamento de garra
3D Bounding Boxes [cx,cy,cz, l,w,h, rx,ry,rz] Manipulacao assistida

Stack

Frontend: React 19, TypeScript 5.8, Vite 6, Jotai, perfect-freehand Backend: Express 5, Zod, Helmet, CORS Qualidade: Vitest, ESLint (typescript-eslint strict), Prettier, GitHub Actions CI


Estrutura do projeto

.
β”œβ”€β”€ App.tsx                  # Layout principal
β”œβ”€β”€ Content.tsx              # Viewer de imagem + overlays de deteccao
β”œβ”€β”€ Prompt.tsx               # Painel de configuracao e execucao
β”œβ”€β”€ TopBar.tsx               # Cabecalho e controles globais
β”œβ”€β”€ SideControls.tsx         # Upload e modo de anotacao
β”œβ”€β”€ DetectTypeSelector.tsx   # Seletor de modo de deteccao
β”œβ”€β”€ ExampleImages.tsx        # Cenarios de exemplo (SVG procedural)
β”œβ”€β”€ ExtraModeControls.tsx    # Toolbar de anotacao
β”œβ”€β”€ Palette.tsx              # Seletor de cor para anotacoes
β”œβ”€β”€ ErrorBoundary.tsx        # React error boundary
β”œβ”€β”€ atoms.tsx                # Estado global (Jotai)
β”œβ”€β”€ hooks.tsx                # useResetState
β”œβ”€β”€ Types.tsx                # Tipos de dominio (union discriminada)
β”œβ”€β”€ consts.tsx               # Templates, exemplos e opcoes
β”œβ”€β”€ utils.tsx                # Utilitarios puros
β”œβ”€β”€ services/
β”‚   β”œβ”€β”€ spatialApi.ts        # Cliente HTTP com fallback local
β”‚   └── validators.ts        # Guards de runtime
β”œβ”€β”€ shared/
β”‚   └── spatialSimulation.ts # Simulador deterministico (RNG com seed)
β”œβ”€β”€ server/
β”‚   β”œβ”€β”€ index.ts             # API Express
β”‚   └── logger.ts            # Logger JSON estruturado
β”œβ”€β”€ tests/
β”‚   β”œβ”€β”€ spatial.test.ts      # Testes de simulacao e validacao
β”‚   └── utils.test.ts        # Testes de utilitarios
└── .github/
    └── workflows/ci.yml     # Pipeline CI (Node 20 e 22)

Instalacao e execucao

Pre-requisitos

  • Node.js 20+ (ver .nvmrc)
  • npm 10+

Passos

# 1. Instalar dependencias
npm install

# 2. Copiar variaveis de ambiente
cp .env.example .env.local

# 3. Rodar frontend + API em paralelo
npm run dev

Atalhos com Makefile

make install       # npm install
make dev           # frontend + backend
make build         # build de producao
make type-check    # tsc --noEmit
make lint          # eslint
make fmt           # prettier --write
make test          # vitest run
make coverage      # vitest run --coverage
make ci            # type-check + lint + fmt:check + test + build

Fluxo de analise

1. Selecionar imagem (upload ou cenario de exemplo)
         β”‚
         β–Ό
2. Escolher modo de deteccao
         β”‚
         β–Ό
3. Configurar: modelo, alvo, prompt, temperatura, FOV
         β”‚
         β–Ό
4. (Opcional) Anotar sobre a imagem
         β”‚
         β–Ό
5. Executar analise β†’ POST /api/v1/spatial/analyze
         β”‚
         β–Ό
6. Resposta validada β†’ overlays na imagem + JSON no inspector

Variaveis de ambiente

Variavel Padrao Descricao
VITE_SPATIAL_API_BASE_URL /api/v1 Base da API no frontend
VITE_SPATIAL_API_TIMEOUT_MS 15000 Timeout da requisicao HTTP (ms)
VITE_ENABLE_LOCAL_FALLBACK true Ativa simulador local se API falhar
VITE_SPATIAL_API_PROXY_TARGET http://localhost:8787 Alvo do proxy Vite
PORT 8787 Porta do servidor Express
SPATIAL_ALLOWED_ORIGIN * Origem permitida no CORS

Scripts

Comando Descricao
npm run dev Frontend + backend em paralelo
npm run dev:web Apenas frontend
npm run dev:api Apenas backend
npm run build Build de producao
npm run preview Preview do build
npm run type-check Verificacao de tipos TypeScript
npm run lint ESLint (typescript-eslint strict)
npm run lint:fix ESLint com correcao automatica
npm run fmt Prettier (formatar)
npm run fmt:check Prettier (verificar)
npm test Vitest (execucao unica)
npm run test:watch Vitest modo watch
npm run test:coverage Vitest com relatorio de cobertura

Deploy

Frontend

npm run build
# Publicar dist/ em Vercel, Netlify, Cloudflare Pages ou S3+CDN

Backend

# Container ou PaaS Node 20+
# Expor /api/v1/* via HTTPS
# Definir VITE_SPATIAL_API_BASE_URL para a URL publica da API

Melhorias futuras

  • Autenticacao com RBAC para ambientes multiusuario
  • Persistencia de sessoes e historico de analises
  • Observabilidade completa (traces distribuidos, metricas Prometheus)
  • Suite de testes de integracao da API e E2E com Playwright
  • Integracao com motores de inferencia reais em ambiente produtivo

Autoria

Desenvolvido por Matheus Siqueira


Licenca

MIT

About

Plataforma fullstack para analise espacial de cenas roboticas, com interface web moderna e API dedicada para inferencia de dados visuais (2D, segmentacao, pontos e caixas 3D).

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors