2010-07-29 8 views
2

У меня есть один компьютер, на котором запущена программа C++ для управления роботом и другим компьютером, на котором запущена система компьютерного зрения (также написана на C++). Я хотел бы, чтобы эти две программы могли разговаривать друг с другом. Коммуникация не должна быть сложной, мне просто нужно, чтобы компьютер-робот мог сообщить компьютеру видения, когда начинается и заканчивается проб (когда нужно начинать и останавливать последовательность сбора данных). У кого-нибудь из вас есть советы о том, как подойти к этой проблеме? Связь Rs232 между компьютерами? Какое-то сетевое решение? дымовые сигналы? Любые предложения приветствуются. спасибо заранеесвязь между двумя компьютерами с программами 2 C++

(редактировать) В случае, если вы думаете, что вышеприведенное утверждение является расплывчатым:

Мне нужно передать двоичный (идти/не идти) сигнал с одного компьютера на другой. К сожалению, я не могу быть более конкретным в отношении того, как это будет выглядеть, потому что (очевидно) я не знаю, что доступно. Оба компьютера находятся в сети, и оба компьютера работают с окнами. Цель состоит в том, чтобы синхронизировать данные, собранные системой компьютерного зрения, с действиями, выполняемыми роботом. Связь должна быть достаточно быстрой, чтобы не замедлить работу робота или программы компьютерного видения. «хорошим» решением было бы 1) легко реализовать 2) быстро. Я не знаю много о сети, и я ищу место, чтобы начать искать.

еще раз спасибо за вашу помощь

+1

Слишком расплывчатый ответ на полезный ответ. – 2010-07-29 20:09:33

+2

Как насчет бонго-барабанов (http://slashdot.org/article.pl?sid=03/09/27/175242) или несущих голубей (http://en.wikipedia.org/wiki/IP_over_Avian_Carriers)? –

+0

Если эти компьютеры датируются по крайней мере с 1990 года, разве у них нет сетевого подключения, и они еще не включены в сеть? Если это так, разве ваши разработчики на C++ уже не знают ответа на этот вопрос?Если вы являетесь разработчиком C++, то вам лучше начать читать некоторые книги по написанию клиентов и серверов Socket Socket. –

ответ

2

Если они подключен к сети можно использовать только сокеты.

+0

спасибо, розетки выглядят многообещающими. Вот что он имеет в виду, если вам интересно http://en.wikipedia.org/wiki/Berkeley_sockets – NotNamedDwayne

0

Для Windows вам необходимо открыть порт COM n как файл для связи через последовательный порт [1]. Теперь у меня нет доступа к моему коду, я могу найти его, когда вернусь домой.

RS232 прост и мне это нравится. Однако, это is slow. Вы должны учитывать это в своем дизайне.

[1] Для C++.

4

Возможно, вы используете простой протокол UDP - преимущество в том, что если вы понимаете концепции простых протоколов пакетов на RS232, вам будет легко передать эти знания на отправку пакетов через UDP.

Если вы хотите, чтобы потоки байтов между двумя компьютерами надежно (как и в других частях системы беспокоились об ошибках и повторениях), то TCP/IP не намного сложнее использовать, чем UDP.

Доступ к UDP и TCP осуществляется через «сокеты». Боюсь, вы обнаружите, что из C++ существует довольно много утомительного шаблона для работы, но есть много и много примеров.

1

Это звучит неплохо для сетевого сокета. Если обе машины находятся в Windows, вы даже можете использовать именованные каналы.

2

Лучшим вариантом будет использование сетевой связи. Самый простой способ приблизиться к этому должен состоять в том, чтобы посмотреть на сетевые примеры в Qt.

В основном вы создадите клиент и серверное приложение. Вы решаете, что делает клиент, когда видит определенное сообщение с сервера. Это все. Qt должен заботиться о остальной части материала.

Другие ответы предлагают TCP/IP, UDP, RS232, ... Все эти вещи являются просто вариантами при использовании модуля QtNetwork. Я предполагаю, что, поскольку вы задаете свой вопрос, вы не знаете о различии между ними.Таким образом, самая безопасная ставка будет заключаться в использовании библиотеки высочайшего уровня (бесплатно), поэтому предлагается изучить Qt.

Другой вариант - использовать Boost.Asio. Я предпочитаю Qt-решение, так как их API лучше.

0

Большинство современных компьютеров имеют возможности Ethernet, поэтому получите себе дешевый концентратор или коммутатор и посмотрите на сетевые API. Обычно есть довольно простой сокет. Одно из преимуществ этого заключается в том, что, если вы хотите позже повысить коммуникационную способность, например, если ваше программное обеспечение для видения предоставляет инструкции и рекомендации вашему роботу, у вас есть основы.

Альтернативно, настройте свою программу видения, чтобы вы могли начать и остановить ее, нажав случайные клавиши. Когда вы собираетесь использовать его, поместите клавиатуру перед компакт-диском компьютера робота и извлеките в начале и конце запуска робота.

0

Это может быть излишним в вашей ситуации, но если бы я был на вашем месте, я бы, вероятно, реализовал его с использованием протокола HTTP. Компьютер видения будет запускать HTTP-сервер, и компьютер-робот будет связывать изменения состояния с помощью запросов POST. Poco C++ Net library предоставляет вам необходимые средства для этого.

0

Я бы использовал сокет TCP/IP для связи. TCP гарантирует, что данные сделают это. Итак, все, что вам нужно сделать, - это проанализировать данные.

0

RS232 - это простой вариант для программирования, однако современные ПК не имеют портов RS232. Возможно, вам понадобится получить адаптеры USB-RS232 или установить PCI-карту.

Другая проблема с RS232 в том, что у вас есть дополнительный провод, чтобы беспокоиться о том, что может быть иллюзией. Кроме того, кабели RS232 могут быть ограничены по длине (5-15 м), если вы не инвестируете в некоторые неуклюжие ретрансляторы RS232 или разъемы bluetooth и т. Д.

Кроме того, вы также добавляете еще один объект в свой проект, который может пойти неправильно и стоить вам времени при развертывании и отладке.

IMO, элегантное инженерное решение, должно было бы использовать имеющееся у вас оборудование и использовать сокеты TCP/IP для связи.

Веб купается с примерами по передаче сообщений между серверами и клиентами:

Если вы используете Linux: http://www.linuxhowtos.org/C_C++/socket.htm

Использование Окна: http://www.adp-gmbh.ch/win/misc/sockets.html

0

Я тоже мог бы смотреть на что-то например 0MQ, чтобы сделать соединение более надежным. Он будет передавать и собирать сообщения независимо от транспорта и обрабатывать буферизацию в случае временной потери подключения.

Но суть в том, что я буду использовать TCP/IP, но в зависимости от характера робота вам может понадобиться несколько более надежная система соединения, чем TCP-сокеты. UDP хорош, потому что он без установления соединения - если робот временно выходит за пределы диапазона/зрение/etc, вам не придется перестраивать сокет и контекст.

Смежные вопросы