Introdução
Durante a sprint 5, foi realizada uma refatoração significativa no código do backend e na lógica de movimentação do robô, com foco na entrega da versão final do projeto. A equipe se concentrou em ajustar e otimizar os componentes existentes, com base nos testes que foram realizados. Esses testes identificaram vários pontos de melhoria, particularmente na implementação do botão de emergência (Kill Switch). A funcionalidade do botão de emergência é crucial para a segurança e controle do robô, permitindo a interrupção imediata de suas operações em situações de risco. No entanto, a implementação original estava incorreta, o que levou à necessidade de uma revisão completa desta funcionalidade.
Além disso, a refatoração do código do backend incluiu a melhoria na disposição do código e ajustes em funções que poderiam afetar o desempenho do sistema. A seguir, será apresentado o código anterior do botão de emergência e a versão atualizada que corrigiu os problemas identificados.
Os testes atualizados realizados pelo nosso grupo podem ser vistos aqui`
Kill Switch
O Kill Switch, ou botão de emergência, é um mecanismo de segurança essencial em sistemas de robótica e automação. Sua principal função é permitir a interrupção imediata e segura das operações do robô em caso de emergência ou situação de risco. Este recurso é fundamental para prevenir acidentes, danos ao equipamento e garantir a segurança de operadores e outros envolvidos no ambiente de operação.
A importância do Kill Switch reside em sua capacidade de interromper rapidamente todas as atividades do robô, evitando ações descontroladas que poderiam resultar em danos ou lesões. Em um ambiente onde a segurança é uma prioridade, a implementação correta deste mecanismo é vital. Ele deve ser capaz de parar o robô de forma instantânea e confiável, independentemente do estado em que o sistema se encontra.
Na implementação anterior, o método utilizado para o Kill Switch simplesmente fechava a conexão com o ROS, e esse método apresentava algumas falhas:
- Incerteza na Parada do Robô: Fechar a conexão com o ROS não garantia que o robô parasse imediatamente. O robô poderia continuar se movendo ou operando de maneira imprevisível até que a conexão fosse restabelecida ou até que os comandos em execução fossem naturalmente finalizados.
- Falta de Controle: A abordagem não fornecia um mecanismo de controle explícito sobre o estado de emergência, deixando o robô em um estado possivelmente inseguro.
- Não Conformidade com Melhores Práticas: A implementação não seguia as melhores práticas para sistemas de segurança em robótica, que exigem uma parada controlada e imediata.
Visto o exposto, a seguir, tem-se o processo de mudança do Kill Switch:
Código Anterior
No código anterior, a tentativa de fechar a conexão com o ROS (Robot Operating System) era utilizada como uma forma de interromper as operações do robô. Abaixo está o trecho de código que implementava essa funcionalidade:
const closeConnection = () => {
if (ros) {
ros.close();
console.log('ROS connection closed.');
}
}
Esta abordagem apresentava várias limitações. Simplesmente fechar a conexão com o ROS não garantia uma parada segura e controlada do robô, além de não seguir as melhores práticas para a implementação de um botão de emergência. A falta de uma chamada explícita a um serviço de parada de emergência significava que o robô poderia continuar em um estado indefinido ou inseguro até que a conexão fosse restabelecida.
Código Atual
Para corrigir estas deficiências, foi desenvolvido um novo método que utiliza um serviço dedicado para a parada de emergência, conforme mostrado abaixo:
const emergencyStop = () => {
if (ros) {
const emergencyStopService = new ROSLIB.Service({
ros: ros,
name: "/emergency_stop",
serviceType: "std_srvs/srv/Empty",
});
const request = new ROSLIB.ServiceRequest({});
emergencyStopService.callService(request, (result) => {
console.log("Emergency stop service called.", result);
});
}
}
Nesta nova implementação, o método emergencyStop
cria um serviço ROS chamado /emergency_stop
do tipo std_srvs/srv/Empty
. Ao chamar este serviço, garantimos que o comando de parada de emergência seja enviado corretamente ao robô, permitindo uma resposta imediata e controlada. Este serviço é projetado especificamente para lidar com situações de emergência, garantindo que todas as operações do robô sejam interrompidas de forma segura.