Narrativa da missão, passo a passo
As 44 etapas do roteiro com o texto que o operador lê e o algoritmo que cada uma representa, confrontados com os parâmetros que a simulação usa hoje. Serve para revisão: registra o que divergia, como ficou e — quando foi o caso — o que a própria revisão errou.
Uma das correções estava errada e foi desfeita. A da etapa 0.5 confundiu o plano do rotor com a face frontal da nacele e inverteu o sinal de uma folga de segurança. Está marcada em vermelho na seção 1, com o histórico completo — o registro não foi apagado.
Parâmetros vigentes
Extraídos do próprio simulador no momento em que este arquivo foi gerado.
| Parâmetro | Valor | Observação |
|---|---|---|
| Alcance de trabalho do C1 | 8 m | ajustável na simulação; nominal do sensor é 12 m |
| Afastamento de percepção | 6 m | fases F0 e FA |
| Afastamento fotográfico | 15 m | fase FB — depende da câmera, não do LiDAR |
| Afastamento do arco de raiz | 14 m | também fotográfico |
| Altura do cubo | 90 m | ponta da pá a 150 m |
| Comprimento da pá | 60 m | raiz cilíndrica até 10,8 m |
| Raio da torre | 2 → 1.3 m | afina da base ao topo |
| Rotor à frente do eixo | 7.5 m | OVERHANG |
| Resolução angular | 0.72° | define o espaçamento na superfície |
1 · Divergências corrigidas
Cada item mostra o texto anterior e o que está no simulador agora.
· dentro da fatia: 10 cm a 8 m
· dentro da fatia: 7,5 cm a 6 m
RECUO obrigatório: a nacele avança 8,7 m à frente do eixo. Manter 10 m do eixo deixaria o drone a 1,3 m dela.
RECUO obrigatório: a nacele avança 7,5 m à frente do eixo. Manter 8 m do eixo — o afastamento do perfilamento — deixaria o drone a apenas 0,5 m dela.
RECUO obrigatório: o NARIZ da nacele avança 8,7 m à frente do eixo da torre — 1,2 m além do próprio plano do rotor. Manter 8,0 m do eixo — o afastamento do perfilamento — colocaria o drone 0,7 m DENTRO do envelope dela. O recuo para 13,5 m devolve 4,8 m de folga.
OVERHANG + 1,2. Já OVERHANG = 7,5 m é o plano do rotor — outra coisa. Trocar um pelo outro deslocou a referência 1,2 m para trás e, com ela, o sinal da folga: o texto passou a anunciar +0,5 m de sobra onde há −0,7 m de interferência. A ramificação para folga negativa já existia no código e não disparava porque estava sendo alimentada com o número errado. A nacele agora vem de NAC_FRENTE e NAC_TRAS, declaradas uma vez e usadas tanto pelo obstáculo do ray-cast quanto pela narrativa — as duas não podem mais divergir.A trajetória em si sempre esteve correta: a etapa 0.5 recua para 13,5 m antes de chegar à altura da nacele. O defeito era só do texto que justifica o recuo.
afastamento = 15.5 m do EIXO
afastamento = 13.5 m do EIXO
Adquirir no meio seria apostar. Esta etapa para na BORDA do alcance, a 13 m.
Esta etapa para a 13 m laterais do eixo da pá; somando a profundidade, a pá ainda está a cerca de 15 m — FORA de alcance. A aquisição não acontece aqui: ela se dá durante o fechamento da etapa seguinte, à medida que a seção entra nos 8 m do sensor.
voa_ate(raiz_prevista + normal * 13 m)
enquanto nao adquirida:
cand = agrupa(C1.ler()) menos torre
se forma alongada plausivel: adquirida
voa_ate(raiz_prevista + normal * 13 m) // fora de alcance aqui: quem adquire e a etapa A.1b, // fechando ate a secao aparecer na fatia
Só agora fecha para 8 m, com a pá já ADQUIRIDA.
Só agora fecha para 6 m, adquirindo a pá durante a aproximação.
Seguimento a 0,3 m/s e 8 m de afastamento.
Seguimento a 0,3 m/s e 6 m de afastamento.
corrige_afastamento(d -> 8.0 m)
corrige_afastamento(d -> 6.0 m)
se folga < 12 m: recalcula com waypoint
// folga de PLANEJAMENTO, medida contra o modelo // ja construido — nao e alcance de sensor se folga_geometrica < 12 m: recalcula com waypoint
Mesma lógica da P1: chega-se pela raiz, e só depois de adquirir é que se fecha para 8 m.
Mesma lógica da P1: chega-se pela raiz, e o fechamento até 6 m é que traz a pá para dentro do alcance.
voa_ate(raiz_P3 + normal * 12 m)
voa_ate(raiz_P3 + normal * 8 m)
Densidade típica por pá: ~1.630 fatias, ~20 pontos por fatia na corda, cerca de 33 mil pontos por face — ~330 pontos por metro quadrado.
Densidade típica por pá: ~1.630 fatias, ~26 pontos por fatia na corda, cerca de 42 mil pontos por face — ~442 pontos por metro quadrado.
se d_min < 12 m e nao previsto: PARA
se d_min < 8 m e nao previsto: PARA
verifica_folga(ponto) >= 12 m (11 ocorrências nos trânsitos e arcos da Fase B)
// folga GEOMETRICA contra o modelo:
verifica_folga(ponto) >= 12 m
// Meia tarde. Decide a arquitetura.
// Decide a arquitetura de percepcao.
O preço: a distância de reação cai de ~60 m para 12 m.
O preço: a distância de reação cai de ~60 m para 8 m, e o afastamento de percepção para 6 m. Risco gerenciável por procedimento — aproximação pela raiz, contato contínuo, aborto por discrepância.
LiDAR 2D de 12 m como único sensor de percepção — sem cadastro prévio e sem RTK.
LiDAR 2D como único sensor de percepção — sem cadastro prévio e sem RTK. Alcance de trabalho 8 m · afastamento de percepção 6 m. (a segunda linha é reescrita a cada troca de parâmetro)
Conferidos e corretos
Valores que examinei e que não precisam mudar — registrados para que a revisão não os reabra.
| Item | Por que está certo |
|---|---|
| Alcance do C1 nas narrativas | F0 0.1, F0 0.3, FB B.0 e FB RTH já usam M.C1_RANGE e acompanham o botão. |
| Nomes das etapas | “Aproximação até 6 m” e “Fechamento para 6 m” já são montados a partir de D_PROF. |
| Afastamento fotográfico — 15 m | Não depende do LiDAR: vem do zoom da H20. Correto em todas as ocorrências. |
| Arco da raiz — 14 m e 10,8 m | Geometria da pá e afastamento de câmera. Não mudam. |
| 1.630 fatias por pá | Vem de 0,3 m/s a 10 Hz sobre 49,2 m. Independe do afastamento. |
| ~60 m de um sensor de longo alcance | Referência externa de comparação. Não muda. |
| Velocidades, alturas e ângulos | 0,5 m/s, 0,3 m/s, 1,0 m/s, cubo a 90 m, pá de 60 m, passo de 85°, 120° entre pás — todos conferem com o modelo. |
2 · Roteiro completo
As 44 etapas na ordem de execução. Borda verde marca etapa que recebeu correção.
Decolagem a cerca de 30 m do pé da torre. Repare na Vista 03: a fatia está VAZIA. O LiDAR alcança 8 m e a torre está a 30 m. Nesta fase ele não contribui — e é justamente essa lacuna que o telêmetro da câmera existe para fechar.
estado = DECOLANDO alvo_altitude = 5 m aguarda(isFlying && alt >= 5)
Varredura do gimbal com o telêmetro laser. Fora da torre o feixe se perde; sobre ela devolve ~30 m. A transição marca as BORDAS. Uma torre de 4 m vista de 30 m subtende 7,6°: de 1° em 1° obtêm-se ~7 acertos — o bastante para calcular direção, distância e diâmetro. Nada disso veio de cadastro.
para yaw de -30° a +30° passo 1°:
d = telemetro.ler()
se valido: registra(yaw, d)
direcao = bissetriz das bordas
diametro = distancia * abertura
se diametro fora de 2..6 m -> ABORTA
Aproximação a 0,5 m/s. Ao cruzar os 8 m o LiDAR entra em alcance e a fatia ganha vida: aparece um ARCO DE CÍRCULO. A partir daqui há DUAS medidas independentes da mesma distância. Divergência acima de 0,5 m interrompe a aproximação.
enquanto d_telemetro > 8.0:
avanca(0.5 m/s)
se |d_lidar - d_telemetro| > 0.5: PARA
se d_telemetro < 6.0: RECUA
Subida a 0,3 m/s, perfilando. É o coração da técnica. O LiDAR mede uma fatia horizontal 10× por segundo; a subida empilha as fatias, e a pilha É a nuvem 3D. · entre fatias: 3 cm · dentro da fatia: 7,5 cm a 6 m A fatia é sempre um ARCO DE CÍRCULO — e um círculo determina completamente as duas coordenadas horizontais. Casar fatias sucessivas dá posição centimétrica SEM GNSS. É por isto que a missão dispensa RTK.
a cada fatia (10 Hz):
pontos = C1.ler()
circ = RANSAC_circulo(pontos)
registra(altura, circ.centro, circ.raio)
delta = ICP_2D(fatia, anterior)
pose.corrige(delta)
nuvem.acumula(pontos, pose)
eixo_torre = ajuste_reta(centros)
RECUO obrigatório: o NARIZ da nacele avança 8,7 m à frente do eixo da torre — 1,2 m além do próprio plano do rotor. Manter 8,0 m do eixo — o afastamento do perfilamento — colocaria o drone 0,7 m DENTRO do envelope dela. O recuo para 13,5 m devolve 4,8 m de folga. No topo, dois eventos. O arco circular ACABA — e é isso que define a ALTURA DO CUBO, medida e não lida de cadastro. E surge um RETÂNGULO de 3,0 × 7,7 m: o lado maior dá o EIXO da máquina. Um retângulo, porém, é simétrico: dá a reta, não o sentido. Quem desfaz os 180° é a assimetria — a caixa não é centrada no eixo da torre, avança para o lado do rotor. Como o eixo da torre já foi medido na subida, o sentido sai da comparação.
se altura > cubo_estimado - 15:
afastamento = 13.5 m do EIXO
se circulo falhar por N fatias:
altura_cubo = ultima valida
caixa = caixa_minima(pontos_nacele)
eixo_maq = lado maior da caixa // reta: 180 ambiguo
off = centroide(caixa) - eixo_torre
yaw_nacele = eixo_maq orientado por off
Aproximação SEMPRE PELA RAIZ. O rotor foi freado com intenção de parar em Mercedes, mas não para exatamente ali. Um desvio de azimute desloca a pá proporcionalmente ao raio: 20° de desvio → 3,7 m na raiz → 20,5 m na ponta Adquirir no meio seria apostar. Esta etapa para a 13 m laterais do eixo da pá; somando a profundidade, a pá ainda está a cerca de 15 m — FORA de alcance. A aquisição não acontece aqui: ela se dá durante o fechamento da etapa seguinte, à medida que a seção entra nos 8 m do sensor.
raiz_prevista = cubo + direcao * 10.8 m voa_ate(raiz_prevista + normal * 13 m) // fora de alcance aqui: quem adquire e a etapa A.1b, // fechando ate a secao aparecer na fatia
Só agora fecha para 6 m, adquirindo a pá durante a aproximação. A aproximação é feita de LADO, dentro do plano do rotor. Com as pás embandeiradas a corda fica alinhada com barlavento-sotavento: de frente, o drone veria só o bordo de ataque, de poucos centímetros aparentes. De lado, vê a corda inteira.
enquanto d_lidar > 8.0:
aproxima(0.5 m/s)
se secao vazia: PARA
se d_lidar < 6.0: RECUA
Seguimento a 0,3 m/s e 6 m de afastamento. Esta pá é vertical e a fatia a corta PERPENDICULARMENTE: cada fatia é literalmente uma SEÇÃO DE AEROFÓLIO. Corda, passo e torção saem direto, sem inferência. A pá nunca sai do alcance: a cada instante sabe-se onde ela está porque está sendo MEDIDA.
a cada fatia:
secao = agrupa_alvo(C1.ler())
d = distancia_minima(secao)
corrige_afastamento(d -> 6.0 m)
corda = maior extensao
passo = angulo(corda, plano_rotor)
nuvem.acumula(pontos, pose)
Trânsito calculado sobre o MODELO PARCIAL já construído — torre, cubo, nacele e P1 inteira — e não sobre cadastro. O LiDAR segue em modo guarda.
rota = contorna(cubo, raio_seguranca) C1.modo = GUARDA velocidade = 1.5 m/s
Aqui está a pergunta que costuma travar o raciocínio: o eixo da P2 está 30° abaixo da horizontal, e a fatia a corta OBLIQUAMENTE. Isso estraga o modelo? NÃO. O perfil aparece ALONGADO 2× — exatamente 1/sen(30°). E não é problema porque O MODELO NÃO PRECISA DE CORTES PERPENDICULARES. Precisa de PONTOS SOBRE A SUPERFÍCIE. A seção verdadeira sai depois, em software.
// o codigo nao muda; muda a trajetoria direcao = (cos 210, sin 210) // desce 0.5 m e translada 0.87 m // a cada 1 m de avanco stretch = 1 / |sin(elevacao)| // = 2.0
A reta direta até a P3 passaria rente à própria P2, ao longo de quase toda a envergadura. Não é perigoso — a P2 acabou de ser medida ponto a ponto — mas voar a 5 m de qualquer coisa sem necessidade é gastar margem à toa.
// folga de PLANEJAMENTO, medida contra o modelo
// ja construido — nao e alcance de sensor
para cada segmento da rota:
se folga_geometrica < 12 m: recalcula com waypoint
C1.modo = GUARDA
Mesma lógica da P1: chega-se pela raiz, e o fechamento até 6 m é que traz a pá para dentro do alcance. A esta altura já estão construídos: torre, cubo, nacele, P1 e P2 inteiras.
direcao_P3 = rotaciona(eixo_P1_medido, +240°) voa_ate(raiz_P3 + normal * 8 m) aguarda aquisicao
Espelhada da P2. Ao final, a nuvem contém a torre, a nacele e as três pás. Densidade típica por pá: ~1.630 fatias, ~26 pontos por fatia na corda, cerca de 42 mil pontos por face — ~442 pontos por metro quadrado.
azimute_medido = mediana(eixos ajustados) // PORTAO DE QUALIDADE se |ang(P1,P2) - 120| > 3: REJEITA se residuo_rms > 25 cm: REJEITA
O passo que dissolve o problema do corte oblíquo — e acontece INTEIRAMENTE EM SOFTWARE, com o drone pairando. 1 · ajustar o EIXO de cada pá sobre a nuvem 2 · cortar em planos PERPENDICULARES a esse eixo 3 · extrair corda, passo e torção Só agora o operador recebe o modelo, revisa e confirma. Nenhuma trajetória de percepção voa sem confirmação humana.
para cada pa:
eixo = PCA(nuvem_pa)
para r de 10.8 a 60 passo 0.5:
secao = nuvem ∩ plano_perp(eixo, r)
corda(r), passo(r)
envia_por_MOP(modelo) // ~400 bytes
aguarda CONFIRMACAO DO OPERADOR
Recuo para 15 m. A fatia ESVAZIA: a pá está fora do alcance do LiDAR. Ele não fica ocioso — passa a GUARDA DE PROXIMIDADE 360°: não vê a pá, mas vê qualquer coisa que entre em 8 m. Por que 15 m e não 25? A 15 m os dois níveis de resolução saem da mesma posição, só mudando o zoom: varredura a 1,0 mm/px e detalhe a 0,3 mm/px. A 25 m o detalhe exigiria focal acima da disponível.
C1.modo = GUARDA_PROXIMIDADE
a cada fatia:
se d_min < 8 m e nao previsto: PARA
// navegacao passa a ser pelo MODELO
Passagem 1 de 12 — P1 · 12 h, INTRADORSO. Da raiz até a ponta, 49 m de envergadura, a 1,0 m/s, gimbal perpendicular à superfície. Disparo em intervalo durante o movimento: ~18 fotos a 1,0 mm/px. Superfície dentro do plano do rotor. Com as pás embandeiradas, intradorso e extradorso olham tangencialmente, não para barlavento.
face = IN (s=1, t=0) n = normal_da_face(modelo.pa[0], face) linha = eixo_pa deslocado de 15 m ao longo de n gimbal.aponta(-n) camera.intervalo(passo = 2.72 m, 1/1000 s) percorre(linha, 1.0 m/s) progresso[0][0] = CONCLUIDA
Quarto de arco em torno do eixo da pá, de intradorso para bordo de ataque. Na Vista 02 a trajetória CONTORNA a pá, não corta por dentro. Bordo de ataque e de fuga ficam em lados opostos do plano do rotor. Por isso a ordem é intradorso → bordo de ataque → extradorso → bordo de fuga: cada salto é de 90°, nunca de 180°.
theta0 = 0 // intradorso
theta1 = 90 // bordo de ataque
para th de theta0 a theta1 passo 5:
ponto = pa(r) + 15 * (cos th * p + sin th * n)
// folga GEOMETRICA contra o modelo:
verifica_folga(ponto) >= 12 m
Passagem 2 de 12 — P1 · 12 h, BORDO DE ATAQUE. Da ponta até a raiz, 49 m de envergadura, a 1,0 m/s, gimbal perpendicular à superfície. Disparo em intervalo durante o movimento: ~18 fotos a 1,0 mm/px. O bordo de ataque é a superfície mais crítica: é onde ocorre a erosão. Merece o maior GSD.
face = BA (s=0, t=1) n = normal_da_face(modelo.pa[0], face) linha = eixo_pa deslocado de 15 m ao longo de n gimbal.aponta(-n) camera.intervalo(passo = 2.72 m, 1/1000 s) percorre(linha, 1.0 m/s) progresso[0][1] = CONCLUIDA
Quarto de arco em torno do eixo da pá, de bordo de ataque para extradorso. Na Vista 02 a trajetória CONTORNA a pá, não corta por dentro. Bordo de ataque e de fuga ficam em lados opostos do plano do rotor. Por isso a ordem é intradorso → bordo de ataque → extradorso → bordo de fuga: cada salto é de 90°, nunca de 180°.
theta0 = 90 // bordo de ataque
theta1 = 180 // extradorso
para th de theta0 a theta1 passo 5:
ponto = pa(r) + 15 * (cos th * p + sin th * n)
// folga GEOMETRICA contra o modelo:
verifica_folga(ponto) >= 12 m
Passagem 3 de 12 — P1 · 12 h, EXTRADORSO. Da raiz até a ponta, 49 m de envergadura, a 1,0 m/s, gimbal perpendicular à superfície. Disparo em intervalo durante o movimento: ~18 fotos a 1,0 mm/px. Superfície dentro do plano do rotor. Com as pás embandeiradas, intradorso e extradorso olham tangencialmente, não para barlavento.
face = EX (s=-1, t=0) n = normal_da_face(modelo.pa[0], face) linha = eixo_pa deslocado de 15 m ao longo de n gimbal.aponta(-n) camera.intervalo(passo = 2.72 m, 1/1000 s) percorre(linha, 1.0 m/s) progresso[0][2] = CONCLUIDA
Quarto de arco em torno do eixo da pá, de extradorso para bordo de fuga. Na Vista 02 a trajetória CONTORNA a pá, não corta por dentro. Bordo de ataque e de fuga ficam em lados opostos do plano do rotor. Por isso a ordem é intradorso → bordo de ataque → extradorso → bordo de fuga: cada salto é de 90°, nunca de 180°.
theta0 = 180 // extradorso
theta1 = 270 // bordo de fuga
para th de theta0 a theta1 passo 5:
ponto = pa(r) + 15 * (cos th * p + sin th * n)
// folga GEOMETRICA contra o modelo:
verifica_folga(ponto) >= 12 m
Passagem 4 de 12 — P1 · 12 h, BORDO DE FUGA. Da ponta até a raiz, 49 m de envergadura, a 1,0 m/s, gimbal perpendicular à superfície. Disparo em intervalo durante o movimento: ~18 fotos a 1,0 mm/px. Superfície a sotavento: o drone passa atrás do plano do rotor. Em Mercedes há folga — nenhuma pá aponta para baixo.
face = BF (s=0, t=-1) n = normal_da_face(modelo.pa[0], face) linha = eixo_pa deslocado de 15 m ao longo de n gimbal.aponta(-n) camera.intervalo(passo = 2.72 m, 1/1000 s) percorre(linha, 1.0 m/s) progresso[0][3] = CONCLUIDA
Troca de pá. A estação anterior é a de bordo de fuga, a sotavento. Uma reta até a primeira da pá seguinte passaria rente à TORRE. A rota sobe para um ponto atrás do plano do rotor, 26 m para o lado e 16 m acima do cubo — cada uma das três escolhas resolve um conflito do traçado.
reta = segmento(atual, proxima)
// folga GEOMETRICA contra o modelo, nao alcance
se folga(reta, modelo) < 12 m:
rota = [atual, PT_TRANSITO, proxima]
Descida à primeira estação da P2 · 4 h. A posição sai de girar o afastamento de 15 m em torno do eixo, a partir da direção da corda MEDIDA na Fase A.
n = normal_da_face(modelo.pa[1], IN) alvo = ponto_da_pa(10.8 m) + n * 15 m
Passagem 5 de 12 — P2 · 4 h, INTRADORSO. Da raiz até a ponta, 49 m de envergadura, a 1,0 m/s, gimbal perpendicular à superfície. Disparo em intervalo durante o movimento: ~18 fotos a 1,0 mm/px. Superfície dentro do plano do rotor. Com as pás embandeiradas, intradorso e extradorso olham tangencialmente, não para barlavento.
face = IN (s=1, t=0) n = normal_da_face(modelo.pa[1], face) linha = eixo_pa deslocado de 15 m ao longo de n gimbal.aponta(-n) camera.intervalo(passo = 2.72 m, 1/1000 s) percorre(linha, 1.0 m/s) progresso[1][0] = CONCLUIDA
Quarto de arco em torno do eixo da pá, de intradorso para bordo de ataque. Na Vista 02 a trajetória CONTORNA a pá, não corta por dentro. Bordo de ataque e de fuga ficam em lados opostos do plano do rotor. Por isso a ordem é intradorso → bordo de ataque → extradorso → bordo de fuga: cada salto é de 90°, nunca de 180°.
theta0 = 0 // intradorso
theta1 = 90 // bordo de ataque
para th de theta0 a theta1 passo 5:
ponto = pa(r) + 15 * (cos th * p + sin th * n)
// folga GEOMETRICA contra o modelo:
verifica_folga(ponto) >= 12 m
Passagem 6 de 12 — P2 · 4 h, BORDO DE ATAQUE. Da ponta até a raiz, 49 m de envergadura, a 1,0 m/s, gimbal perpendicular à superfície. Disparo em intervalo durante o movimento: ~18 fotos a 1,0 mm/px. O bordo de ataque é a superfície mais crítica: é onde ocorre a erosão. Merece o maior GSD.
face = BA (s=0, t=1) n = normal_da_face(modelo.pa[1], face) linha = eixo_pa deslocado de 15 m ao longo de n gimbal.aponta(-n) camera.intervalo(passo = 2.72 m, 1/1000 s) percorre(linha, 1.0 m/s) progresso[1][1] = CONCLUIDA
Quarto de arco em torno do eixo da pá, de bordo de ataque para extradorso. Na Vista 02 a trajetória CONTORNA a pá, não corta por dentro. Bordo de ataque e de fuga ficam em lados opostos do plano do rotor. Por isso a ordem é intradorso → bordo de ataque → extradorso → bordo de fuga: cada salto é de 90°, nunca de 180°.
theta0 = 90 // bordo de ataque
theta1 = 180 // extradorso
para th de theta0 a theta1 passo 5:
ponto = pa(r) + 15 * (cos th * p + sin th * n)
// folga GEOMETRICA contra o modelo:
verifica_folga(ponto) >= 12 m
Passagem 7 de 12 — P2 · 4 h, EXTRADORSO. Da raiz até a ponta, 49 m de envergadura, a 1,0 m/s, gimbal perpendicular à superfície. Disparo em intervalo durante o movimento: ~18 fotos a 1,0 mm/px. Superfície dentro do plano do rotor. Com as pás embandeiradas, intradorso e extradorso olham tangencialmente, não para barlavento.
face = EX (s=-1, t=0) n = normal_da_face(modelo.pa[1], face) linha = eixo_pa deslocado de 15 m ao longo de n gimbal.aponta(-n) camera.intervalo(passo = 2.72 m, 1/1000 s) percorre(linha, 1.0 m/s) progresso[1][2] = CONCLUIDA
Quarto de arco em torno do eixo da pá, de extradorso para bordo de fuga. Na Vista 02 a trajetória CONTORNA a pá, não corta por dentro. Bordo de ataque e de fuga ficam em lados opostos do plano do rotor. Por isso a ordem é intradorso → bordo de ataque → extradorso → bordo de fuga: cada salto é de 90°, nunca de 180°.
theta0 = 180 // extradorso
theta1 = 270 // bordo de fuga
para th de theta0 a theta1 passo 5:
ponto = pa(r) + 15 * (cos th * p + sin th * n)
// folga GEOMETRICA contra o modelo:
verifica_folga(ponto) >= 12 m
Passagem 8 de 12 — P2 · 4 h, BORDO DE FUGA. Da ponta até a raiz, 49 m de envergadura, a 1,0 m/s, gimbal perpendicular à superfície. Disparo em intervalo durante o movimento: ~18 fotos a 1,0 mm/px. Superfície a sotavento: o drone passa atrás do plano do rotor. Em Mercedes há folga — nenhuma pá aponta para baixo.
face = BF (s=0, t=-1) n = normal_da_face(modelo.pa[1], face) linha = eixo_pa deslocado de 15 m ao longo de n gimbal.aponta(-n) camera.intervalo(passo = 2.72 m, 1/1000 s) percorre(linha, 1.0 m/s) progresso[1][3] = CONCLUIDA
Troca de pá. A estação anterior é a de bordo de fuga, a sotavento. Uma reta até a primeira da pá seguinte passaria rente à TORRE. A rota sobe para um ponto atrás do plano do rotor, 26 m para o lado e 16 m acima do cubo — cada uma das três escolhas resolve um conflito do traçado.
reta = segmento(atual, proxima)
// folga GEOMETRICA contra o modelo, nao alcance
se folga(reta, modelo) < 12 m:
rota = [atual, PT_TRANSITO, proxima]
Descida à primeira estação da P3 · 8 h. A posição sai de girar o afastamento de 15 m em torno do eixo, a partir da direção da corda MEDIDA na Fase A.
n = normal_da_face(modelo.pa[2], IN) alvo = ponto_da_pa(10.8 m) + n * 15 m
Passagem 9 de 12 — P3 · 8 h, INTRADORSO. Da raiz até a ponta, 49 m de envergadura, a 1,0 m/s, gimbal perpendicular à superfície. Disparo em intervalo durante o movimento: ~18 fotos a 1,0 mm/px. Superfície dentro do plano do rotor. Com as pás embandeiradas, intradorso e extradorso olham tangencialmente, não para barlavento.
face = IN (s=1, t=0) n = normal_da_face(modelo.pa[2], face) linha = eixo_pa deslocado de 15 m ao longo de n gimbal.aponta(-n) camera.intervalo(passo = 2.72 m, 1/1000 s) percorre(linha, 1.0 m/s) progresso[2][0] = CONCLUIDA
Quarto de arco em torno do eixo da pá, de intradorso para bordo de ataque. Na Vista 02 a trajetória CONTORNA a pá, não corta por dentro. Bordo de ataque e de fuga ficam em lados opostos do plano do rotor. Por isso a ordem é intradorso → bordo de ataque → extradorso → bordo de fuga: cada salto é de 90°, nunca de 180°.
theta0 = 0 // intradorso
theta1 = 90 // bordo de ataque
para th de theta0 a theta1 passo 5:
ponto = pa(r) + 15 * (cos th * p + sin th * n)
// folga GEOMETRICA contra o modelo:
verifica_folga(ponto) >= 12 m
Passagem 10 de 12 — P3 · 8 h, BORDO DE ATAQUE. Da ponta até a raiz, 49 m de envergadura, a 1,0 m/s, gimbal perpendicular à superfície. Disparo em intervalo durante o movimento: ~18 fotos a 1,0 mm/px. O bordo de ataque é a superfície mais crítica: é onde ocorre a erosão. Merece o maior GSD.
face = BA (s=0, t=1) n = normal_da_face(modelo.pa[2], face) linha = eixo_pa deslocado de 15 m ao longo de n gimbal.aponta(-n) camera.intervalo(passo = 2.72 m, 1/1000 s) percorre(linha, 1.0 m/s) progresso[2][1] = CONCLUIDA
Quarto de arco em torno do eixo da pá, de bordo de ataque para extradorso. Na Vista 02 a trajetória CONTORNA a pá, não corta por dentro. Bordo de ataque e de fuga ficam em lados opostos do plano do rotor. Por isso a ordem é intradorso → bordo de ataque → extradorso → bordo de fuga: cada salto é de 90°, nunca de 180°.
theta0 = 90 // bordo de ataque
theta1 = 180 // extradorso
para th de theta0 a theta1 passo 5:
ponto = pa(r) + 15 * (cos th * p + sin th * n)
// folga GEOMETRICA contra o modelo:
verifica_folga(ponto) >= 12 m
Passagem 11 de 12 — P3 · 8 h, EXTRADORSO. Da raiz até a ponta, 49 m de envergadura, a 1,0 m/s, gimbal perpendicular à superfície. Disparo em intervalo durante o movimento: ~18 fotos a 1,0 mm/px. Superfície dentro do plano do rotor. Com as pás embandeiradas, intradorso e extradorso olham tangencialmente, não para barlavento.
face = EX (s=-1, t=0) n = normal_da_face(modelo.pa[2], face) linha = eixo_pa deslocado de 15 m ao longo de n gimbal.aponta(-n) camera.intervalo(passo = 2.72 m, 1/1000 s) percorre(linha, 1.0 m/s) progresso[2][2] = CONCLUIDA
Quarto de arco em torno do eixo da pá, de extradorso para bordo de fuga. Na Vista 02 a trajetória CONTORNA a pá, não corta por dentro. Bordo de ataque e de fuga ficam em lados opostos do plano do rotor. Por isso a ordem é intradorso → bordo de ataque → extradorso → bordo de fuga: cada salto é de 90°, nunca de 180°.
theta0 = 180 // extradorso
theta1 = 270 // bordo de fuga
para th de theta0 a theta1 passo 5:
ponto = pa(r) + 15 * (cos th * p + sin th * n)
// folga GEOMETRICA contra o modelo:
verifica_folga(ponto) >= 12 m
Passagem 12 de 12 — P3 · 8 h, BORDO DE FUGA. Da ponta até a raiz, 49 m de envergadura, a 1,0 m/s, gimbal perpendicular à superfície. Disparo em intervalo durante o movimento: ~18 fotos a 1,0 mm/px. Superfície a sotavento: o drone passa atrás do plano do rotor. Em Mercedes há folga — nenhuma pá aponta para baixo.
face = BF (s=0, t=-1) n = normal_da_face(modelo.pa[2], face) linha = eixo_pa deslocado de 15 m ao longo de n gimbal.aponta(-n) camera.intervalo(passo = 2.72 m, 1/1000 s) percorre(linha, 1.0 m/s) progresso[2][3] = CONCLUIDA
Arco da raiz — o trecho de 0 a 10,8 m, que NÃO é coberto pelas 12 passagens. Até 18 % da envergadura a pá ainda é o CILINDRO do rolamento de passo: não existem ali as quatro faces. O que faz sentido é ORBITAR o eixo. E não é região secundária: é onde o MOMENTO FLETOR É MÁXIMO, onde ficam os parafusos de raiz e a linha de colagem. Órbita completa: esta pá aponta para cima e não há torre no caminho.
r_raiz = 5,4 m
d = 14 m
arco = varredura_numerica(folga >= 5 m)
para th no arco, passo 60 graus:
ponto = pa(r) + d * (cos th * p + sin th * n)
aponta_gimbal(eixo da pa); dispara()
Arco da raiz — o trecho de 0 a 10,8 m, que NÃO é coberto pelas 12 passagens. Até 18 % da envergadura a pá ainda é o CILINDRO do rolamento de passo: não existem ali as quatro faces. O que faz sentido é ORBITAR o eixo. E não é região secundária: é onde o MOMENTO FLETOR É MÁXIMO, onde ficam os parafusos de raiz e a linha de colagem. Arco de 290°, não 360°: um setor cairia na zona de exclusão da torre — e ele inclui o lado de SOTAVENTO. A face de trás continua inspecionada, das duas estações que flanqueiam o setor, a apenas 35° de incidência. Zero grau de circunferência sem cobertura útil. O preço é GSD efetivo 1,22× o nominal, compensado com mais zoom nessas duas estações.
r_raiz = 5,4 m
d = 14 m
arco = varredura_numerica(folga >= 5 m)
para th no arco, passo 60 graus:
ponto = pa(r) + d * (cos th * p + sin th * n)
aponta_gimbal(eixo da pa); dispara()
Arco da raiz — o trecho de 0 a 10,8 m, que NÃO é coberto pelas 12 passagens. Até 18 % da envergadura a pá ainda é o CILINDRO do rolamento de passo: não existem ali as quatro faces. O que faz sentido é ORBITAR o eixo. E não é região secundária: é onde o MOMENTO FLETOR É MÁXIMO, onde ficam os parafusos de raiz e a linha de colagem. Arco de 290°, não 360°: um setor cairia na zona de exclusão da torre — e ele inclui o lado de SOTAVENTO. A face de trás continua inspecionada, das duas estações que flanqueiam o setor, a apenas 35° de incidência. Zero grau de circunferência sem cobertura útil. O preço é GSD efetivo 1,22× o nominal, compensado com mais zoom nessas duas estações.
r_raiz = 5,4 m
d = 14 m
arco = varredura_numerica(folga >= 5 m)
para th no arco, passo 60 graus:
ponto = pa(r) + d * (cos th * p + sin th * n)
aponta_gimbal(eixo da pa); dispara()
Missão concluída. · UM LiDAR de US$ 100, 110 g, 2,5 W · SEM odometria inercial, SEM IMU · carga de CPU abaixo de 5 % · SEM cadastro obrigatório: torre, cubo e nacele foram medidos · SEM RTK: a navegação é relativa e medida pelo sensor O preço: a distância de reação cai de ~60 m para 8 m, e o afastamento de percepção para 6 m. Risco gerenciável por procedimento — aproximação pela raiz, contato contínuo, aborto por discrepância.
retorno_monitorado_ate_pouso() // ENSAIO PENDENTE, ELIMINATORIO: // alcance util do C1 sob sol direto, // contra gel coat branco. // Decide a arquitetura de percepcao.