;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

Traje robótico: o que é exoesqueleto e como ele pode ajudar nos movimentos

Do UOL*

28/04/2023 19h41

A senadora Mara Gabrilli (PSD-SP) publicou em suas redes sociais um vídeo testando um equipamento chamado exoesqueleto, que permite que pessoas com paralisia fiquem de pé e se movimentem.

O que é um exoesqueleto?

São estruturas que funcionam como um traje robótico, que podem ser acopladas ao corpo humano e ajudam na movimentação.

Formados por vários tipos de materiais: há exoesqueletos rígidos e outros com estruturas macias e elásticas.

A tecnologia é testada em vários países, com foco na reabilitação de pacientes e auxílio para a movimentação de pessoas com deficiência.

Há diferentes tipos em estudo. Já foram testados, por exemplo, exoesqueletos que captam a atividade cerebral e a transforma em impulso para os movimentos.

Também há modelos que funcionam com algoritmos. Uma técnica testada na USP, por exemplo, identifica, com base na força que o paciente faz, qual parte do membro apresenta mais dificuldades e atua na área afetada para ajudá-lo a completar o movimento.

"Não sou a mesma pessoa depois de testar esse equipamento", escreveu Gabrilli em suas redes sociais.

O modelo de Gabrilli

No caso dela, o exoesqueleto usado se chama Atalante e foi desenvolvido pela startup sa Wandercraf.

Mara - Reprodução/Instagram @maragabrilli - montagem UOL - Reprodução/Instagram @maragabrilli - montagem UOL
Mara Gabrilli anda com ajuda de exoesqueleto
Imagem: Reprodução/Instagram @maragabrilli - montagem UOL

O usuário "veste" o exoesqueleto. O modelo dispensa andadores e tem um sistema de controle de equilíbrio que permite maior estabilidade. Segundo Gabrilli, mesmo que o paciente se incline, o robô mantém o equilíbrio sem cair.

O equipamento funciona a partir de uma programação, feita com base nos objetivos do paciente. Segundo informações publicadas pela senadora, o exoesqueleto pode se inclinar, sentar e levantar, andar de frente, de costas e de lado, além de subir degraus.

A tecnologia usa a força do próprio corpo para permitir que Gabrilli ande, segundo a senadora afirmou. O modelo não funciona pela captação de impulsos cerebrais, já que não há eletrodos conectados ao cérebro.

O Atalante recebeu autorização da FDA (a Anvisa americana) para ser usado na reabilitação de pessoas que têm dificuldades de mobilidade, em especial as que sofreram AVC.

Pode ser usado em pessoas que sofrem de lesão medular, Parkinson, esclerose múltipla, esclerose lateral amiotrófica, traumatismo cranioencefálico, entre outras doenças ou condições que impactam os movimentos.

Não está disponível no Brasil. Ele já é permitido na União Europeia e nos Estados Unidos, onde Gabrilli fez os testes. Por lá, seu uso ainda é limitado às instituições de reabilitação.

*Com informações do Estadão Conteúdo