Может кто-нибудь объяснить, как я могу использовать переменные окружения на 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 для проекта, в котором я нахожусь, поэтому любая помощь будет оценена. Если вам нужна дополнительная информация, просто дайте мне знать