diff --git a/NetworkPerception.cpp b/NetworkPerception.cpp index d8c716b..0ead299 100644 --- a/NetworkPerception.cpp +++ b/NetworkPerception.cpp @@ -99,15 +99,16 @@ void NetworkPerception::ReceivePlane(unsigned char* data, Roboid* roboid) { // Vector3::SignedAngle(Vector3::forward, localPosition, Vector3::up); // Polar position = Polar(angle, distance); - Spherical position = Spherical(localPosition); + Spherical16 position = Spherical16::FromVector3(localPosition); // printf("Received plane (%f %f %f) (%f %f %f) %f %f %f\n", worldPosition.x, // worldPosition.y, worldPosition.z, roboidPosition.x, // roboidPosition.y, roboidPosition.z, position.distance, // (float)position.horizontalAngle, (float)position.verticalAngle); printf("Received plane %f (%f %f)\n", position.distance, - position.horizontalAngle.ToFloat(), position.verticalAngle.ToFloat()); - roboid->perception->AddTrackedObject(this, position, 0x80, networkId); + position.horizontal.ToFloat(), position.vertical.ToFloat()); + roboid->perception->AddTrackedObject(this, position, Quaternion::identity, + 0x80, 0x80, networkId); } void NetworkPerception::ReceiveSphere(unsigned char* data, Roboid* roboid) { diff --git a/NetworkSync.cpp b/NetworkSync.cpp index 99d978f..34f71f2 100644 --- a/NetworkSync.cpp +++ b/NetworkSync.cpp @@ -144,7 +144,7 @@ void NetworkSync::SendPose(Roboid* roboid, bool recurse) { buffer[ix++] = PoseMsg; buffer[ix++] = 0x00; buffer[ix++] = Pose_Position | Pose_Orientation; - SendSpherical(buffer, &ix, Spherical(roboid->GetPosition())); + SendSpherical(buffer, &ix, Spherical::FromVector3(roboid->GetPosition())); SendQuat32(buffer, &ix, roboid->GetOrientation()); SendBuffer(ix); @@ -232,7 +232,7 @@ void NetworkSync::PublishTrackedObject(Roboid* roboid, buffer[ix++] = PoseMsg; // Position2DMsg; buffer[ix++] = object->id; // objectId; buffer[ix++] = Pose_Position | Pose_Orientation; - SendSpherical(buffer, &ix, Spherical(worldPosition)); + SendSpherical(buffer, &ix, Spherical::FromVector3(worldPosition)); SendQuat32(buffer, &ix, worldOrientation); // SendPolar(buffer, &ix, polar); // 3 bytes // SendVector3(buffer, &ix, worldPosition); @@ -373,8 +373,8 @@ void NetworkSync::SendPolar(unsigned char* data, void NetworkSync::SendSpherical(unsigned char* data, unsigned char* startIndex, Spherical s) { - SendAngle8(data, (*startIndex)++, s.horizontalAngle.ToFloat()); - SendAngle8(data, (*startIndex)++, s.verticalAngle.ToFloat()); + SendAngle8(data, (*startIndex)++, s.horizontal.ToFloat()); + SendAngle8(data, (*startIndex)++, s.vertical.ToFloat()); SendFloat16(data, startIndex, s.distance); } diff --git a/README.md b/README.md index 731befe..79eb746 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,19 @@ RoboidControl is a cross platform framework to control autonomous robots. This library contains the generic functionality. Most projects will use one of the platform-specific implementations: * [RoboidControl for Arduino](https://gitlab.passervr.com/passer/arduino/roboidcontrol) + +Network Sync Protocol +===================== + +The client connects to a Roboid Site using a Serial or WiFi connection. +It will then send a 'Client (0xA0)' message to the Site +The Site will respond with a 'NetworkId (0xA1)' message containing the NetworkId of this new client. +Then the client can start sending normal messages. + +When the client sends a 'Pose (0x10)' message for a thing which is not known by the Site +(the networkId/thingId combination is not known), the Site will send an 'Investigate (0x81)' +message to the client. +The client shall respond with a 'NewThing (0x80)' message containing the type of the thing. +Optionally, the client can send a 'ModelURL (0x90)' message containing a link to the OBJ model of the thing. + +The same mechanism work the other way round, when the client receives a pose for an unknown object. +The deviation is that the Site will (currently) not send 'ModelURL (0x90)' messages. \ No newline at end of file