Instruções para correr o ROS roscore como serviço
Para o efeito é necessário criar dois ficheiros novos:
- /etc/systemd/system/roscore.service
- /etc/roscore_env.sh
Seguidamente usar o comando systemctl para testar o serviço e a sua activação posterior.
Criar o ficheiro para a unit roscore.service
sudo nano /etc/systemd/system/roscore.service
Substituir “kinetic” por “melodic” ou outra distribuição do ROS, na linha que começa por “ExecStart=”
Substituir “ubuntu” pelo user adequado na linha User=ubuntu
[Unit] After=NetworkManager.service time-sync.target [Service] Type=forking User=ubuntu # Start roscore as a fork and then wait for the tcp port to be opened # ---------------------------------------------------------------- # Source all the environment variables, start roscore in a fork # Since the service type is forking, systemd doesn't mark it as # 'started' until the original process exits, so we have the # non-forked shell wait until it can connect to the tcp opened by # roscore, and then exit, preventing conflicts with dependant services ExecStart=/bin/sh -c ". /opt/ros/kinetic/setup.sh; . /etc/roscore_env.sh; roscore & while ! echo exit | nc localhost 11311 > /dev/null; do sleep 1; done" [Install] WantedBy=multi-user.target
Criar o ficheiro com as variáveis de ambiente para o roscore
sudo nano /etc/roscore_env.sh
Colocar o seguinte texto.
#!/bin/sh export ROS_HOSTNAME=$(hostname).local export ROS_MASTER_URI=http://$ROS_HOSTNAME:11311
Após criar estes ficheiros passamos a fase de teste.
Teste e conclusão da configuração do serviço roscore
Para testar iniciamos o serviço e seguidamente consultamos o seu estado com os seguintes comandos:
systemctl start roscore systemctl status roscore
Se existir algum erro verificar se o texto foi bem copiado e as substituições bem feitas. Repetir a verificação até funcionar bem.
Após o serviço iniciar correctamente activar a sua inicialização automática com o seguinte comando:
systemctl enable roscore
O processo ficou concluido e o serviço roscore irá iniciar automaticamente.
Gestão do serviço roscore
Para iniciar o serviço
systemctl start roscore
Para saber o estado do serviço
systemctl status roscore
Para parar o serviço
systemctl stop roscore
Para ligar a inicialização automática do serviço
systemctl enable roscore
Para desligar a inicialização automática do serviço
systemctl disable roscore