Привод серводвигателя с использованием открытого CV

Я работаю над проектом робота для обнаружения объектов. Я использую программное обеспечение open cv для обнаружения объектов. Мой вопрос заключается в том, как я могу использовать открытые выходы cv (координаты xy) для серводвигателя. И как я могу взаимодействовать с компьютерными портами, используя открытый cv.

Вы захотите создать систему координат мировоззрения, а затем отслеживать объекты относительно положения робота.

Ответы (2)

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

Я предполагаю, что у вас работает часть OpenCV, и вы действительно получаете значения положения X/Y. Если у вас работает OpenCV, то я предполагаю, что вы также можете ссылаться на его двоичные файлы из своего компилятора. Например, вы можете добавить ссылки на сборку .NET OpenCV (emgucv) в Visual Studio. Затем ваше собственное приложение сможет получить значения X/Y.

Теперь вам нужно управлять серводвигателем. Вы можете взаимодействовать с ним несколькими способами. Один из способов — получить специальный драйвер/контроллер серводвигателя, который обменивается данными с вашим ПК через различные физические форматы — например, RS232, CAN, USB, Ethernet, Ethercat. Если у вас есть один из них, скорее всего, есть библиотека, с которой вы также можете связать свое приложение для управления двигателем.

Другой вариант — использовать Arduino, подходящий моторный шилд, а затем подключить Arduino к компьютеру через USB-соединение. Это становится виртуальным COM-портом, и вам нужно будет реализовать свой собственный протокол связи RS-232 для отправки команд на Arduino. Затем код, работающий на Arduino, будет анализировать эти входящие команды, а затем управлять двигателями через моторный шилд.

Если вы сможете конкретизировать свой вопрос, вы, вероятно, получите еще больше помощи от людей здесь.

Я согласен, что вопрос немного расплывчатый, но я постараюсь помочь. Я предполагаю, что вы можете легко получить свои координаты xy с помощью кода обнаружения объектов, и поэтому я также предполагаю, что вы можете определить угол, под которым вы хотите, чтобы ваш серводвигатель. Я думаю, что самый простой способ - заставить ваш компьютер общаться с отдельным процессором (микроконтроллером, FPGA) через какой-то протокол связи через порты вашего ПК (rs232, USB, параллельный порт). Arduino — хорошее начало для этого, поскольку у него есть встроенная библиотека Servo для управления серводвигателями вместе с простым протоколом связи UART.

Как сказал Дейв, вам придется реализовать собственный протокол rs232 для отправки команд на Arduino (если вы решите пойти по этому пути). Вы можете отправить угол всего одним байтом (при условии, что от 0 до 180 градусов). Вы даже можете добавить начальный и конечный байты только для более безопасного и надежного протокола связи. Вы также можете захотеть, чтобы Arduino отправлял сигнал(ы) подтверждения (ACK), чтобы определить, правильно ли были получены данные.

Теперь OpenCV не играет никакой роли в использовании коммуникационных портов на вашем ПК. Вы можете получить доступ к последовательному порту (или любому порту) с помощью Visual Studios. Вот хороший учебник: http://msdn.microsoft.com/en-us/library/ff802693.aspx

После того, как вы правильно открыли порт (как правило, вы хотите, чтобы последовательный порт был установлен на 8 бит, 1 стоповый бит, без четности при использовании Arduino), связь становится довольно простой. В основном вам нужно загрузить данные, которые вы хотите отправить, в буфер символов, а затем использовать метод WriteFile() для отправки этого буфера. Этот метод может даже сказать вам, сколько байтов было записано, если вы хотите убедиться, что хост правильно отправил данные. Метод ReadFile() работает очень похоже. Вы можете сделать так, чтобы Arduino опрашивал данные со стороны хоста и обновлять угол сервопривода при получении данных.