InterestingThings are now Things
This commit is contained in:
		
							parent
							
								
									0e2f628e3e
								
							
						
					
					
						commit
						f77b00f639
					
				| @ -7,8 +7,7 @@ | ||||
| #include <Arduino.h> | ||||
| #endif | ||||
| 
 | ||||
| void NetworkPerception::ProcessPacket(Roboid* roboid, | ||||
|                                       unsigned char* buffer, | ||||
| void NetworkPerception::ProcessPacket(Roboid *roboid, unsigned char *buffer, | ||||
|                                       int packetsize) { | ||||
| #if RC_DEBUG | ||||
|   // printf("packet received, type = 0x%02x %d %d %d %d %d\n", buffer[0],
 | ||||
| @ -16,22 +15,22 @@ void NetworkPerception::ProcessPacket(Roboid* roboid, | ||||
| #endif | ||||
| 
 | ||||
|   switch (buffer[0]) { | ||||
|     case NetworkSync::CreateMsg: | ||||
|       ReceiveCreateMsg(buffer, roboid); | ||||
|       break; | ||||
|     case NetworkSync::InvestigateMsg: | ||||
|       ReceiveInvestigateMsg(buffer, roboid); | ||||
|       break; | ||||
|     case NetworkSync::PoseMsg: | ||||
|       ReceivePoseMsg(buffer, roboid); | ||||
|       break; | ||||
|     case NetworkSync::PoseTypeMsg: | ||||
|       ReceiveTypedObject(buffer, roboid); | ||||
|       break; | ||||
|   case NetworkSync::CreateMsg: | ||||
|     ReceiveCreateMsg(buffer, roboid); | ||||
|     break; | ||||
|   case NetworkSync::InvestigateMsg: | ||||
|     ReceiveInvestigateMsg(buffer, roboid); | ||||
|     break; | ||||
|   case NetworkSync::PoseMsg: | ||||
|     ReceivePoseMsg(buffer, roboid); | ||||
|     break; | ||||
|   case NetworkSync::PoseTypeMsg: | ||||
|     ReceiveTypedObject(buffer, roboid); | ||||
|     break; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| void NetworkPerception::ReceiveCreateMsg(unsigned char* data, Roboid* roboid) { | ||||
| void NetworkPerception::ReceiveCreateMsg(unsigned char *data, Roboid *roboid) { | ||||
|   unsigned char networkId = data[1]; | ||||
|   unsigned char objectId = data[2]; | ||||
|   unsigned char objectType = data[3]; | ||||
| @ -39,15 +38,15 @@ void NetworkPerception::ReceiveCreateMsg(unsigned char* data, Roboid* roboid) { | ||||
|     return; | ||||
| 
 | ||||
|   // printf("Received create message [%d/%d]\n", networkId, objectId);
 | ||||
|   InterestingThing* thing = | ||||
|   InterestingThing *thing = | ||||
|       roboid->perception->FindTrackedObject(networkId, objectId); | ||||
|   if (thing != nullptr) { | ||||
|     thing->type = objectType; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| void NetworkPerception::ReceiveInvestigateMsg(unsigned char* data, | ||||
|                                               Roboid* roboid) { | ||||
| void NetworkPerception::ReceiveInvestigateMsg(unsigned char *data, | ||||
|                                               Roboid *roboid) { | ||||
|   unsigned char networkId = data[1]; | ||||
|   unsigned char objectId = data[2]; | ||||
| 
 | ||||
| @ -64,16 +63,17 @@ void NetworkPerception::ReceiveInvestigateMsg(unsigned char* data, | ||||
|     if (roboid->modelUrl != nullptr) | ||||
|       roboid->networkSync->SendModel(roboid); | ||||
|   } else { | ||||
|     InterestingThing* thing = | ||||
|     InterestingThing *thing = | ||||
|         roboid->perception->FindTrackedObject(0x00, objectId); | ||||
|     if (thing == nullptr) | ||||
|       return; | ||||
| 
 | ||||
|     roboid->networkSync->NewObject(thing); | ||||
|     roboid->networkSync->SendModel(thing); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| void NetworkPerception::ReceivePlane(unsigned char* data, Roboid* roboid) { | ||||
| void NetworkPerception::ReceivePlane(unsigned char *data, Roboid *roboid) { | ||||
|   unsigned char networkId = data[1]; | ||||
|   unsigned char poseType = data[3]; | ||||
|   if ((poseType & NetworkSync::Pose_Position) == 0 || | ||||
| @ -86,7 +86,7 @@ void NetworkPerception::ReceivePlane(unsigned char* data, Roboid* roboid) { | ||||
|   Spherical16 roboidPosition = roboid->GetPosition(); | ||||
|   Spherical16 deltaPosition = worldPosition - roboidPosition; | ||||
| 
 | ||||
|   float distance = deltaPosition.distance;  // magnitude();
 | ||||
|   float distance = deltaPosition.distance; // magnitude();
 | ||||
|   if (roboid->perception->IsInteresting(distance) == false) { | ||||
|     // printf("  plane not interesting\n");
 | ||||
|     return; | ||||
| @ -100,7 +100,7 @@ void NetworkPerception::ReceivePlane(unsigned char* data, Roboid* roboid) { | ||||
| 
 | ||||
|   // Polar position = Polar(angle, distance);
 | ||||
|   Spherical16 position = | ||||
|       localPosition;  // Spherical16::FromVector3(localPosition);
 | ||||
|       localPosition; // Spherical16::FromVector3(localPosition);
 | ||||
| 
 | ||||
|   // printf("Received plane (%f %f %f) (%f %f %f) %f %f %f\n", worldPosition.x,
 | ||||
|   //        worldPosition.y, worldPosition.z, roboidPosition.x,
 | ||||
| @ -112,7 +112,7 @@ void NetworkPerception::ReceivePlane(unsigned char* data, Roboid* roboid) { | ||||
|                                        0x80, 0x80, networkId); | ||||
| } | ||||
| 
 | ||||
| void NetworkPerception::ReceiveSphere(unsigned char* data, Roboid* roboid) { | ||||
| void NetworkPerception::ReceiveSphere(unsigned char *data, Roboid *roboid) { | ||||
|   unsigned char networkId = data[1]; | ||||
| 
 | ||||
|   float radius = ReceiveFloat100(data, 3); | ||||
| @ -126,14 +126,14 @@ void NetworkPerception::ReceiveSphere(unsigned char* data, Roboid* roboid) { | ||||
|       SwingTwist16::Inverse(roboidOrientation) * deltaPosition; | ||||
| 
 | ||||
|   Spherical16 position = | ||||
|       localPosition;  // Spherical16::FromVector3(localPosition);
 | ||||
|       localPosition; // Spherical16::FromVector3(localPosition);
 | ||||
| 
 | ||||
|   roboid->perception->AddTrackedObject(this, position, SwingTwist16::identity, | ||||
|                                        0x81, 0x81, networkId); | ||||
| } | ||||
| 
 | ||||
| void NetworkPerception::ReceivePoseMsg(unsigned char* data, Roboid* roboid) { | ||||
|   if (roboid->networkSync->networkId == 0)  // We're not connected to a site yet
 | ||||
| void NetworkPerception::ReceivePoseMsg(unsigned char *data, Roboid *roboid) { | ||||
|   if (roboid->networkSync->networkId == 0) // We're not connected to a site yet
 | ||||
|     return; | ||||
| 
 | ||||
|   unsigned char networkId = data[1]; | ||||
| @ -152,7 +152,7 @@ void NetworkPerception::ReceivePoseMsg(unsigned char* data, Roboid* roboid) { | ||||
|     // printf("Received PoseMsg [%d/%d]\n", networkId, objectId);
 | ||||
| #endif | ||||
| 
 | ||||
|   InterestingThing* thing = | ||||
|   InterestingThing *thing = | ||||
|       roboid->perception->FindTrackedObject(networkId, objectId); | ||||
| 
 | ||||
|   SwingTwist16 roboidOrientation = roboid->GetOrientation(); | ||||
| @ -175,7 +175,7 @@ void NetworkPerception::ReceivePoseMsg(unsigned char* data, Roboid* roboid) { | ||||
| 
 | ||||
|       Spherical16 localPosition = SwingTwist16::Inverse(roboidOrientation) * | ||||
|                                   (worldPosition - roboidPosition); | ||||
|       position = localPosition;  // Spherical16::FromVector3(localPosition);
 | ||||
|       position = localPosition; // Spherical16::FromVector3(localPosition);
 | ||||
|       // printf("  worldPosition (%f %f %f) localPosition (%f %f %f)\n",
 | ||||
|       //        worldPosition.Right(), worldPosition.Up(),
 | ||||
|       //        worldPosition.Forward(), localPosition.Right(),
 | ||||
| @ -193,7 +193,7 @@ void NetworkPerception::ReceivePoseMsg(unsigned char* data, Roboid* roboid) { | ||||
|         Angle16::Degrees(worldAngles.Up()), | ||||
|         Angle16::Degrees(worldAngles.Right()), | ||||
|         Angle16::Degrees( | ||||
|             worldAngles.Forward()));  // Quaternion::Euler(worldAngles);
 | ||||
|             worldAngles.Forward())); // Quaternion::Euler(worldAngles);
 | ||||
|     if (objectId == 0) { | ||||
|       roboid->SetOrientation(worldOrientation); | ||||
|     } else { | ||||
| @ -214,11 +214,11 @@ void NetworkPerception::ReceivePoseMsg(unsigned char* data, Roboid* roboid) { | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| void NetworkPerception::ReceiveTypedObject(unsigned char* data, | ||||
|                                            Roboid* roboid) { | ||||
| void NetworkPerception::ReceiveTypedObject(unsigned char *data, | ||||
|                                            Roboid *roboid) { | ||||
|   unsigned char objectType = data[1]; | ||||
|   unsigned char objectId = data[2]; | ||||
|   if (objectType == 0x02) {  // lighthouse
 | ||||
|   if (objectType == 0x02) { // lighthouse
 | ||||
|     // We require position and orientation for lighthouses
 | ||||
|     if (data[3] != | ||||
|         (NetworkSync::Pose_Position | NetworkSync::Pose_Orientation)) { | ||||
| @ -239,7 +239,7 @@ void NetworkPerception::ReceiveTypedObject(unsigned char* data, | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| Int32 NetworkPerception::ReceiveInt32(unsigned char* data, int startIndex) { | ||||
| Int32 NetworkPerception::ReceiveInt32(unsigned char *data, int startIndex) { | ||||
|   Int32 a = Int32((UInt32)(data[startIndex + 3]) << 24 | | ||||
|                   (UInt32)(data[startIndex + 2]) << 16 | | ||||
|                   (UInt32)(data[startIndex + 1]) << 8 | | ||||
| @ -247,13 +247,13 @@ Int32 NetworkPerception::ReceiveInt32(unsigned char* data, int startIndex) { | ||||
|   return a; | ||||
| } | ||||
| 
 | ||||
| float NetworkPerception::ReceiveFloat100(unsigned char* data, int startIndex) { | ||||
| float NetworkPerception::ReceiveFloat100(unsigned char *data, int startIndex) { | ||||
|   Int32 intValue = ReceiveInt32(data, startIndex); | ||||
|   float f = (float)intValue / 100.0F; | ||||
|   return f; | ||||
| } | ||||
| 
 | ||||
| Vector3 NetworkPerception::ReceiveVector3(unsigned char* data, int startIndex) { | ||||
| Vector3 NetworkPerception::ReceiveVector3(unsigned char *data, int startIndex) { | ||||
|   float x = ReceiveFloat100(data, startIndex); | ||||
|   float y = ReceiveFloat100(data, startIndex + 4); | ||||
|   float z = ReceiveFloat100(data, startIndex + 8); | ||||
|  | ||||
							
								
								
									
										57
									
								
								Thing.cpp
									
									
									
									
									
								
							
							
						
						
									
										57
									
								
								Thing.cpp
									
									
									
									
									
								
							| @ -22,35 +22,25 @@ const unsigned int Thing::UncontrolledMotorType = | ||||
|     MotorType | (unsigned int)Type::UncontrolledMotor; | ||||
| const unsigned int Thing::ServoType = (unsigned int)Type::Servo; | ||||
| 
 | ||||
| bool Thing::IsMotor() { | ||||
|   return (type & Thing::MotorType) != 0; | ||||
| } | ||||
| bool Thing::IsMotor() { return (type & Thing::MotorType) != 0; } | ||||
| 
 | ||||
| bool Thing::IsSensor() { | ||||
|   return (type & Thing::SensorType) != 0; | ||||
| } | ||||
| bool Thing::IsSensor() { return (type & Thing::SensorType) != 0; } | ||||
| 
 | ||||
| bool Thing::IsRoboid() { | ||||
|   return (type & Thing::RoboidType) != 0; | ||||
| } | ||||
| bool Thing::IsRoboid() { return (type & Thing::RoboidType) != 0; } | ||||
| 
 | ||||
| void Thing::SetModel(const char* url) { | ||||
|   this->modelUrl = url; | ||||
| } | ||||
| void Thing::SetModel(const char *url) { this->modelUrl = url; } | ||||
| 
 | ||||
| void Thing::SetParent(Thing* parent) { | ||||
| void Thing::SetParent(Thing *parent) { | ||||
|   if (parent == nullptr) | ||||
|     return; | ||||
| 
 | ||||
|   parent->AddChild(this); | ||||
| } | ||||
| 
 | ||||
| Thing* Thing::GetParent() { | ||||
|   return this->parent; | ||||
| } | ||||
| Thing *Thing::GetParent() { return this->parent; } | ||||
| 
 | ||||
| void Thing::AddChild(Thing* child) { | ||||
|   Thing** newChildren = new Thing*[this->childCount + 1]; | ||||
| void Thing::AddChild(Thing *child) { | ||||
|   Thing **newChildren = new Thing *[this->childCount + 1]; | ||||
|   for (unsigned char childIx = 0; childIx < this->childCount; childIx++) { | ||||
|     newChildren[childIx] = this->children[childIx]; | ||||
|     if (this->children[childIx] == child) { | ||||
| @ -70,17 +60,36 @@ void Thing::AddChild(Thing* child) { | ||||
|   this->childCount++; | ||||
| } | ||||
| 
 | ||||
| Thing* Thing::GetChild(unsigned char childIx) { | ||||
| Thing *Thing::GetChild(unsigned char childIx) { | ||||
|   if (childIx >= 0 && childIx < this->childCount) { | ||||
|     return this->children[childIx]; | ||||
|   } else | ||||
|     return nullptr; | ||||
| } | ||||
| 
 | ||||
| Spherical16 Thing::GetLinearVelocity() { | ||||
|   return this->linearVelocity; | ||||
| Thing *Passer::RoboidControl::Thing::RemoveChild(Thing *child) { | ||||
|   Thing **newChildren = new Thing *[this->childCount - 1]; | ||||
|   unsigned char newChildIx = 0; | ||||
|   for (unsigned char childIx = 0; childIx < this->childCount; childIx++) { | ||||
|     if (this->children[childIx] != child) { | ||||
|       if (newChildIx == this->childCount - 1) { // We did not find the child
 | ||||
|         // stop copying and return nothing
 | ||||
|         delete[] newChildren; | ||||
|         return nullptr; | ||||
|       } else | ||||
|         newChildren[newChildIx++] = this->children[childIx]; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   child->parent = nullptr; | ||||
| 
 | ||||
|   delete[] this->children; | ||||
|   this->children = newChildren; | ||||
|   this->childCount--; | ||||
| 
 | ||||
|   return child; | ||||
| } | ||||
| 
 | ||||
| Spherical16 Thing::GetAngularVelocity() { | ||||
|   return this->angularVelocity; | ||||
| } | ||||
| Spherical16 Thing::GetLinearVelocity() { return this->linearVelocity; } | ||||
| 
 | ||||
| Spherical16 Thing::GetAngularVelocity() { return this->angularVelocity; } | ||||
							
								
								
									
										1
									
								
								Thing.h
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								Thing.h
									
									
									
									
									
								
							| @ -74,6 +74,7 @@ public: | ||||
|   /// @return The child at the given index or nullptr when the index is invalid
 | ||||
|   /// or the child could not be found
 | ||||
|   Thing *GetChild(unsigned char childIx); | ||||
|   Thing *RemoveChild(Thing *child); | ||||
| 
 | ||||
|   /// @brief Sets the location from where the 3D model of this Thing can be
 | ||||
|   /// loaded from
 | ||||
|  | ||||
| @ -2,7 +2,7 @@ | ||||
| 
 | ||||
| #include <math.h> | ||||
| 
 | ||||
| InterestingThing::InterestingThing(Sensor* sensor, Polar position) { | ||||
| InterestingThing::InterestingThing(Sensor *sensor, Polar position) : Thing(0) { | ||||
|   this->id = 0; | ||||
|   this->confidence = maxConfidence; | ||||
|   this->sensor = sensor; | ||||
| @ -12,9 +12,9 @@ InterestingThing::InterestingThing(Sensor* sensor, Polar position) { | ||||
|   this->updated = true; | ||||
| } | ||||
| 
 | ||||
| InterestingThing::InterestingThing(Sensor* sensor, | ||||
|                                    Spherical16 position, | ||||
|                                    SwingTwist16 orientation) { | ||||
| InterestingThing::InterestingThing(Sensor *sensor, Spherical16 position, | ||||
|                                    SwingTwist16 orientation) | ||||
|     : Thing(0) { | ||||
|   this->id = 0; | ||||
|   this->confidence = maxConfidence; | ||||
|   this->sensor = sensor; | ||||
| @ -22,12 +22,12 @@ InterestingThing::InterestingThing(Sensor* sensor, | ||||
|   // float angle;
 | ||||
|   // Vector3 axis;
 | ||||
|   // orientation.ToAngleAxis(&angle, &axis);
 | ||||
|   this->orientation = orientation;  // AngleAxisOf<float>(angle, axis);
 | ||||
|   this->orientation = orientation; // AngleAxisOf<float>(angle, axis);
 | ||||
|   this->updated = true; | ||||
| } | ||||
| 
 | ||||
| // #include <Arduino.h>
 | ||||
| bool InterestingThing::IsTheSameAs(InterestingThing* otherObj) { | ||||
| bool InterestingThing::IsTheSameAs(InterestingThing *otherObj) { | ||||
|   if (id != 0 && id == otherObj->id) | ||||
|     return true; | ||||
|   if (type != otherObj->type) | ||||
|  | ||||
| @ -12,14 +12,13 @@ namespace Passer { | ||||
| namespace RoboidControl { | ||||
| 
 | ||||
| /// @brief An object tracked by the roboid
 | ||||
| class InterestingThing { | ||||
|  public: | ||||
| class InterestingThing : public Thing { | ||||
| public: | ||||
|   /// @brief An object tracked by the roboid
 | ||||
|   /// @param sensor The Sensor which detected this object
 | ||||
|   /// @param position The position in polar coordinates local to the roboid
 | ||||
|   InterestingThing(Sensor* sensor, Polar position); | ||||
|   InterestingThing(Sensor* sensor, | ||||
|                    Spherical16 position, | ||||
|   InterestingThing(Sensor *sensor, Polar position); | ||||
|   InterestingThing(Sensor *sensor, Spherical16 position, | ||||
|                    SwingTwist16 orientation = SwingTwist16::identity); | ||||
| 
 | ||||
|   /// @brief Update the position of the object
 | ||||
| @ -43,7 +42,7 @@ class InterestingThing { | ||||
|   /// @return Returns true when both objects are considered the same
 | ||||
|   /// The result of this check depends on the equalityDistance and equalityAngle
 | ||||
|   /// value.
 | ||||
|   bool IsTheSameAs(InterestingThing* otherObj); | ||||
|   bool IsTheSameAs(InterestingThing *otherObj); | ||||
|   /// @brief The maximum difference in distance from the roboid in which two
 | ||||
|   /// objects may be considered the same
 | ||||
|   /// @details When the difference in distance is exactly this
 | ||||
| @ -64,25 +63,25 @@ class InterestingThing { | ||||
| 
 | ||||
|   unsigned char networkId; | ||||
|   /// @brief The id of the tracked object
 | ||||
|   unsigned char id; | ||||
|   // unsigned char id;
 | ||||
| 
 | ||||
|   char parentId = 0; | ||||
|   /// @brief The current position of the object
 | ||||
|   Spherical16 position = Spherical16::zero; | ||||
|   // Spherical16 position = Spherical16::zero;
 | ||||
|   /// @brief The current orientation of the object
 | ||||
|   SwingTwist16 orientation = SwingTwist16(); | ||||
|   // Quaternion orientation = Quaternion::identity;
 | ||||
|   // SwingTwist16 orientation = SwingTwist16();
 | ||||
|   //  Quaternion orientation = Quaternion::identity;
 | ||||
|   /// @brief The sensor which provided that lastet pose this object
 | ||||
|   Sensor* sensor = nullptr; | ||||
|   Sensor *sensor = nullptr; | ||||
| 
 | ||||
|   unsigned char type = 0x00; | ||||
|   // unsigned char type = 0x00;
 | ||||
|   unsigned char confidence; | ||||
|   bool updated = false; | ||||
| 
 | ||||
|  protected: | ||||
| protected: | ||||
|   static constexpr unsigned char maxConfidence = 255; | ||||
|   static constexpr unsigned char confidenceDropSpeed = 10;  // 150; // 2;
 | ||||
|   static constexpr unsigned char confidenceDropSpeed = 10; // 150; // 2;
 | ||||
| }; | ||||
| 
 | ||||
| }  // namespace RoboidControl
 | ||||
| }  // namespace Passer
 | ||||
| } // namespace RoboidControl
 | ||||
| } // namespace Passer
 | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Pascal Serrarens
						Pascal Serrarens