ROS roscore service

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