开发板模拟上下位机通讯基本思路

最近导师派的新活:写一个和开发板的通讯软件,要求能够传输开发板的屏幕、led灯、lcd数字(大小0-255之间?还是字符?)显示屏等信息(局域网内,所以速度可以有保证)。

上位机:PC用QT作界面,背景弄成开发板的背景。

下位机:由公司人员负责

协议:协议基本上已经定完(需按32字节对齐封装),但是具体的包怎么发送还没有给我说。

基本思路:

屏幕信息通过传图片过来,led和lcd也通过类似数据帧过来。开一个线程定时发送请求,然后用主线程一直通过UDP收包(收包的时候需要考虑到过来的信息是三种类型的,而且不知道公司那边是怎么搞,有可能是同时发送过来在一个UDP包里面)。

目前完成的工作:

1.界面的搭建以及界面ui的响应函数已经完成

2.自定义结构体已经定义出来,大概分为以下几种:

/*结构体定义和各类宏定义*/
#ifndef DATA_H
#define DATA_H
#define REV_AUTO_PORT 9001
#define REV_MAN_PORT 9003


#define LED_ON 1
#define LED_OFF 0
#define LED_COUNT 8


#define DATA_PIC 28

typedef unsigned char                    UINT8;

struct general_frame
{
	UINT8 Type;    
	UINT8 data[31];
};
struct command_frame   //请求命令帧格式
{
	UINT8 commandType;  请求命令类型
	UINT8 reserved[31]; 保留字段
};

struct probe_frame
{
	UINT8 dataType;   数据类型
	UINT8 reserved[31]; 保留字段
};

struct pic_frame
{
	UINT8 dataType;
	UINT8 padding; /标识最后一个包的填充字节数(0-32)
	UINT8 reserved;
	UINT8 data[28];
	UINT8 finishFlag;
};

struct led_frame
{
	UINT8 dataType;
	UINT8 led1;
	UINT8 led2;
	UINT8 led3;
	UINT8 led4;
	UINT8 led5;
	UINT8 led6;
	UINT8 led7;
	UINT8 led8;
	UINT8 reserved[23];
};

struct lcd_frame
{
	UINT8 dataType;
	UINT8 lcdNumber[2];
	UINT8 reserved[29];
};
#endif
3.用java试着写了个demo,尝试了一下UDP传输图片,发现基本不会丢包(公司工程师建议用UDP,开始觉得不可行),也就是说UDP传输这种简单的方式在局域网下没问题。

4.按照上面定义,想的是每32字节对齐封装,然后接包的时候按32字节拆(因为图片有多个包,而且不一定能对齐,所以需要padding字段),检测如果数据类型是图片数据,则一直取对应的图片数据并不断拼接,直到读到完毕则emit对应的刷新屏幕的信号并响应。检测如果数据类型是LED和LCD则很好处理,直接取出对应数据就emit 对应刷新led和lcd数字信号并响应。

5.目前在写UDP接收部分的图片处理部分,为了测试按照上面的定义写了一个UDP发送端的小程序,今天写完了在测试,但是测试发现现在把图片拆成多个帧发送拆的有问题。

下一步工作:

1.检查图片拆分以及封装、测试图片接收模块

2.完成UDP的LED以及LCD接收模块并测试

3.完成请求线程并测试




PS.今天还遇到一个特别大的问题就是Qt的UDPsocket通信readReady信号一直没反应,后来发现好像是被其他网络软件给占用了还是怎么着,把好几个软件关了就能用了。




接收端建议使用绑定模式QUdpSocket::ShareAddress,它表明其他服务也可以绑定到这个端口上
    receiverSocket->bind(45454,QUdpSocket::ShareAddress);

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ROS(机器人操作系统)是一款成熟的机器人操作系统,具有完备的生态体系,未来的发展意义可以成为机器人届中的”Linux、Android“。机器人的开发学习要综合软硬件的协同开发,硬件开发有些部分倾向于底层的设计和使用。软件开发可以依托C++、PYTHON等高级语言进行ROS接口应用开发,或者兼容ROS系统。本系列的ROS开发课程包含下位机开发、上位机开发、基于MBD(基于模型设计的开发)等。下位机作为机器人设计的基础部分是学习机器人操作系统必经之路,下位机我们通常会选择Arduino(适合学习不适合工程,代码执行效率差)、STM32系列产品(工程应用广泛,适合学习和工程开发,代码针对性强),当然还有NXP系列、51系列、TI DSP等,后期可以根据产品的性能和成本要求去考虑;上位机部分,主要是基于工控机、树莓派Raspberry、英伟达Jetson等可以运行操作系统的嵌入式设备再基于ROS操作系统进行实训学习。网络上对于ROS类的教学比较多,但是系统化从底层向高阶层层递升的教学方法偏少,知识碎片化严重,对机器人开发工程师深远的发展有负面影响,基于此本人通过多年自身的学习和工程实践,将机器人开发课程系统化、具象化、模块化地引导式学习,每节课程都有相应的课件和代码引导。对致力于机器人事业的学生有推动作用,且增强信心,系统化自己的机器人知识。为自己的职业规划和事业发展奠定坚实基础。最后,你们的支持,就是老师不断创作的动力!老师会不断更新机器人类相关知识,希望”与子同裳“。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值