gpt4 book ai didi

ubuntu - 如何使用 C/C++ 向 ttyACM0 设备写入命令并获取结果信息数据

转载 作者:太空宇宙 更新时间:2023-11-04 04:36:34 25 4
gpt4 key购买 nike

我目前的任务是从监控机器人 ARM 6 个关节位置的解码器中检索数据。此设备具有作为串行 CDC 设备运行的 USB 接口(interface)。 ASCII 命令集允许主机配置每个轴的分辨率和设置访问方法。每个轴的当前位置以工程单位或原始二进制(转换到 ASCII)以用户定义的速率。命令协议(protocol)类似于USB串口协议(protocol)(解码器技术手册链接:http://www.soc-robotics.com/pdfs/Quad6X%20Technical%20Manual.pdf)

使用 Ubuntu,当我在终端中键入“dmesg”时,此设备显示为“ttyACM0”设备。我得到的最远的是使用“screen/dev/ttyACM0”,这允许我输入这些串行命令并通过终端查看输出信息,但是,这并没有完成我想要完成的任务。

我正在尝试编写一些 C/C++ 代码,使程序能够将这些串行命令写入 ttyACM0 设备,以检索设备作为结果输出的信息数据。这是最终将在 ROS 中使用的代码,以允许使用获得的数据在每个机器人 ARM 关节中进行位置反馈控制。

老实说,这是我在尝试使用我收集到的信息将命令之一写入 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 及其编译器执行此操作。我无能为力,试图解决这个问题,非常感谢您的帮助。

最佳答案

关于 POSIX 环境中串行链路编程的权威资源是 "Serial Programming Guide for POSIX Operating Systems" .请注意,对于 CDC ACM 设备,没有多少可以配置的。即使您尝试了,设备也可以愉快地忽略有关波特率、字长等的所有信息。

实际上,对于 CDC ACM,您所做的基本上已经是正确的。然而,stdio 的所有缓冲都会妨碍您。随意添加 fflush 调用会有所帮助。

关于ubuntu - 如何使用 C/C++ 向 ttyACM0 设备写入命令并获取结果信息数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30118920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com