创维爱内购网站,做方案的网站,临沂网站建,wordpress ios 默认Linux内核 - 非仿生机器人之感知主控系统#xff08;协议栈#xff09;
注#xff1a;该项目为18年实习期间#xff0c;参与非仿生六足机器人#xff08;Linux方案#xff09;的个人理解和积累。时至今日#xff0c;再看其实仅为一套系统编程相关框架#xff0c;一直为…Linux内核 - 非仿生机器人之感知主控系统协议栈
注该项目为18年实习期间参与非仿生六足机器人Linux方案的个人理解和积累。时至今日再看其实仅为一套系统编程相关框架一直为私密分析后不涉及泄密等问题于是开放供基础学习和参考**此处内容仅为案例已屏蔽和删除涉密内容仅供交流学习勿做其他不合适使用。
1 robot 感知控制系统数据通信结构体
通信结构体包含数据头航向角、俯仰角、横滚角、加速度、角速度、磁强度、温湿度及烟雾模拟AD值数据尾64个字节
struct storage_info
{unsigned char index[2];
//数据头index[0]0x55 index[1] 0xaasigned short yaw; //航向角 signed short pitch; //俯仰角 signed short roll; //横滚角 signed short ax; //X轴加速度signed short ay; //Y轴加速度signed short az; //Z轴加速度signed short gx; //X轴角速度signed short gy; //Y轴角速度signed short gz; //Z轴角速度signed short hx; //X轴磁强度signed short hy; //X轴磁强度signed short hz; //X轴磁强度float temperature; //温度float temperatureMIN; //温度下限float temperatureMAX;//温度上限float humidity; //湿度float humidityMIN; //湿度下限float humidityMAX; //湿度上限float ad; //当前烟雾传感器电压值float adMIN; //烟雾报警上限 float adMAX; //烟雾报警下限unsigned char endex[2]; //0xaa 0x55 //数据尾
} __attribute__((packed)) REPO_ENV;
//取消结构体内存对齐char 1个字节
signed short 2个字节
float: 4个字节
224362 64内存对齐68结构体赋值64个字节
REPO_ENV.index[0]0x55;
REPO_ENV.index[1] 0xaa;REPO_ENV .yaw ; //航向角 REPO_ENV .pitch; //俯仰角 REPO_ENV .roll; //横滚角 REPO_ENV .ax; //X轴加速度REPO_ENV .ay; //Y轴加速度REPO_ENV .az; //Z轴加速度REPO_ENV .gx; //X轴角速度REPO_ENV .gy; //Y轴角速度REPO_ENV .gz; //Z轴角速度REPO_ENV .hx; //X轴磁强度REPO_ENV .hy; //X轴磁强度REPO_ENV .hz; //X轴磁强度REPO_ENV .temperature; //温度REPO_ENV .temperatureMIN;//温度下限REPO_ENV .temperatureMAX;//温度上限REPO_ENV .humidity; //湿度REPO_ENV .humidityMIN; //湿度下限REPO_ENV .humidityMAX; //湿度上限REPO_ENV .ad; //当前烟雾传感器电压值REPO_ENV .adMIN;烟雾报警上限及下限 REPO_ENV .adMAX;REPO_ENV .endex[0]0xaa;
REPO_ENV .endex[1]0x55 memcpy (data, REPO_ENV, 64);void *memcpy(void*dest, const void *src, size_t n);
功能
由src指向地址为起始地址的连续n个字节的数据复制到以destin指向地址为起始地址的空间内
2、robot 感知控制系统命令通讯结构体
//从控制站下发命令给控制系统
struct msg 消息队列
{ long type; //1L //命令类型long msgtype; //下发给那个线程unsigned char text[N]; //对设备进行具体操作
};3、robot 感知控制系统main及各线程
功能在主进程基础上创建多个线程同时进行传感器及其他任务共同进行为同步数据做基础。
3.1、感知模块 main逻辑
在主程序基础上创建各模块线程同时进行工作并且利用线程间同步机制简单实现同步数据并实时传输。 只是搭建了整体框架、还未移植已实现的传感器以及数据同步
1.初始化并创建
温湿度线程、烟雾线程、IMU线程、摄像头线程、
接收/处理控制站命令线程、同步上传数据线程。2.简单初始化线程间通信相关同步变量。
已实现: 各模块单独ARM上读取数据程序。
由于烟雾及温湿度部分模块问题目前烟雾还差一点工作未实现3.2、感知系统 - 各线逻辑
1、温湿度线程
1.1、已实现单独在PC及开发板数据读取。
1.2、已合并到主进程的温湿度线程中并实现开发板移植。
1.3、实现串口相关设置根据AT指令集编程实现读取相关温湿度数值。2、IMU线程已实现未合移植
2.1、已实现单独在PC及开发板数据读取数据。
2.2、未合并到主框架中由于接口问题未移植到开发板。
2.3、实现读取IMU各个坐标并根据厂家协议解读坐标值实时更新数值。3、摄像头线程 移植相关驱动和程序
3.1、已实现方法1.
读取摄像头ARM接口Video其解码并输出为avi。
实现读取mjpg格式数据此处需注解码问题数据外传及实时显示的实现
3.2、已实现方法2.网络常用方式
移植Mjpg-stream到ARM开发板实现局域网内客户端或网页端实时显示。 4、命令控制线程 情况待续。。。
4.4、实现接收控制站遥控信号.实现动作控制。
4.2、实现接收遥控信号实现视频客户端及网页局域网内实时传输。
4.3、实现接收遥控信号同步所有数据信息并进行实时信息上传。5、数据刷新线程 情况待续。。。
实时刷新数据并实现数据的同步。4、相关问题记录
4.1、移植相关驱动
4.2、移植内核
4.3、数据采集
4.4、协议联调
4.5、机器人六足数据采集
4.6、机器人平衡IMU坐标采集
4.7、USB线程和视觉采集
4.8、感知主控稳定性问题 A. 未知原因两个USB接口只有一个接口可用。
原因1. 接口硬件问题有待返回商家检测。
原因2. 驱动问题编译并移植了多次内核仍无法解决
原因3. Linux最小根文件系统问题
以上问题与技术支持探讨过由于其中一个可暂时支持传感器数据提取工作暂时稍后解决B. 其中一个可以的USB接口插入USB-hub只能实现IMU、温湿度、烟雾接口同时共用插上摄像头以后会出现接口错误。但是插上USB-HUB可以正确连接摄像头并正常使用。即摄像头video与其他传感器不能在USB-HUB上同时使用摄像头必须单独插一个USB接口
原因1.驱动问题
但是单独使用任何一个都没问题不解。
2.接口可能出现插入接触不良 C 由于所购买模块与开发板接口电压问题导致部分小模块无法连接。
原因开发板GPIO输出电压太低模块使用电压不常见无法正常使用模块店家给的电压及接口转换模块
已解决商家只换不退更换了部分模块返回的已经实现目前还有一个小模块在路上基本功能与接口应该是可以使用了有待解决。D传输问题1 数据同步目前考虑在实现主进程基础上利用各线程间同步机制进行数据同步有待指导建议2 未知传输端以及传输方法。只是简单构建了一个通信协议结构体以及控制站命令接收的消息队列有待建议指导。E下面的工作1、待返回的烟雾模块实现开发板数据提取2、问题B问题C。3、将各部分传感器已单独实现的功能程序合并到主进程的各部分线程中移植到开发板并基本实现在主进程下各模块线程的基本工作为后续同步保存数据及发送数据做基础。4.简单实现同步各部分数据。有待建议指导5.接受控制站命令线程及数据上传同步刷新线程。6.问题A。(重要问题)
7.在6的基础上实现摄像头与其他传感器一同工作并进行实时的数据传输和命令接收控制等。8.数据传输方法及传输目标等等待续。。。。简单定义了通讯结构体有待指导建议