GeekTrcak采用四元数代替欧拉角传输,更新基于四元数的GeekTrackSDK

main
詹力 2022-09-26 23:15:28 +08:00
parent 6ec36c1646
commit bb493841dc
20 changed files with 86 additions and 21 deletions

View File

@ -45,8 +45,10 @@ void Network_UdpSendData()
while (1) while (1)
{ {
float yaw = 0.0f, roll = 0.0f, pitch = 0.0f; float yaw = 0.0f, roll = 0.0f, pitch = 0.0f;
float quat[4] = {0.0f};
MPU9250_GetEulerAngles(&yaw, &roll, &pitch); MPU9250_GetEulerAngles(&yaw, &roll, &pitch);
sprintf(buff, "%s %f %f %f\n",ConfigString, yaw, roll, pitch); MPU9250_GetQuaternion(quat);
sprintf(buff, "%s %f %f %f %f\n",ConfigString, quat[0],quat[1],quat[2],quat[3]);
err = sendto(sock, buff, 256, 0, (struct sockaddr *)&saddr, err = sendto(sock, buff, 256, 0, (struct sockaddr *)&saddr,
sizeof(struct sockaddr_in)); sizeof(struct sockaddr_in));
if (err < 0) { if (err < 0) {

View File

@ -185,6 +185,7 @@ void AHRSUpdate(float gx, float gy, float gz,
void MPU9250_GetEulerAngles(float* yaw,float* roll, float* pitch); void MPU9250_GetEulerAngles(float* yaw,float* roll, float* pitch);
void MPU9250_GetQuaternion(float quat[4]);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@ -116,6 +116,14 @@ void MPU9250_GetEulerAngles(float* yaw,float* roll, float* pitch)
*pitch = mpu9250.pitch; *pitch = mpu9250.pitch;
} }
void MPU9250_GetQuaternion(float quat[4]){
quat[0] = q0;
quat[1] = q1;
quat[2] = q2;
quat[3] = q3;
}
void AHRSUpdate(float gx, float gy, float gz, float ax, float ay, float az) void AHRSUpdate(float gx, float gy, float gz, float ax, float ay, float az)
{ {
float halfT = 0.5 * (10.0f / 1000.0f); float halfT = 0.5 * (10.0f / 1000.0f);

View File

@ -12,11 +12,11 @@
struct GeekTrackNode_t { struct GeekTrackNode_t {
EulerAngles_t Pose; EulerAngles_t Pose;
Quaternion_t Quat;
bool devOnline; bool devOnline;
GeekTrackNode_t() { GeekTrackNode_t() {
Pose.x = 0.0f; memset(&Pose, 0, sizeof(EulerAngles_t));
Pose.y = 0.0f; memset(&Quat, 0, sizeof(Quaternion_t));
Pose.z = 0.0f;
devOnline = false; devOnline = false;
} }
}; };
@ -34,13 +34,31 @@ void GeekTrackUpdate() {
int i = 0; int i = 0;
while (1) while (1)
{ {
//printf("...\n");
//从广播地址接收消息,注意用来绑定的地址和接收消息的地址是不一样的 //从广播地址接收消息,注意用来绑定的地址和接收消息的地址是不一样的
recvfrom(sock, buf, 256, 0, (struct sockaddr FAR*) &from, (int FAR*) & fromlength); recvfrom(sock, buf, 256, 0, (struct sockaddr FAR*) &from, (int FAR*) & fromlength);
Sleep(10); Sleep(10);
float yaw = 0.0f, roll = 0.0f, pitch = 0.0f; float q[4] = { 0.0f };
int id = 0; int id = 0;
int ret = sscanf_s(buf, "%d %f %f %f\n", &id, &yaw, &roll, &pitch); //printf("%s\n", buf);
int ret = sscanf_s(buf, "%d %f %f %f %f\n", &id, &q[0], &q[1], &q[2], &q[3]);
if (ret > 0 && (id >= 0 && id < MAX_SUPPORT_DEV_NUM)) { if (ret > 0 && (id >= 0 && id < MAX_SUPPORT_DEV_NUM)) {
float yaw = 0.0f, pitch = 0.0f, roll = 0.0f;
pitch = asin((-2.0 * ((double)q[3]*q[1] - (double)q[0]*q[2]))); // * (180.0f / 3.141592f); */
yaw = atan2((double)q[2]*q[1] + (double)q[0]*q[3], 0.5 - (double)q[2]*q[2] - (double)q[3]*q[3]); // * (180.0f /3.141592f);
roll = atan2((double)q[2]*q[3] + (double)q[0]*q[1], 0.5 - (double)q[2]*q[2] - (double)q[1]*q[1]); //* (180.0f /3.141592f);
yaw *= (180.0f / 3.141592f);
roll *= (180.0f / 3.141592f);
pitch *= (180.0f / 3.141592f);
TrackNode[id].Quat.w = q[0];
TrackNode[id].Quat.x = q[1];
TrackNode[id].Quat.y = q[2];
TrackNode[id].Quat.z = q[3];
TrackNode[id].Pose.x = pitch; TrackNode[id].Pose.x = pitch;
TrackNode[id].Pose.y = roll; TrackNode[id].Pose.y = roll;
TrackNode[id].Pose.z = yaw; TrackNode[id].Pose.z = yaw;
@ -55,7 +73,7 @@ void GeekTrack_Init() {
static bool optval = false; static bool optval = false;
//启动SOCKET库版本为2.0 //启动SOCKET库版本为2.0
if (optval == false) { if (optval == true) {
return; return;
} }
WSAStartup(0x0202, &wsdata); WSAStartup(0x0202, &wsdata);
@ -89,12 +107,20 @@ EulerAngles_t GetEulerAngles(int devId) {
return Pose; return Pose;
} }
Quaternion_t GetQuaternion(int devId) {
if (devId >= 0 && devId < MAX_SUPPORT_DEV_NUM) {
return TrackNode[devId].Quat;
}
Quaternion_t Quat = { 0.0f, 0.0f, 0.0f, 0.0f };
return Quat;
}
int main() int main()
{ {
GeekTrack_Init(); GeekTrack_Init();
int devId = 0; int devId = 0;
while (1) { while (1) {
Sleep(50); Sleep(30);
printf("%d,%f,%f,%f\n", devId,TrackNode[devId].Pose.x, TrackNode[devId].Pose.y, printf("%d,%f,%f,%f\n", devId,TrackNode[devId].Pose.x, TrackNode[devId].Pose.y,
TrackNode[devId].Pose.z); TrackNode[devId].Pose.z);
} }

View File

@ -7,10 +7,15 @@ typedef struct {
float x, y, z; float x, y, z;
}EulerAngles_t; }EulerAngles_t;
typedef struct {
float w, x, y, z;
}Quaternion_t;
__declspec(dllexport) void GeekTrack_Init(); __declspec(dllexport) void GeekTrack_Init();
__declspec(dllexport) EulerAngles_t GetEulerAngles(int devId); __declspec(dllexport) EulerAngles_t GetEulerAngles(int devId);
__declspec(dllexport) Quaternion_t GetQuaternion(int devId);
} }
#endif #endif

View File

@ -11,20 +11,29 @@ namespace TestGeekTrack
public float x, y, z; public float x, y, z;
}; };
public struct GeekQuaternion
{
public float w, x, y, z;
};
[DllImport("GeekTrackSDK.dll", EntryPoint = "GeekTrack_Init", CallingConvention = CallingConvention.Cdecl)] [DllImport("GeekTrackSDK.dll", EntryPoint = "GeekTrack_Init", CallingConvention = CallingConvention.Cdecl)]
public extern static void GeekTrack_Init(); public extern static void GeekTrack_Init();
[DllImport("GeekTrackSDK.dll", EntryPoint = "GetEulerAngles", CallingConvention = CallingConvention.Cdecl)] [DllImport("GeekTrackSDK.dll", EntryPoint = "GetEulerAngles", CallingConvention = CallingConvention.Cdecl)]
public extern static GeekEulerAngles GetEulerAngles(int devId); public extern static GeekEulerAngles GetEulerAngles(int devId);
[DllImport("GeekTrackSDK.dll", EntryPoint = "GetQuaternion", CallingConvention = CallingConvention.Cdecl)]
public extern static GeekQuaternion GetQuaternion(int devId);
static void Main(string[] args) static void Main(string[] args)
{ {
GeekTrack_Init(); GeekTrack_Init();
while (true) { while (true) {
GeekEulerAngles angles = GetEulerAngles(0); GeekEulerAngles angles = GetEulerAngles(0);
GeekQuaternion quat = GetQuaternion(0);
Thread.Sleep(100); Thread.Sleep(100);
//Debug.Log("<color=#9400D3>" + + "</color>"); //Debug.Log("<color=#9400D3>" + + "</color>");
Console.WriteLine(angles.x + "," + angles.y + "," + angles.z); Console.WriteLine(quat.w + "," + quat.x + "," + quat.y + "," + quat.z);
} }
} }

View File

@ -1,17 +1,17 @@
{ {
"format": 1, "format": 1,
"restore": { "restore": {
"E:\\Hardware Project\\GeekTrack\\4.Software\\TestGeekTrackSDK_V1.0\\TestGeekTrack\\TestGeekTrack.csproj": {} "E:\\Hardware Project\\GeekTrack\\4.Software\\TestGeekTrackSDK\\TestGeekTrack\\TestGeekTrack.csproj": {}
}, },
"projects": { "projects": {
"E:\\Hardware Project\\GeekTrack\\4.Software\\TestGeekTrackSDK_V1.0\\TestGeekTrack\\TestGeekTrack.csproj": { "E:\\Hardware Project\\GeekTrack\\4.Software\\TestGeekTrackSDK\\TestGeekTrack\\TestGeekTrack.csproj": {
"version": "1.0.0", "version": "1.0.0",
"restore": { "restore": {
"projectUniqueName": "E:\\Hardware Project\\GeekTrack\\4.Software\\TestGeekTrackSDK_V1.0\\TestGeekTrack\\TestGeekTrack.csproj", "projectUniqueName": "E:\\Hardware Project\\GeekTrack\\4.Software\\TestGeekTrackSDK\\TestGeekTrack\\TestGeekTrack.csproj",
"projectName": "TestGeekTrack", "projectName": "TestGeekTrack",
"projectPath": "E:\\Hardware Project\\GeekTrack\\4.Software\\TestGeekTrackSDK_V1.0\\TestGeekTrack\\TestGeekTrack.csproj", "projectPath": "E:\\Hardware Project\\GeekTrack\\4.Software\\TestGeekTrackSDK\\TestGeekTrack\\TestGeekTrack.csproj",
"packagesPath": "C:\\Users\\Administrator\\.nuget\\packages\\", "packagesPath": "C:\\Users\\Administrator\\.nuget\\packages\\",
"outputPath": "E:\\Hardware Project\\GeekTrack\\4.Software\\TestGeekTrackSDK_V1.0\\TestGeekTrack\\obj\\", "outputPath": "E:\\Hardware Project\\GeekTrack\\4.Software\\TestGeekTrackSDK\\TestGeekTrack\\obj\\",
"projectStyle": "PackageReference", "projectStyle": "PackageReference",
"fallbackFolders": [ "fallbackFolders": [
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages", "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages",

View File

@ -15,11 +15,11 @@
"project": { "project": {
"version": "1.0.0", "version": "1.0.0",
"restore": { "restore": {
"projectUniqueName": "E:\\Hardware Project\\GeekTrack\\4.Software\\TestGeekTrackSDK_V1.0\\TestGeekTrack\\TestGeekTrack.csproj", "projectUniqueName": "E:\\Hardware Project\\GeekTrack\\4.Software\\TestGeekTrackSDK\\TestGeekTrack\\TestGeekTrack.csproj",
"projectName": "TestGeekTrack", "projectName": "TestGeekTrack",
"projectPath": "E:\\Hardware Project\\GeekTrack\\4.Software\\TestGeekTrackSDK_V1.0\\TestGeekTrack\\TestGeekTrack.csproj", "projectPath": "E:\\Hardware Project\\GeekTrack\\4.Software\\TestGeekTrackSDK\\TestGeekTrack\\TestGeekTrack.csproj",
"packagesPath": "C:\\Users\\Administrator\\.nuget\\packages\\", "packagesPath": "C:\\Users\\Administrator\\.nuget\\packages\\",
"outputPath": "E:\\Hardware Project\\GeekTrack\\4.Software\\TestGeekTrackSDK_V1.0\\TestGeekTrack\\obj\\", "outputPath": "E:\\Hardware Project\\GeekTrack\\4.Software\\TestGeekTrackSDK\\TestGeekTrack\\obj\\",
"projectStyle": "PackageReference", "projectStyle": "PackageReference",
"fallbackFolders": [ "fallbackFolders": [
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages", "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages",

View File

@ -1,8 +1,8 @@
{ {
"version": 2, "version": 2,
"dgSpecHash": "9JxXv/tIWM0ENP1AlM+SwchvhgqL8V/ELkvxXz7e1HCbpr1e0lic0NCd+Exl+hwSZQkLYUjftNhgZYaAKodQGQ==", "dgSpecHash": "6OhT4/s2fKivJ76Rl050qvNGtjBukr/ejkwO8BeIFOyKHlhB9Jggz5KO5hpJvO3UvBnCSAADMzUQvxXBUM7G9A==",
"success": true, "success": true,
"projectFilePath": "E:\\Hardware Project\\GeekTrack\\4.Software\\TestGeekTrackSDK_V1.0\\TestGeekTrack\\TestGeekTrack.csproj", "projectFilePath": "E:\\Hardware Project\\GeekTrack\\4.Software\\TestGeekTrackSDK\\TestGeekTrack\\TestGeekTrack.csproj",
"expectedPackageFiles": [], "expectedPackageFiles": [],
"logs": [] "logs": []
} }

View File

@ -1,3 +1,3 @@
is_global = true is_global = true
build_property.RootNamespace = TestGeekTrack build_property.RootNamespace = TestGeekTrack
build_property.ProjectDir = E:\Hardware Project\GeekTrack\4.Software\TestGeekTrackSDK_V1.0\TestGeekTrack\ build_property.ProjectDir = E:\Hardware Project\GeekTrack\4.Software\TestGeekTrackSDK\TestGeekTrack\

View File

@ -25,3 +25,17 @@ E:\Hardware Project\GeekTrack\4.Software\TestGeekTrackSDK_V1.0\TestGeekTrack\obj
E:\Hardware Project\GeekTrack\4.Software\TestGeekTrackSDK_V1.0\TestGeekTrack\obj\x64\Debug\netcoreapp3.1\TestGeekTrack.dll E:\Hardware Project\GeekTrack\4.Software\TestGeekTrackSDK_V1.0\TestGeekTrack\obj\x64\Debug\netcoreapp3.1\TestGeekTrack.dll
E:\Hardware Project\GeekTrack\4.Software\TestGeekTrackSDK_V1.0\TestGeekTrack\obj\x64\Debug\netcoreapp3.1\TestGeekTrack.pdb E:\Hardware Project\GeekTrack\4.Software\TestGeekTrackSDK_V1.0\TestGeekTrack\obj\x64\Debug\netcoreapp3.1\TestGeekTrack.pdb
E:\Hardware Project\GeekTrack\4.Software\TestGeekTrackSDK_V1.0\TestGeekTrack\obj\x64\Debug\netcoreapp3.1\TestGeekTrack.genruntimeconfig.cache E:\Hardware Project\GeekTrack\4.Software\TestGeekTrackSDK_V1.0\TestGeekTrack\obj\x64\Debug\netcoreapp3.1\TestGeekTrack.genruntimeconfig.cache
E:\Hardware Project\GeekTrack\4.Software\TestGeekTrackSDK\TestGeekTrack\bin\x64\Debug\netcoreapp3.1\TestGeekTrack.exe
E:\Hardware Project\GeekTrack\4.Software\TestGeekTrackSDK\TestGeekTrack\bin\x64\Debug\netcoreapp3.1\TestGeekTrack.deps.json
E:\Hardware Project\GeekTrack\4.Software\TestGeekTrackSDK\TestGeekTrack\bin\x64\Debug\netcoreapp3.1\TestGeekTrack.runtimeconfig.json
E:\Hardware Project\GeekTrack\4.Software\TestGeekTrackSDK\TestGeekTrack\bin\x64\Debug\netcoreapp3.1\TestGeekTrack.runtimeconfig.dev.json
E:\Hardware Project\GeekTrack\4.Software\TestGeekTrackSDK\TestGeekTrack\bin\x64\Debug\netcoreapp3.1\TestGeekTrack.dll
E:\Hardware Project\GeekTrack\4.Software\TestGeekTrackSDK\TestGeekTrack\bin\x64\Debug\netcoreapp3.1\TestGeekTrack.pdb
E:\Hardware Project\GeekTrack\4.Software\TestGeekTrackSDK\TestGeekTrack\obj\x64\Debug\netcoreapp3.1\TestGeekTrack.csproj.AssemblyReference.cache
E:\Hardware Project\GeekTrack\4.Software\TestGeekTrackSDK\TestGeekTrack\obj\x64\Debug\netcoreapp3.1\TestGeekTrack.GeneratedMSBuildEditorConfig.editorconfig
E:\Hardware Project\GeekTrack\4.Software\TestGeekTrackSDK\TestGeekTrack\obj\x64\Debug\netcoreapp3.1\TestGeekTrack.AssemblyInfoInputs.cache
E:\Hardware Project\GeekTrack\4.Software\TestGeekTrackSDK\TestGeekTrack\obj\x64\Debug\netcoreapp3.1\TestGeekTrack.AssemblyInfo.cs
E:\Hardware Project\GeekTrack\4.Software\TestGeekTrackSDK\TestGeekTrack\obj\x64\Debug\netcoreapp3.1\TestGeekTrack.csproj.CoreCompileInputs.cache
E:\Hardware Project\GeekTrack\4.Software\TestGeekTrackSDK\TestGeekTrack\obj\x64\Debug\netcoreapp3.1\TestGeekTrack.dll
E:\Hardware Project\GeekTrack\4.Software\TestGeekTrackSDK\TestGeekTrack\obj\x64\Debug\netcoreapp3.1\TestGeekTrack.pdb
E:\Hardware Project\GeekTrack\4.Software\TestGeekTrackSDK\TestGeekTrack\obj\x64\Debug\netcoreapp3.1\TestGeekTrack.genruntimeconfig.cache

View File

@ -1 +1 @@
99993d063c3f93a631daf010ae6d9c95462d21a7 6ce667a04e91fed21d0709417c88ad041d8af50e