我目前的任务是从一个解码器中检索数据,这个解码器可以监控机械臂的6个关节位置。此设备具有作为串行CDC设备运行的USB接口。ASCII命令集允许主机配置每个轴的分辨率和设置访问方法。每个轴的当前位置以工程单位或原始二进制(转换为ASCII)以用户定义的速率输出。命令协议类似于USB串行协议(这里有解码器技术手册的链接:http://www.soc-robotics.com/pdfs/Quad6X%20Technical%20Manual.pdf)
使用Ubuntu时,当我在终端中输入"dmesg“时,这个设备就会变成一个”ttyACM0“设备。我得到的最多的是使用"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及其编译器做这件事。我正绞尽脑汁试图弄清楚这件事,非常感谢你的帮助。
发布于 2015-05-08 16:16:28
在POSIX环境中串行链路编程的权威资源是"Serial Programming Guide for POSIX Operating Systems"。请注意,对于CDC ACM设备,可以配置的内容不多。即使你试了试,这个设备也可以愉快地忽略所有关于波特率、字长等的信息。
实际上,使用CDC ACM,您在那里所做的大部分工作都是正确的。但是,stdio的所有缓冲都会阻碍您的工作。随意添加fflush调用会有所帮助。
https://stackoverflow.com/questions/30118920
复制相似问题