protected override void ReceiveMessage(RosSharp.RosBridgeClient.MessageTypes.Gazebo.ModelStates message) { int index; modelNamesFromGazebo = message.name; for (int i = 0; i < message.name.Length; i++) { string name = message.name[i]; RosSharp.RosBridgeClient.MessageTypes.Geometry.Pose pose = message.pose[i]; // Gazebo is in meters, we think in millimeters /* * pose.position.x = pose.position.x * 1000.0f; * pose.position.y = pose.position.y * 1000.0f; * pose.position.z = pose.position.z * 1000.0f; * pose.position.x = pose.position.x - differenceGazeboUnity.x; * pose.position.y = pose.position.y - differenceGazeboUnity.y; * pose.position.z = pose.position.z - differenceGazeboUnity.z; */ Twist twist = message.twist[i]; if (name.Contains("ADO")) { index = ModelNames.IndexOf(name); //Debug.Log($"{name} x: {pose.position.x} y: {pose.position.x} z: {pose.position.z} "); if (index != -1) { if (ModelStateWriters.Count > index) { ModelStateWriter msw = ModelStateWriters[index]; if (msw != null) { msw.Write(pose, twist); } } } else { RosSharp.RosBridgeClient.MessageTypes.Gazebo.ModelState modelstate = new RosSharp.RosBridgeClient.MessageTypes.Gazebo.ModelState(name, pose, twist, ""); if (modelsToGen.Exists(model => { return(model.model_name.Equals(modelstate.model_name)); })) { } else { if (ModelNames.Contains(modelstate.model_name)) { } else { modelsToGen.Add(modelstate); } } } } } }
private ModelStateWriter generateNewObject(RosSharp.RosBridgeClient.MessageTypes.Gazebo.ModelState modelstate) { RosSharp.RosBridgeClient.MessageTypes.Geometry.Pose pose = modelstate.pose; Twist twist = modelstate.twist; string name = modelstate.model_name; GameObject ado = Instantiate(generatedCubePrefab); generatedObjects.Add(ado); ado.name = name; ado.transform.SetParent(genCubeParentTransform, true); ModelStateWriter modelStateWriter = ado.AddComponent <ModelStateWriter>(); CollisionTester collisionTester = ado.AddComponent <CollisionTester>(); collisionTester.currentExecuter = this.currentExecutor; collisionTester.sucker = this.LoaderSucker; suctionCupStatusSubscriber.collisionTesters.Add(collisionTester); BoxCollider boxCollider = ado.GetComponent <BoxCollider>(); boxCollider.isTrigger = true; foreach (UnityEngine.Transform child in ado.transform) { if (child.name.Contains("ROSCoords")) { child.localPosition = new UnityEngine.Vector3((float)pose.position.x, (float)pose.position.y, (float)pose.position.z); child.localPosition = child.localPosition * 1000f; ado.transform.localPosition = coordinateTargetSelector.transformVectorRos2UnityLocal(child.localPosition); modelStateWriter.rosTransform = child; } } modelStateWriter.targetTransform = ado.transform; modelStateWriter.updateTransform = true; modelStateWriter.coordinateTargetSelector = this.coordinateTargetSelector; coordinateTargetSelector.addOnClickHandlerAndBoundingBoxes(name); return(modelStateWriter); }