Ubuntu — Как мне записать команды на устройство ttyACM0 и получить результирующие информационные данные, используя C / Stack Overflow

В настоящее время я застрял с задачей извлечения данных из декодера, который контролирует 6 совместных положений руки робота. Это устройство имеет интерфейс USB, который работает как последовательное устройство CDC. Набор команд ASCII позволяет хосту конфигурировать каждую ось для разрешения и устанавливать метод доступа. Текущее положение каждой оси выводится в технических единицах или в двоичном формате (в преобразованном виде).
в ASCII) с определенной пользователем скоростью. Протокол команд аналогичен последовательному протоколу USB (вот ссылка на техническое руководство декодера: http://www.soc-robotics.com/pdfs/Quad6X%20Technical%20Manual.pdf)

Используя Ubuntu, это устройство становится устройством ttyACM0, когда я набираю «dmesg» в терминале. Самое большее, что я получил, это использование «screen / dev / ttyACM0», и это позволяет мне вводить эти последовательные команды и просматривать информацию о выводе через терминал, однако это не решает задачу, которую я пытаюсь достичь.

Я пытаюсь написать код на C / C ++, который позволил бы программе записывать эти последовательные команды на устройство ttyACM0 для извлечения информационных данных, которые выводит устройство в результате. Этот код в конечном итоге будет использоваться в ROS для обеспечения контроля обратной связи по положению в каждом из суставов манипулятора робота с использованием полученных данных.

Честно говоря, это лучшее, что я мог придумать в слабой попытке записать одну из команд в файл ttyACM0 с информацией, которую я собрал:

#include <stdio.h>
#include <stdlib.h>

int main()
{
FILE *fp;
fp = fopen("/dev/ttyACM0", "w");

if(fp == NULL)
{
perror("File failed to open");
exit(1);
}

fprintf(fp, "i");fclose(fp);

return 0;
}

Кто-нибудь знает, как решить эту проблему? Есть ли способ взять код, который позволяет мне делать то, чего я достиг в терминале, но в соответствии с моими потребностями? Я зашел в тупик на форумах, которые рассказывают вам, как сделать это через терминал или как это сделать для Arduino и его компилятора. Я нахожусь в своем уме, чтобы понять это, помощь очень ценится.

1

Решение

Основным ресурсом по программированию последовательных каналов в средах POSIX является «Руководство по последовательному программированию для операционных систем POSIX». Обратите внимание, что в случае устройства CDC ACM настраивается не так много. И даже если вы попробуете, устройство может с радостью проигнорировать все, что касается скорости передачи, длины слова и так далее.

На самом деле с CDC ACM то, что вы сделали, уже в основном правильно. Однако вся эта буферизация stdio будет на вашем пути. Свободно добавляя fflush звонки помогут.

0

Другие решения


По вопросам рекламы [email protected]