Improve AngleOf usage
This commit is contained in:
parent
42d64a6afe
commit
00f40fea98
@ -1 +1 @@
|
||||
Subproject commit c70c079efc4fcfe9e9b2c29cd82f67faa63c827f
|
||||
Subproject commit b81b77b1c95de8fda430a0bd428dd551c89db380
|
112
NetworkSync.cpp
112
NetworkSync.cpp
@ -7,21 +7,24 @@
|
||||
#endif
|
||||
|
||||
#include "LinearAlgebra/Angle8.h"
|
||||
#include "LinearAlgebra/AngleUsing.h"
|
||||
#include "LinearAlgebra/Spherical.h"
|
||||
#include "float16/float16.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
NetworkSync::NetworkSync(Roboid *roboid) { this->roboid = roboid; }
|
||||
NetworkSync::NetworkSync(Roboid* roboid) {
|
||||
this->roboid = roboid;
|
||||
}
|
||||
|
||||
void NetworkSync::ReceiveMessage(Roboid *roboid, unsigned char bytecount) {
|
||||
void NetworkSync::ReceiveMessage(Roboid* roboid, unsigned char bytecount) {
|
||||
networkPerception->ProcessPacket(roboid, buffer, bytecount);
|
||||
|
||||
switch (buffer[0]) {
|
||||
case NetworkIdMsg:
|
||||
// this->networkId = NetworkIdMsg;
|
||||
ReceiveNetworkId();
|
||||
break;
|
||||
case NetworkIdMsg:
|
||||
// this->networkId = NetworkIdMsg;
|
||||
ReceiveNetworkId();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -37,7 +40,7 @@ void NetworkSync::ReceiveNetworkId() {
|
||||
PublishRelativeThing(roboid->GetChild(0), true);
|
||||
}
|
||||
|
||||
void NetworkSync::NewObject(InterestingThing *thing) {
|
||||
void NetworkSync::NewObject(InterestingThing* thing) {
|
||||
if (thing == nullptr || thing->networkId != 0x00)
|
||||
return;
|
||||
|
||||
@ -54,8 +57,8 @@ void NetworkSync::NewObject(InterestingThing *thing) {
|
||||
// PublishTrackedObject(roboid, obj);
|
||||
}
|
||||
|
||||
void NetworkSync::PublishRelativeThing(Thing *thing, bool recurse) {
|
||||
Thing *parentThing = thing->GetParent();
|
||||
void NetworkSync::PublishRelativeThing(Thing* thing, bool recurse) {
|
||||
Thing* parentThing = thing->GetParent();
|
||||
|
||||
unsigned char ix = 0;
|
||||
buffer[ix++] = RelativePoseMsg;
|
||||
@ -72,13 +75,13 @@ void NetworkSync::PublishRelativeThing(Thing *thing, bool recurse) {
|
||||
|
||||
// delay(1000);
|
||||
if (recurse) {
|
||||
Thing *child = thing->GetChild(0);
|
||||
Thing* child = thing->GetChild(0);
|
||||
if (child != nullptr)
|
||||
PublishRelativeThing(child, true);
|
||||
}
|
||||
}
|
||||
|
||||
void NetworkSync::PublishModel(Roboid *roboid) {
|
||||
void NetworkSync::PublishModel(Roboid* roboid) {
|
||||
if (roboid->modelUrl == nullptr)
|
||||
return;
|
||||
|
||||
@ -87,11 +90,11 @@ void NetworkSync::PublishModel(Roboid *roboid) {
|
||||
return;
|
||||
|
||||
unsigned char ix = 0;
|
||||
buffer[ix++] = 0x90; // modelMsg
|
||||
buffer[ix++] = 0x00; // objectId
|
||||
Spherical s = Spherical::zero; //(roboid->modelPosition);
|
||||
buffer[ix++] = 0x90; // modelMsg
|
||||
buffer[ix++] = 0x00; // objectId
|
||||
Spherical s = Spherical::zero; //(roboid->modelPosition);
|
||||
SendSpherical(buffer, &ix, s);
|
||||
SendFloat16(buffer, &ix, 1); // roboid->modelScale);
|
||||
SendFloat16(buffer, &ix, 1); // roboid->modelScale);
|
||||
|
||||
buffer[ix++] = len;
|
||||
for (int urlIx = 0; urlIx < len; urlIx++)
|
||||
@ -100,7 +103,7 @@ void NetworkSync::PublishModel(Roboid *roboid) {
|
||||
SendBuffer(ix);
|
||||
}
|
||||
|
||||
void NetworkSync::PublishModel(Thing *thing) {
|
||||
void NetworkSync::PublishModel(Thing* thing) {
|
||||
if (thing->modelUrl == nullptr)
|
||||
return;
|
||||
|
||||
@ -109,11 +112,11 @@ void NetworkSync::PublishModel(Thing *thing) {
|
||||
return;
|
||||
|
||||
unsigned char ix = 0;
|
||||
buffer[ix++] = 0x90; // modelMsg
|
||||
buffer[ix++] = thing->id; // objectId
|
||||
Spherical s = Spherical::zero; // Spherical(thing->modelPosition);
|
||||
buffer[ix++] = 0x90; // modelMsg
|
||||
buffer[ix++] = thing->id; // objectId
|
||||
Spherical s = Spherical::zero; // Spherical(thing->modelPosition);
|
||||
SendSpherical(buffer, &ix, s);
|
||||
SendFloat16(buffer, &ix, 1); // thing->modelScale);
|
||||
SendFloat16(buffer, &ix, 1); // thing->modelScale);
|
||||
|
||||
buffer[ix++] = len;
|
||||
for (int urlIx = 0; urlIx < len; urlIx++)
|
||||
@ -122,7 +125,7 @@ void NetworkSync::PublishModel(Thing *thing) {
|
||||
SendBuffer(ix);
|
||||
}
|
||||
|
||||
void NetworkSync::DestroyObject(InterestingThing *thing) {
|
||||
void NetworkSync::DestroyObject(InterestingThing* thing) {
|
||||
unsigned char ix = 0;
|
||||
buffer[ix++] = DestroyMsg;
|
||||
buffer[ix++] = thing->id;
|
||||
@ -133,7 +136,7 @@ void NetworkSync::DestroyObject(InterestingThing *thing) {
|
||||
#endif
|
||||
}
|
||||
|
||||
void NetworkSync::SendPose(Roboid *roboid, bool recurse) {
|
||||
void NetworkSync::SendPose(Roboid* roboid, bool recurse) {
|
||||
unsigned char ix = 0;
|
||||
buffer[ix++] = PoseMsg;
|
||||
buffer[ix++] = 0x00;
|
||||
@ -143,13 +146,13 @@ void NetworkSync::SendPose(Roboid *roboid, bool recurse) {
|
||||
SendBuffer(ix);
|
||||
|
||||
if (recurse) {
|
||||
Thing *child = roboid->GetChild(0);
|
||||
Thing* child = roboid->GetChild(0);
|
||||
if (child != nullptr)
|
||||
SendPose(child, true);
|
||||
}
|
||||
}
|
||||
|
||||
void NetworkSync::SendPose(Thing *thing, bool recurse) {
|
||||
void NetworkSync::SendPose(Thing* thing, bool recurse) {
|
||||
unsigned char ix = 0;
|
||||
buffer[ix++] = PoseMsg;
|
||||
buffer[ix++] = thing->id;
|
||||
@ -160,7 +163,7 @@ void NetworkSync::SendPose(Thing *thing, bool recurse) {
|
||||
|
||||
if (recurse) {
|
||||
// delay(10);
|
||||
Thing *child = thing->GetChild(0);
|
||||
Thing* child = thing->GetChild(0);
|
||||
if (child != nullptr)
|
||||
SendPose(child, true);
|
||||
}
|
||||
@ -169,7 +172,7 @@ void NetworkSync::SendPose(Thing *thing, bool recurse) {
|
||||
void NetworkSync::PublishClient() {
|
||||
unsigned char ix = 0;
|
||||
buffer[ix++] = ClientMsg;
|
||||
buffer[ix++] = 0; // No network ID
|
||||
buffer[ix++] = 0; // No network ID
|
||||
SendBuffer(ix);
|
||||
|
||||
#ifdef RC_DEBUG
|
||||
@ -177,11 +180,11 @@ void NetworkSync::PublishClient() {
|
||||
#endif
|
||||
}
|
||||
|
||||
void NetworkSync::PublishTrackedObjects(Roboid *roboid,
|
||||
InterestingThing **objects) {
|
||||
void NetworkSync::PublishTrackedObjects(Roboid* roboid,
|
||||
InterestingThing** objects) {
|
||||
int n = 0;
|
||||
for (unsigned char objIx = 0; objIx < Perception::maxObjectCount; objIx++) {
|
||||
InterestingThing *obj = objects[objIx];
|
||||
InterestingThing* obj = objects[objIx];
|
||||
if (obj == nullptr)
|
||||
continue;
|
||||
|
||||
@ -192,8 +195,8 @@ void NetworkSync::PublishTrackedObjects(Roboid *roboid,
|
||||
}
|
||||
}
|
||||
|
||||
void NetworkSync::PublishTrackedObject(Roboid *roboid,
|
||||
InterestingThing *object) {
|
||||
void NetworkSync::PublishTrackedObject(Roboid* roboid,
|
||||
InterestingThing* object) {
|
||||
if (object == nullptr || object->updated == false ||
|
||||
object->networkId != 0x00) {
|
||||
return;
|
||||
@ -211,8 +214,8 @@ void NetworkSync::PublishTrackedObject(Roboid *roboid,
|
||||
Quaternion worldOrientation = roboidOrientation * object->orientation;
|
||||
|
||||
unsigned char ix = 0;
|
||||
buffer[ix++] = PoseMsg; // Position2DMsg;
|
||||
buffer[ix++] = object->id; // objectId;
|
||||
buffer[ix++] = PoseMsg; // Position2DMsg;
|
||||
buffer[ix++] = object->id; // objectId;
|
||||
buffer[ix++] = Pose_Position | Pose_Orientation;
|
||||
// SendPolar(buffer, &ix, polar); // 3 bytes
|
||||
SendVector3(buffer, &ix, worldPosition);
|
||||
@ -227,7 +230,7 @@ void NetworkSync::PublishTrackedObject(Roboid *roboid,
|
||||
#endif
|
||||
}
|
||||
|
||||
void NetworkSync::SendPoseMsg(Buffer sendBuffer, Roboid *roboid) {
|
||||
void NetworkSync::SendPoseMsg(Buffer sendBuffer, Roboid* roboid) {
|
||||
Polar velocity = roboid->propulsion->GetVelocity();
|
||||
Vector2 worldVelocity2 =
|
||||
Vector2::Rotate(Vector2::forward * velocity.distance, velocity.angle);
|
||||
@ -253,7 +256,7 @@ void NetworkSync::SendPoseMsg(Buffer sendBuffer, Roboid *roboid) {
|
||||
const unsigned int bufferSize = 3 + 12 + 12;
|
||||
unsigned char buffer[bufferSize] = {
|
||||
PoseMsg,
|
||||
0, // objectId;
|
||||
0, // objectId;
|
||||
Pose_LinearVelocity | Pose_AngularVelocity,
|
||||
};
|
||||
unsigned char ix = 3;
|
||||
@ -264,7 +267,7 @@ void NetworkSync::SendPoseMsg(Buffer sendBuffer, Roboid *roboid) {
|
||||
#endif
|
||||
}
|
||||
|
||||
void NetworkSync::SendDestroyObject(Buffer sendBuffer, InterestingThing *obj) {
|
||||
void NetworkSync::SendDestroyObject(Buffer sendBuffer, InterestingThing* obj) {
|
||||
#ifdef RC_DEBUG
|
||||
Serial.print("Send Destroy ");
|
||||
Serial.println((int)obj->id);
|
||||
@ -274,7 +277,7 @@ void NetworkSync::SendDestroyObject(Buffer sendBuffer, InterestingThing *obj) {
|
||||
#endif
|
||||
}
|
||||
|
||||
void NetworkSync::SendInvestigateThing(InterestingThing *thing) {
|
||||
void NetworkSync::SendInvestigateThing(InterestingThing* thing) {
|
||||
#ifdef RC_DEBUG
|
||||
printf("Investigate [%d/%d]\n", thing->networkId, thing->id);
|
||||
#endif
|
||||
@ -285,7 +288,7 @@ void NetworkSync::SendInvestigateThing(InterestingThing *thing) {
|
||||
SendBuffer(ix);
|
||||
}
|
||||
|
||||
void NetworkSync::SendText(const char *s) {
|
||||
void NetworkSync::SendText(const char* s) {
|
||||
unsigned char length;
|
||||
for (length = 0; length < 253; length++) {
|
||||
if (s[length] == '\0')
|
||||
@ -318,7 +321,8 @@ void NetworkSync::SendInt(const int x) {
|
||||
|
||||
// Low-level functions
|
||||
|
||||
void NetworkSync::SendVector3(unsigned char *data, unsigned char *startIndex,
|
||||
void NetworkSync::SendVector3(unsigned char* data,
|
||||
unsigned char* startIndex,
|
||||
const Vector3 v) {
|
||||
SendSingle100(data, *startIndex, v.Right());
|
||||
(*startIndex) += 4;
|
||||
@ -328,7 +332,8 @@ void NetworkSync::SendVector3(unsigned char *data, unsigned char *startIndex,
|
||||
(*startIndex) += 4;
|
||||
}
|
||||
|
||||
void NetworkSync::SendQuaternion(unsigned char *data, const int startIndex,
|
||||
void NetworkSync::SendQuaternion(unsigned char* data,
|
||||
const int startIndex,
|
||||
const Quaternion q) {
|
||||
Vector3 angles = Quaternion::ToAngles(q);
|
||||
int ix = startIndex;
|
||||
@ -337,13 +342,15 @@ void NetworkSync::SendQuaternion(unsigned char *data, const int startIndex,
|
||||
SendAngle8(data, ix++, angles.Forward());
|
||||
}
|
||||
|
||||
void NetworkSync::SendPolar(unsigned char *data, unsigned char *startIndex,
|
||||
void NetworkSync::SendPolar(unsigned char* data,
|
||||
unsigned char* startIndex,
|
||||
Polar p) {
|
||||
SendAngle8(data, *startIndex, (const float)p.angle);
|
||||
SendSingle100(data, (*startIndex) + 1, p.distance);
|
||||
}
|
||||
|
||||
void NetworkSync::SendSpherical(unsigned char *data, unsigned char *startIndex,
|
||||
void NetworkSync::SendSpherical(unsigned char* data,
|
||||
unsigned char* startIndex,
|
||||
Spherical s) {
|
||||
SendAngle8(data, (*startIndex)++, s.horizontalAngle);
|
||||
SendAngle8(data, (*startIndex)++, s.verticalAngle);
|
||||
@ -351,7 +358,8 @@ void NetworkSync::SendSpherical(unsigned char *data, unsigned char *startIndex,
|
||||
SendFloat16(data, startIndex, s.distance);
|
||||
}
|
||||
|
||||
void NetworkSync::SendQuat32(unsigned char *data, unsigned char *startIndex,
|
||||
void NetworkSync::SendQuat32(unsigned char* data,
|
||||
unsigned char* startIndex,
|
||||
const Quaternion q) {
|
||||
unsigned char qx = (char)(q.x * 127 + 128);
|
||||
unsigned char qy = (char)(q.y * 127 + 128);
|
||||
@ -370,10 +378,11 @@ void NetworkSync::SendQuat32(unsigned char *data, unsigned char *startIndex,
|
||||
data[(*startIndex)++] = qw;
|
||||
}
|
||||
|
||||
void NetworkSync::SendAngle8(unsigned char *data, unsigned int startIndex,
|
||||
void NetworkSync::SendAngle8(unsigned char* data,
|
||||
unsigned int startIndex,
|
||||
const float angle) {
|
||||
AngleUsing<signed char> packedAngle = AngleUsing<signed char>(angle);
|
||||
data[startIndex] = packedAngle.GetValue();
|
||||
AngleOf<signed char> packedAngle2 = AngleOf<signed char>(angle);
|
||||
data[startIndex] = packedAngle2.GetBinary();
|
||||
}
|
||||
|
||||
// void NetworkSync::SendAngle16(unsigned char *data, unsigned int startIndex,
|
||||
@ -397,7 +406,8 @@ void NetworkSync::SendAngle8(unsigned char *data, unsigned int startIndex,
|
||||
// // data[startIndex + 3]);
|
||||
// }
|
||||
|
||||
void NetworkSync::SendSingle100(unsigned char *data, unsigned int startIndex,
|
||||
void NetworkSync::SendSingle100(unsigned char* data,
|
||||
unsigned int startIndex,
|
||||
float value) {
|
||||
// Sends a float with truncated 2 decimal precision
|
||||
Int32 intValue = value * 100;
|
||||
@ -406,7 +416,8 @@ void NetworkSync::SendSingle100(unsigned char *data, unsigned int startIndex,
|
||||
// data[startIndex + ix] = ((unsigned char *)&intValue)[ix];
|
||||
// }
|
||||
}
|
||||
void NetworkSync::SendFloat16(unsigned char *data, unsigned char *startIndex,
|
||||
void NetworkSync::SendFloat16(unsigned char* data,
|
||||
unsigned char* startIndex,
|
||||
float value) {
|
||||
float16 value16 = float16(value);
|
||||
short binary = value16.getBinary();
|
||||
@ -415,10 +426,11 @@ void NetworkSync::SendFloat16(unsigned char *data, unsigned char *startIndex,
|
||||
data[(*startIndex)++] = binary & 0xFF;
|
||||
}
|
||||
|
||||
void NetworkSync::SendInt32(unsigned char *data, unsigned int startIndex,
|
||||
void NetworkSync::SendInt32(unsigned char* data,
|
||||
unsigned int startIndex,
|
||||
Int32 value) {
|
||||
for (unsigned char ix = 0; ix < 4; ix++) {
|
||||
data[startIndex++] = ((unsigned char *)&value)[ix];
|
||||
data[startIndex++] = ((unsigned char*)&value)[ix];
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user