ROS no Ubuntu Core Issues

1

Estou tendo alguns problemas com o Ubuntu Core e o ROS. Eu estou usando o Snapcraft. Consegui fazer o tutorial "crie seu primeiro snap" ( link ) e estava tudo bem .

Depois, segui o tutorial do ROS ( link ). Em vez de fazer um locutor e um ouvinte, eu só tenho um nó "hello world" que envia uma mensagem para a tela. Eu sou capaz de construir e instalar muito bem, mas na execução recebo a seguinte saída:

$USER@localhost:~$ ros-example.launch-project  
... logging to /home/$USER/snap/ros-example/x1/ros/log/a413e04a-efb3-11e6-bf45-3d232f894a41/roslaunch-localhost.localdomain-7392.log 
Checking log directory for disk usage. This may take awhile. 
Press Ctrl-C to interrupt

Traceback (most recent call last):   
  File "/snap/ros-example/x1/opt/ros/kinetic/lib/python2.7/dist-packages/roslaunch/__init__.py", line 307, in main
      p.start()   
  File "/snap/ros-example/x1/opt/ros/kinetic/lib/python2.7/dist-packages/roslaunch/parent.py", line 268, in start
    self._start_infrastructure()
  File "/snap/ros-example/x1/opt/ros/kinetic/lib/python2.7/dist-packages/roslaunch/parent.py", line 217, in _start_infrastructure
    self._load_config()   
  File "/snap/ros-example/x1/opt/ros/kinetic/lib/python2.7/dist-packages/roslaunch/parent.py", line 132, in _load_config
    roslaunch_strs=self.roslaunch_strs, verbose=self.verbose)   
  File "/snap/ros-example/x1/opt/ros/kinetic/lib/python2.7/dist-packages/roslaunch/config.py", line 471, in load_config_default
    config.assign_machines()   
  File "/snap/ros-example/x1/opt/ros/kinetic/lib/python2.7/dist-packages/roslaunch/config.py", line 222, in assign_machines
    if [m for m in machine_unify_dict.values() if not is_machine_local(m)]:   
  File "/snap/ros-example/x1/opt/ros/kinetic/lib/python2.7/dist-packages/roslaunch/core.py", line 97, in is_machine_local
    local_addresses = ['localhost'] + rosgraph.network.get_local_addresses()   
  File "/snap/ros-example/x1/opt/ros/kinetic/lib/python2.7/dist-packages/rosgraph/network.py", line 218, in get_local_addresses
    for iface in netifaces.interfaces(): 
OSError: [Errno 13] Permission denied

Eu adicionei as regras de instalação para os arquivos .cpp, .hpp e .launch na lista cmake, e a execução do comando roslaunch funciona para executar o nó. Mas a execução no ambiente Core como um piscar de olhos não funciona. Qualquer sugestão seria muito apreciada.

Aqui está minha cmakelist:

cmake_minimum_required(VERSION 2.8.3)
project(hello_world)

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
)

catkin_package()

include_directories(${catkin_INCLUDE_DIRS})

add_executable(write_prompt src/write_prompt.cpp)
target_link_libraries(write_prompt ${catkin_LIBRARIES})

install(TARGETS write_prompt
  ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
  LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
  RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

install(DIRECTORY include/${PROJECT_NAME}/
  DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
  FILES_MATCHING PATTERN "*.h"
  PATTERN "*.hpp"
  PATTERN ".svn" EXCLUDE
)

install(FILES
  launch/run_code.launch
  DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
)

E meu snapcraft.yaml:

name: ros-example
version: 1.0
summary: ROS Example
description: Runs a modified Hello World node
confinement: strict

apps:
  launch-project:
    command: roslaunch hello_world run_code.launch

parts:
  ros-project:
    plugin: catkin
    source: .
    catkin-packages:
      - hello_world
    rosdistro: kinetic
    
por eab 10.02.2017 / 19:01

1 resposta

3

Você está tão perto! Seu snap não está solicitando acesso à rede, o que, por padrão, os snaps não conseguem. Você faz isso definindo a propriedade plugs do aplicativo em questão. Tente transformar sua seção apps assim:

apps:
  launch-project:
    command: roslaunch hello_world run_code.launch
    plugs: [network, network-bind]

Depois de instalar isso, execute snap interfaces e você verá os conectores network e network-bind conectados ao slot do núcleo. Para saber mais sobre isso, confira o wiki de interfaces snapd .

Como exercício extra, quando estiver funcionando, tente desconectar as interfaces:

sudo snap disconnect ros-example:network
sudo snap disconnect ros-example:network-bind

E execute seu aplicativo novamente. Você deve ver a falha novamente com o mesmo erro.

Como nota final, enquanto você está desenvolvendo / testando as coisas, lembre-se de que você pode instalar com --devmode para pular o confinamento: sudo snap install --devmode <my snap> .

    
por Kyle 10.02.2017 / 19:26