Exemple #1
0
        private static Material CreateMaterial(this Link.Visual.Material urdfMaterial)
        {
            if (MaterialsCreated.ContainsKey(urdfMaterial.name))
            {
                return(MaterialsCreated[urdfMaterial.name]);
            }

            if (urdfMaterial.name == "")
            {
                urdfMaterial.name = GenerateMaterialName(urdfMaterial);
            }

            //var material = AssetDatabase.LoadAssetAtPath<Material>(UrdfAssetPathHandler.GetMaterialAssetPath(urdfMaterial.name));
            var all      = Resources.LoadAll("", typeof(Material));
            var material = all.FirstOrDefault(x => x.name == urdfMaterial.name);

            if (material != null) //material already exists
            {
                MaterialsCreated[urdfMaterial.name] = material as Material;
                return(material as Material);
            }
            else
            {
                return(new Material(Shader.Find("Specular")));
            }
        }
        private static Material CreateMaterial(this Link.Visual.Material urdfMaterial)
        {
            if (urdfMaterial.name == "")
            {
                urdfMaterial.name = GenerateMaterialName(urdfMaterial);
            }

            var material = AssetDatabase.LoadAssetAtPath <Material>(UrdfAssetPathHandler.GetMaterialAssetPath(urdfMaterial.name));

            if (material != null) //material already exists
            {
                return(material);
            }

            material = InitializeMaterial();

            if (urdfMaterial.color != null)
            {
                material.color = CreateColor(urdfMaterial.color);
            }
            else if (urdfMaterial.texture != null)
            {
                material.mainTexture = LoadTexture(urdfMaterial.texture.filename);
            }

            AssetDatabase.CreateAsset(material, UrdfAssetPathHandler.GetMaterialAssetPath(urdfMaterial.name));
            return(material);
        }
        public static Link.Visual ExportVisualData(this UrdfVisual urdfVisual)
        {
            UrdfGeometry.CheckForUrdfCompatibility(urdfVisual.transform, urdfVisual.geometryType);

            Link.Geometry geometry = UrdfGeometry.ExportGeometryData(urdfVisual.geometryType, urdfVisual.transform);

            Link.Visual.Material material = null;
            if ((geometry.mesh != null))
            {
                material = UrdfMaterial.ExportMaterialData(urdfVisual.GetComponentInChildren <MeshRenderer>().sharedMaterial);
            }
            string visualName = urdfVisual.name == "unnamed" ? null : urdfVisual.name;

            return(new Link.Visual(geometry, visualName, UrdfOrigin.ExportOriginData(urdfVisual.transform), material));
        }
Exemple #4
0
        public static Link.Visual ExportVisualData(this UrdfVisual urdfVisual)
        {
            UrdfGeometry.CheckForUrdfCompatibility(urdfVisual.transform, urdfVisual.GeometryType);

            Link.Geometry geometry = UrdfGeometry.ExportGeometryData(urdfVisual.GeometryType, urdfVisual.transform);

            Link.Visual.Material material = null;
            if (!(geometry.mesh != null && geometry.mesh.filename.ToLower().EndsWith(".dae"))) //Collada files contain their own materials
            {
                material = UrdfMaterial.ExportMaterialData(urdfVisual.GetComponentInChildren <MeshRenderer>().sharedMaterial);
            }

            string visualName = urdfVisual.name == "unnamed" ? null : urdfVisual.name;

            return(new Link.Visual(geometry, visualName, UrdfOrigin.ExportOriginData(urdfVisual.transform), material));
        }
Exemple #5
0
        private SpatialMaterial CreateMaterial(Link.Visual.Material baseMat)
        {
            if (baseMat == null)
            {
                return(null);
            }

            SpatialMaterial temp     = new SpatialMaterial();
            var             matColor = new Godot.Color();

            matColor.r       = (float)baseMat.color.rgba[0];
            matColor.g       = (float)baseMat.color.rgba[1];
            matColor.b       = (float)baseMat.color.rgba[2];
            matColor.a       = (float)baseMat.color.rgba[3];
            temp.AlbedoColor = matColor;

            return(temp);
        }
 public static void SetUrdfMaterial(GameObject gameObject, Link.Visual.Material urdfMaterial)
 {
     if (urdfMaterial != null)
     {
         var material = CreateMaterial(urdfMaterial);
         SetMaterial(gameObject, material);
     }
     else
     {
         //If the URDF material is not defined, and the renderer is missing
         //a material, assign the default material.
         Renderer renderer = gameObject.GetComponentInChildren <Renderer>();
         if (renderer != null && renderer.sharedMaterial == null)
         {
             var defaultMaterial = AssetDatabase.LoadAssetAtPath <Material>(UrdfAssetPathHandler.GetMaterialAssetPath(DefaultMaterialName));
             SetMaterial(gameObject, defaultMaterial);
         }
     }
 }
Exemple #7
0
 public static void SetUrdfMaterial(GameObject gameObject, Link.Visual.Material urdfMaterial)
 {
     if (urdfMaterial != null)
     {
         var material = CreateMaterial(urdfMaterial);
         SetMaterial(gameObject, material);
     }
     else
     {
         //If the URDF material is not defined, and the renderer is missing
         //a material, assign the default material.
         Renderer renderer = gameObject.GetComponentInChildren <Renderer>();
         if (renderer != null && renderer.sharedMaterial == null)
         {
             var defaultMaterial = new Material(Shader.Find("Specular"));
             SetMaterial(gameObject, defaultMaterial);
         }
     }
 }
        private static string GenerateMaterialName(Link.Visual.Material urdfMaterial)
        {
            var materialName = "";

            if (urdfMaterial.color != null)
            {
                materialName = "rgba-";
                for (var i = 0; i < urdfMaterial.color.rgba.Length; i++)
                {
                    materialName += urdfMaterial.color.rgba[i];
                    if (i != urdfMaterial.color.rgba.Length - 1)
                    {
                        materialName += "-";
                    }
                }
            }
            else if (urdfMaterial.texture != null)
            {
                materialName = "texture-" + Path.GetFileName(urdfMaterial.texture.filename);
            }

            return(materialName);
        }
        /// <summary>
        /// Compares material information of two visuals
        /// </summary>
        /// <param name="source">First visual's material information to be compared</param>
        /// <param name="exported">Second visuals's material information to be compared</param>
        /// <param name="indent">Indent level in the log file</param>
        /// <returns></returns>
        private bool CompareMaterial(Link.Visual.Material source, Link.Visual.Material exported, int indent)
        {
            bool materialNameEqual = source.name == exported.name;

            linkLog.AppendLine(String.Format("{0}Name Equal:{1,6}", Indent(indent), materialNameEqual));
            linkLog.AppendLine(String.Format("{0}Name: Source: {1,12} ", Indent(indent), source.name));
            linkLog.AppendLine(String.Format("{0}Exported: {1,12}", Indent(indent), exported.name));

            if (!materialNameEqual)
            {
                return(false);
            }

            if (source.color != null && exported.color != null)
            {
                for (int i = 0; i < 3; i++)
                {
                    if (source.color.rgba[i] != exported.color.rgba[i])
                    {
                        linkLog.AppendLine(String.Format("{0}Colors Equal: {1,6}", Indent(indent), "False"));
                        linkLog.AppendLine(String.Format("{0}RGB Source: {1,5:F3} {2,5:F3} {3,5:F3} ", Indent(indent), source.color.rgba[0], source.color.rgba[1], source.color.rgba[2]));
                        linkLog.AppendLine(String.Format("{0}RGB Exported: {1,5:F3} {2,5:F3} {3,5:F3}", Indent(indent), exported.color.rgba[0], exported.color.rgba[1], exported.color.rgba[2]));
                        return(false);
                    }
                }
                linkLog.AppendLine(String.Format("{0}Colors Equal: {1,6}", Indent(indent), "True"));
                linkLog.AppendLine(String.Format("{0}RGB :{1,5:F3} {2,5:F3} {3,5:F3} ", Indent(indent), source.color.rgba[0], source.color.rgba[1], source.color.rgba[2]));
            }
            else if (source.color == null && exported.color == null)
            {
                linkLog.AppendLine(String.Format("{0} Color nullity equality:{1,6}", Indent(indent), "True"));
            }
            else
            {
                linkLog.AppendLine(String.Format("{0} Color nullity equality:{1,6}", Indent(indent), "False"));
                return(false);
            }

            if (source.texture != null && exported.texture != null)
            {
                bool textureNameEqual = (source.texture.filename != exported.texture.filename);
                linkLog.AppendLine(String.Format("{0}Name Equal: {1,6}", Indent(indent), textureNameEqual));
                linkLog.AppendLine(String.Format("{0}Name: Source:{1,12}", Indent(indent), source.texture.filename));
                linkLog.AppendLine(String.Format("{0}Exported:{1,12}", Indent(indent), exported.texture.filename));
                if (!textureNameEqual)
                {
                    return(false);
                }
            }
            else if (source.texture == null && source.texture == null)
            {
                linkLog.AppendLine(String.Format("{0}Texture nullity equality:{1,6}", Indent(indent), "True"));
            }
            else
            {
                linkLog.AppendLine(String.Format("{0}Texture nullity equality:{1,6}", Indent(indent), "False"));
                return(false);
            }


            return(true);
        }
Exemple #10
0
        private static void Main(string[] args)
        {
            string newRobotAssetPath = Path.Combine(Directory.GetCurrentDirectory(), "..", "..", "TestResults");

            Directory.CreateDirectory(newRobotAssetPath);

            string exportPath = Path.Combine(newRobotAssetPath, "testing_export.urdf");
            Robot  robot      = new Robot(exportPath, "TestRobot");

            //Test material library
            Link.Visual.Material material = new Link.Visual.Material("blue", new Link.Visual.Material.Color(new double[] { 0, 0, 1, 1 }));
            robot.materials.Add(material);

            //Test link
            Link link = new Link("test_link_1", new Link.Inertial(
                                     111.0,
                                     new Origin(new double[] { 0, 1, 2 },
                                                new double[] { 0, 1, 2 }),
                                     new Link.Inertial.Inertia(0.01, 0.02, 0.03, 0.04, 0.05, 0.06)
                                     ));

            link.visuals.Add(new Link.Visual(
                                 new Link.Geometry(new Link.Geometry.Box(new double[] { 4, 1, 2 })),
                                 null,
                                 new Origin(new double[] { 0, 0, 0 },
                                            new double[] { 0, 1, 1 }),
                                 new Link.Visual.Material("blue"))
                             );

            link.collisions.Add(new Link.Collision(
                                    new Link.Geometry(new Link.Geometry.Box(new double[] { 4, 1, 2 })))
                                );

            robot.links.Add(link);

            //Test second link
            robot.links.Add(new Link("test_link_2"));

            //Test joint
            Joint joint = new Joint(
                "test_joint_1",
                "fixed",
                "test_link_1",
                "test_link_2",
                new Origin(new double[] { 0, 1, 2 },
                           new double[] { 0, 1, 2 }),
                new Joint.Axis(new[] { 0.1, 0.2, 0.3 }),
                new Joint.Calibration(0.1),
                new Joint.Dynamics(0.4, 0.000001),
                new Joint.Limit(0, 0, 3, 10),
                new Joint.Mimic("test_joint_1"),
                new Joint.SafetyController(-10, 10, 0, 2)
                );

            robot.joints.Add(joint);

            //Test plugin
            Plugin plugin = new Plugin("<hello>\n\tWORLD!\n</hello>");

            robot.plugins.Add(plugin);

            //Test export to URDF
            robot.WriteToUrdf();

            //Output file to console
            Console.WriteLine("Test URDF was written to " + exportPath + "\n");

            if (File.Exists(exportPath))
            {
                using (TextReader tr = new StreamReader(exportPath))
                {
                    string line;
                    while ((line = tr.ReadLine()) != null)
                    {
                        Console.WriteLine(line);
                    }
                }
            }

            Console.WriteLine("\nPress any key to close...");
            Console.ReadKey(true);
        }