#c #server #client #infinite-loop #ros
Вопрос:
В принципе, у меня разные датчики, и данные каждого датчика доступны в разных портах (как сервер). Мне нужно сделать две вещи:
- Напишите клиент для подключения к серверу, чтобы получить данные
- Опубликуйте данные в ROS (я предпочитаю писать свою программу на C )
Я пытаюсь найти информацию в Интернете, но у меня все еще есть несколько сомнений.
- Может ли один клиент подключаться ко многим разным серверам? Я имею в виду создание множества сокетов в одной основной функции?
- Должны ли клиент/сервер и ROS публиковать/подписываться быть основной функцией? или я могу записать их в обычных функциях и вызвать эти функции в основной функции?
Я могу написать основную функцию, которая способна получать данные с сервера и публиковать их в ROS. Но это означает, что для каждого датчика мне нужно написать основную функцию. Тогда мне нужно запустить много программ. Это, конечно, не очень хорошее решение. Кроме того, у каждого издателя ROS есть цикл while, многие циклы в одной основной функции могут быть проблемой.
Если у кого-нибудь есть опыт в этом, пожалуйста, дайте мне несколько советов о том, как я могу правильно построить свою программу? Спасибо.
Комментарии:
1. Вы знаете нити?
2. Я предполагаю, что вам нужно будет написать узел транслятора, который сопоставляет данные датчиков с темами . Для этой цели вам, скорее всего, придется использовать другую библиотеку, такую как Boost ASIO, для подключения к датчикам. Затем вы регистрируете соответствующих издателей, которые отвечают за публикацию данных в ROS. В основном цикле вы затем связываетесь с датчиками, получаете данные датчиков и публикуете их в качестве темы ROS. Я лично на самом деле разработал бы код (потенциально с шаблонами C ) с входными параметрами, чтобы на самом деле один узел транслятора отвечал только за переназначение одного датчика .
3. @S. M. Да, тема-это вариант.
4. @2b-t Знаете ли вы какой-нибудь пример, на который я мог бы сослаться?
5. @Thinsheep Доступно несколько руководств по Boost ASIO, таких как это для TCP . К сожалению, я не знаю ни одного, хотя бы сочетающего повышение с ROS. Вы, вероятно, написали бы класс, который инкапсулирует такое соединение Boost ASIO, а также издателя ROS. Этот класс должен содержать функцию-член
publish
, которая подключается к серверу (tcp?) и получает данные датчика, а затем публикует их на издателе ROS.