Использование переменных окружения в ROS Java для Android - PullRequest
0 голосов
/ 30 января 2020

Может кто-нибудь объяснить, как я могу использовать переменные окружения на ros java в эмуляторе android?

Я пытаюсь запустить пример публикации android_core pubsub, но, как и некоторые люди, я ' У меня возникли проблемы с его использованием на эмуляторе. На реальном телефоне это работает безупречно, но на эмуляторе я вижу узлы и создаваемые темы, но после этого ничего не появляется в топи c, и сообщение об ошибке не отображается.

Моя проблема точно так же, как в этом вопросе (https://answers.ros.org/question/223602/android_core-emulator-registers-topic-but-not-sending-events/), и я видел много ответов (как @gdvhoorn в ссылке выше), которые говорят, что много раз такие проблемы с эмулятором вызвано из-за неправильной конфигурации сети, поэтому у меня есть два вопроса:

1 - Как я могу установить значения переменных среды в эмуляторе Android? Я искал, но не мог не может найти функцию установки, и когда я go в определении функции, он просто возвращает мне файл EnvironmentVariables.class, в котором переменные установлены следующим образом:

public interface EnvironmentVariables {
    String ROS_MASTER_URI = "ROS_MASTER_URI";
    String ROS_IP = "ROS_IP";
    String ROS_HOSTNAME = "ROS_HOSTNAME";
    String ROS_NAMESPACE = "ROS_NAMESPACE";
    String ROS_ROOT = "ROS_ROOT";
    String ROS_PACKAGE_PATH = "ROS_PACKAGE_PATH";
}

И когда я печатаю эти переменные в только во время выполнения изменился только главный URI из-за nodeConfiguration.setMasterUri. Так как мне изменить их, чтобы он работал в эмуляторе?

2 - Как мне настроить переменные среды, чтобы мой компьютер мог взаимодействовать с эмулятором? Эмулятор работает на порте localhost: 5554, но когда он запускается, он создает своего рода brigde и устанавливает собственный IP-адрес эмулятора на 10.0.2.15 или 16 в зависимости от используемого интерфейса, а хост-компьютер (где работает roscore) - на 10.0.2.2 , Но с хост-компьютера я не могу пропинговать 10.0.2.15 или 10.0.2.16, потому что они на самом деле не существуют. Когда приложение android подключается, оно показывает сообщение: Registrar: MasterXmlRpcEndpoint URI: http://10.0.2.2:11311/, и это правильно, потому что это адрес, по которому эмулятор находит мой компьютер, но издатель регистрируется на http://10.0.2.16:40719/, поэтому, когда я могу изменить, как могу можно увидеть в следующем сообщении:

Registrar: Registering publisher: Publisher<PublisherDefinition<PublisherIdentifier<NodeIdentifier</android_gingerbread/ros_text_view, http://10.0.2.16:40719/>, TopicIdentifier</rosout>>, Topic<TopicIdentifier</rosout>, TopicDescription<rosgraph_msgs/Log, acffd30cd6b6de30f120938c17c593fb>>>>

Но когда мой roscore попытается найти его, он не сможет подключиться к нему, потому что для моего компьютера нет ничего с IP 10.0.2.16, что мой хост-компьютер может видеть. Итак, как мне настроить переменные среды, чтобы мой компьютер мог взаимодействовать с эмулятором?

Мне действительно нужно использовать эмулятор, потому что в проекте, над которым я работаю, потребуется 6 телефонов, работающих вместе. в ROS, так что действительно лучше, если я могу использовать эмулятор. У меня уже есть некоторый опыт работы с ROS, но я только начал изучать java и Android, чтобы использовать его с android ro для проекта, в котором я нахожусь, поэтому любая помощь будет оценена. Если вам нужна дополнительная информация, просто дайте мне знать

...