Сбор данных датчиков клиент-сервера и ROS в C

#c #server #client #infinite-loop #ros

Вопрос:

В принципе, у меня разные датчики, и данные каждого датчика доступны в разных портах (как сервер). Мне нужно сделать две вещи:

  1. Напишите клиент для подключения к серверу, чтобы получить данные
  2. Опубликуйте данные в ROS (я предпочитаю писать свою программу на C )

Я пытаюсь найти информацию в Интернете, но у меня все еще есть несколько сомнений.

  1. Может ли один клиент подключаться ко многим разным серверам? Я имею в виду создание множества сокетов в одной основной функции?
  2. Должны ли клиент/сервер и 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.