Fix issues, add networking documentation

This commit is contained in:
Pascal Serrarens 2024-08-29 11:44:42 +02:00
parent 67b6d134e5
commit a890cdb7fb
3 changed files with 25 additions and 7 deletions

View File

@ -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) {

View File

@ -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);
}

View File

@ -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.