Chen Huan
/
StewartOlatform
StewartOlatform
Diff: StewartPlatform.h
- Revision:
- 0:2b80f11eb1d3
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/StewartPlatform.h Wed Oct 11 07:05:25 2017 +0000 @@ -0,0 +1,151 @@ +#ifndef __STEWARTPLATFORM_H +#define __STEWARTPLATFORM_H + +#include <stdio.h> +#include <stdlib.h> +#include <math.h> + +#define f1(i) (i-1) +/* 把习惯的一阶矩阵的下标转化为C语言数组下标*/ + +#define f2(i,j,n) ((i-1)*(n)+j-1) +/* 把习惯的二阶矩阵的下标转化为C语言数组下标*/ + +//******************************************** +//矩阵数据结构体 +//******************************************** +typedef struct +{ + float Elements[50]; //矩阵元素得存储空间 + int Size[2]; //矩阵的行列数 +} MatrixType; //最大支持有50个元素的矩阵 + +//******************************************** +//动感平台数据结构体 +//******************************************** +typedef struct +{ + float topRadius; //平台结构尺寸参数 + float topInterval; + float bottomRadius; + float bottomInterval; + float lengthOfSteelWheel; + float lengthOfCardan; + float lengthOfBar; + float x; //上平台姿态参数 + float y; + float z; + float a; + float b; + float c; + float theta[6]; //角度 + float theta_servo[6]; //舵机角度 + float BarLength[6]; //上下平面对应的顶点之间的距离 + +} StewartPlatformType; + +//******************************************** +//功能:计算矩阵乘法 C=A*B +//输入参数:A、B:参加运算的矩阵 +//输出参数:C:运算结果 +//返回值:计算是否成功 成功返回0 否则返回1 +//调用外部函数:无 +//作者:陈欢 h-che14@mails.tsinghua.edu.cn +//******************************************** +int MatrixDot(MatrixType* A, MatrixType* B, MatrixType* C); + +//******************************************** +//功能:计算矩阵转置 +//输入参数:A:被转置的矩阵 +//输出参数:B:转置后的矩阵 +//返回值:无 +//调用外部函数:无 +//作者:陈欢 h-che14@mails.tsinghua.edu.cn +//******************************************** +void MatrixTransposition(MatrixType* A, MatrixType* B); + +//******************************************** +//功能:获得矩阵的子阵 +//输入参数:A:原矩阵 StartRow、StartColumn、EndRow、EndColumn:子阵起始元素 子阵终了元素 +//输出参数:B:子阵 +//返回值:无 +//调用外部函数:无 +//作者:陈欢 h-che14@mails.tsinghua.edu.cn +//******************************************** +void MatrixSub(MatrixType* A,int StartRow, int StartColumn, int EndRow, int EndColumn, MatrixType* B); + +//******************************************** +//功能:填充矩阵 将一个矩阵填充到另一个矩阵中 +//输入参数:A:被填充的矩阵 Row、Column:矩阵填充的位置 B:要填充到被填充矩阵的矩阵 +//输出参数:A:被填充的矩阵 +//返回值:0 代表成功 1代表失败 +//调用外部函数:无 +//作者:陈欢 h-che14@mails.tsinghua.edu.cn +//******************************************** +int MatrixFill(MatrixType* A,int Row, int Column, MatrixType* B); + +//******************************************** +//功能:指定动平台变换矩阵参数x,y,z,a,b,c,计算动平台上的点A在绝对坐标系下的坐标B A可以是多个点 一行一个点 +//输入参数:x,y,z,a,b,c:动平台变换矩阵参数 A:动平台上点的相对坐标 +//输出参数:B:点在绝对坐标系下的坐标 +//返回值:无 +//调用外部函数:无 +//作者:陈欢 h-che14@mails.tsinghua.edu.cn +//******************************************** +void Inverse(float x, float y, float z, float a, float b, float c, MatrixType* A, MatrixType* B); + +//******************************************** +//功能:计算矩阵行向量所表示的坐标点之间的距离 +//输入参数:A, B:要计算距离的矩阵 A,B必须均为n*4的矩阵,维度相同 +//输出参数:C:包含距离值信息的列向量 +//返回值:0:计算成功 1:出错 +//调用外部函数:无 +//作者:陈欢 h-che14@mails.tsinghua.edu.cn +//******************************************** +int Distance2Point(MatrixType* A, MatrixType* B, MatrixType* C); + + +//******************************************** +//功能:解析动感平台 +//输入参数:Platform:动感平台数据结构 包含各种输入输出 +//输出参数:无 +//返回值:无 +//调用外部函数:无 +//作者:陈欢 h-che14@mails.tsinghua.edu.cn +//******************************************** +void CalStewartPlatform(StewartPlatformType* Platform); + + +//******************************************** +//功能:角度制的三角函数 余弦 +//输入参数:angle:角度 +//输出参数:无 +//返回值:三角函数值 +//调用外部函数:无 +//作者:陈欢 h-che14@mails.tsinghua.edu.cn +//******************************************** +float cosd(float angle); + +//******************************************** +//功能:角度制的三角函数 正弦 +//输入参数:angle:角度 +//输出参数:无 +//返回值:三角函数值 +//调用外部函数:无 +//作者:陈欢 h-che14@mails.tsinghua.edu.cn +//******************************************** +float sind(float angle); + + +//******************************************** +//功能:在命令行打印矩阵 +//输入参数:A:要打印的矩阵 +//输出参数:无 +//返回值:无 +//调用外部函数:无 +//作者:陈欢 h-che14@mails.tsinghua.edu.cn +//******************************************** +void PrintMatrix(MatrixType* A); + + +#endif