Ejemplo n.º 1
0
        /// <summary>
        /// Adds a new sensor to the Robot model, creating a joint and link object for the component being added.
        /// </summary>
        /// <param name="component">The component object being added. MUST NOT BE NULL</param>
        /// <param name="parent">The name of the parent link that this component is linked to. MUST NOT BE NULL OR EMPTY</param>
        /// <param name="xyz">The XYZ offset of this component from its parent link. MUST NOT BE NULL</param>
        /// <param name="rpy">The RPY offset of this component from its parent link. MUST NOT BE NULL</param>
        /// <returns><c>true</c> if the component was successfully added, otherwise <c>false</c></returns>
        public string AddComponent(Component component, string parent, XyzAttribute xyz, RpyAttribute rpy)
        {
            Preconditions.IsNotNull(component, "Cannot add a null component to the Robot");
            Preconditions.IsNotEmpty(parent, $"Cannot add component '{component.Name}' to the Robot model with missing parent name");
            Preconditions.IsNotNull(xyz, $"Cannot add component '{component.Name}' to '{Name}' Robot model with null XYZ offset");
            Preconditions.IsNotNull(rpy, $"Cannot add component '{component.Name}' to '{Name}' Robot model with null RPY offset");

            if (!this.Links.ContainsKey(parent))
            {
                //LOGGER.Warn($"Adding component '{component.Name}' to '{Name}' Robot model failed because '{Name}' doesn't contain link called '{parent}'");
                return(null);
            }

            string linkName  = GenerateUniqueKey(component.Name, new List <string>(this.Links.Keys));
            string jointName = GenerateUniqueKey($"{component.Name}_joint", new List <string>(this.Joints.Keys));

            Geometry geometry = (component.Box != null) ? new Geometry(new Box(component.Box.Size))
                : new Geometry(new Mesh.Builder(component.FileName).Build());
            Visual visual = new Visual.Builder(geometry).Build();
            Link   link   = new Link.Builder(linkName).SetVisual(visual).Build();
            Joint  joint  = new Joint.Builder(jointName, Joint.JointType.Fixed, this.Links[parent], link).Build();

            this.Links.Add(link.Name, link);
            this.Joints.Add(joint.Name, joint);

            return(linkName);
        }
Ejemplo n.º 2
0
        public void ParseLink()
        {
            string    name      = "name";
            Geometry  geometry1 = new Geometry(new Sphere(1));
            Geometry  geometry2 = new Geometry(new Box(new SizeAttribute(1, 2, 3)));
            Visual    visual1   = new Visual.Builder(geometry1).Build();
            Visual    visual2   = new Visual.Builder(geometry2).Build();
            Collision collision = new Collision.Builder().SetGeometry(geometry1).Build();
            Inertial  inertial  = new Inertial(new Mass(1), new Inertia(1, 2, 3, 4, 5, 6));
            string    format    = @"<link name='{0}'>
                    <visual><geometry><sphere radius='{1}'/></geometry></visual>
                    <visual><geometry><box size='{2} {3} {4}'/></geometry></visual>
                    <collision><geometry><sphere radius='{5}'/></geometry></collision>
                    <inertial><mass value='{6}'/><inertia ixx='{7}' ixy='{8}' ixz='{9}' iyy='{10}' iyz='{11}' izz='{12}'/></inertial>
                </link>";
            string    xml       = String.Format(format, name, visual1.Geometry.Sphere.Radius,
                                                visual2.Geometry.Box.Size.Length, visual2.Geometry.Box.Size.Width, visual2.Geometry.Box.Size.Height,
                                                collision.Geometry.Sphere.Radius, inertial.Mass.Value, inertial.Inertia.Ixx, inertial.Inertia.Ixy,
                                                inertial.Inertia.Ixz, inertial.Inertia.Iyy, inertial.Inertia.Iyz, inertial.Inertia.Izz);

            this.xmlDoc.Load(XmlReader.Create(new StringReader(xml)));
            Link link = this.parser.Parse(this.xmlDoc.DocumentElement);

            Assert.AreEqual(name, link.Name);
            Assert.AreEqual(2, link.Visual.Count);
            Assert.AreEqual(visual1, link.Visual[0]);
            Assert.AreEqual(visual2, link.Visual[1]);
            Assert.AreEqual(1, link.Collision.Count);
            Assert.AreEqual(collision, link.Collision[0]);
            Assert.AreEqual(inertial, link.Inertial);
        }
Ejemplo n.º 3
0
        public void ConstructVisualOnlyGeometry()
        {
            Geometry geometry = new Geometry(new Sphere(1));
            Visual   visual   = new Visual.Builder(geometry).Build();

            Assert.AreEqual(geometry, visual.Geometry);
            Assert.IsNull(visual.Material);
            Assert.AreEqual(new Origin(), visual.Origin);
        }
Ejemplo n.º 4
0
        public void ConstructVisualWithMaterial()
        {
            Geometry geometry = new Geometry(new Sphere(1));
            Material material = new Material("name");
            Visual   visual   = new Visual.Builder(geometry).SetMaterial(material).Build();

            Assert.AreEqual(new Origin(), visual.Origin);
            Assert.AreEqual(geometry, visual.Geometry);
            Assert.AreEqual(material, visual.Material);
        }
Ejemplo n.º 5
0
        public void ConstructVisualWithOrigin()
        {
            Origin   origin   = new Origin();
            Geometry geometry = new Geometry(new Sphere(1));
            Visual   visual   = new Visual.Builder(geometry).SetOrigin(origin).Build();

            Assert.AreEqual(origin, visual.Origin);
            Assert.AreEqual(geometry, visual.Geometry);
            Assert.IsNull(visual.Material);
        }
Ejemplo n.º 6
0
        public void ConstructLinkChainBuilderSetters()
        {
            string name = "linkName";
            Inertial inertial = new Inertial(new Mass(1), new Inertia(1, 1, 1, 1, 1, 1));
            Visual visual = new Visual.Builder(new Geometry(new Sphere(1))).Build();
            List<Collision> collisions = new List<Collision>();
            Link link = new Link.Builder(name).SetInertial(inertial).SetVisual(visual).SetCollision(collisions).Build();

            Assert.AreEqual(name, link.Name);
            Assert.AreEqual(inertial, link.Inertial);
            Assert.AreEqual(visual, link.Visual[0]);
            Assert.AreEqual(collisions, link.Collision);
        }
Ejemplo n.º 7
0
        public void EqualsAndHash()
        {
            Visual visual = new Visual.Builder(new Geometry(new Sphere(1))).Build();
            Visual same   = new Visual.Builder(new Geometry(new Sphere(1))).Build();
            Visual diff   = new Visual.Builder(new Geometry(new Sphere(2))).Build();

            Assert.IsTrue(visual.Equals(visual));
            Assert.IsFalse(visual.Equals(null));
            Assert.IsTrue(visual.Equals(same));
            Assert.IsTrue(same.Equals(visual));
            Assert.IsFalse(visual.Equals(diff));
            Assert.AreEqual(visual.GetHashCode(), same.GetHashCode());
            Assert.AreNotEqual(visual.GetHashCode(), diff.GetHashCode());
        }
Ejemplo n.º 8
0
        public void EqualsAndHash()
        {
            Inertial inertial = new Inertial(new Mass(1), new Inertia(1, 1, 1, 1, 1, 1));
            Visual visual = new Visual.Builder(new Geometry(new Sphere(1))).Build();
            List<Visual> visualList = new List<Visual>();
            List<Visual> diffVisualList = new List<Visual>();
            List<Collision> collisionList = new List<Collision>();

            visualList.Add(visual);
            diffVisualList.Add(visual);
            diffVisualList.Add(new Visual.Builder(new Geometry(new Box(new SizeAttribute(1, 2, 3)))).Build());

            Link link = new Link.Builder("link").SetInertial(inertial).SetVisual(visual).SetCollision(collisionList).Build();
            Link same1 = new Link.Builder("link").SetInertial(inertial).SetVisual(visual).SetCollision(collisionList).Build();
            Link same2 = new Link.Builder("link").SetInertial(inertial).SetVisual(visualList).SetCollision(collisionList).Build();
            Link same3 = new Link.Builder("link").SetInertial(inertial).SetVisual(visualList).Build();
            Link diff1 = new Link.Builder("different_link").SetInertial(inertial).SetVisual(visual).SetCollision(collisionList).Build();
            Link diff2 = new Link.Builder("link").SetVisual(visual).SetCollision(collisionList).Build();
            Link diff3 = new Link.Builder("link").SetInertial(inertial).SetCollision(collisionList).Build();
            Link diff4 = new Link.Builder("link").SetInertial(inertial).SetVisual(diffVisualList).SetCollision(collisionList).Build();
            Link diff5 = new Link.Builder("link").Build();

            Assert.IsTrue(link.Equals(link));
            Assert.IsFalse(link.Equals(null));
            Assert.IsTrue(link.Equals(same1));
            Assert.IsTrue(link.Equals(same2));
            Assert.IsTrue(link.Equals(same3));
            Assert.IsTrue(same1.Equals(link));
            Assert.IsTrue(same2.Equals(link));
            Assert.IsTrue(same3.Equals(link));
            Assert.IsFalse(link.Equals(diff1));
            Assert.IsFalse(link.Equals(diff2));
            Assert.IsFalse(link.Equals(diff3));
            Assert.IsFalse(link.Equals(diff4));
            Assert.IsFalse(link.Equals(diff5));
            Assert.AreEqual(link.GetHashCode(), link.GetHashCode());
            Assert.AreEqual(link.GetHashCode(), same1.GetHashCode());
            Assert.AreEqual(link.GetHashCode(), same2.GetHashCode());
            Assert.AreEqual(link.GetHashCode(), same3.GetHashCode());
            Assert.AreNotEqual(link.GetHashCode(), diff1.GetHashCode());
            Assert.AreNotEqual(link.GetHashCode(), diff2.GetHashCode());
            Assert.AreNotEqual(link.GetHashCode(), diff3.GetHashCode());
            Assert.AreNotEqual(link.GetHashCode(), diff4.GetHashCode());
            Assert.AreNotEqual(link.GetHashCode(), diff5.GetHashCode());
        }
Ejemplo n.º 9
0
        public void ParseLinkVisualOnly()
        {
            string   name     = "name";
            Geometry geometry = new Geometry(new Sphere(1));
            Visual   visual   = new Visual.Builder(geometry).Build();
            string   format   = @"<link name='{0}'>
                    <visual><geometry><sphere radius='{1}'/></geometry></visual>
                </link>";
            string   xml      = String.Format(format, name, visual.Geometry.Sphere.Radius);

            this.xmlDoc.Load(XmlReader.Create(new StringReader(xml)));
            Link link = this.parser.Parse(this.xmlDoc.DocumentElement);

            Assert.AreEqual(name, link.Name);
            Assert.AreEqual(1, link.Visual.Count);
            Assert.AreEqual(visual, link.Visual[0]);
            Assert.AreEqual(0, link.Collision.Count);
            Assert.IsNull(link.Inertial);
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Parses a URDF &lt;visual&gt; element from XML.
        /// </summary>
        /// <param name="node">The XML node of a &lt;visual&gt; element</param>
        /// <returns>A Visual object parsed from the XML</returns>
        public override Visual Parse(XmlNode node)
        {
            ValidateXmlNode(node);

            XmlAttribute nameAttribute   = GetAttributeFromNode(node, UrdfSchema.NAME_ATTRIBUTE_NAME);
            XmlElement   originElement   = GetElementFromNode(node, UrdfSchema.ORIGIN_ELEMENT_NAME);
            XmlElement   geometryElement = GetElementFromNode(node, UrdfSchema.GEOMETRY_ELEMENT_NAME);
            XmlElement   materialElement = GetElementFromNode(node, UrdfSchema.MATERIAL_ELEMENT_NAME);

            Visual.Builder builder;

            if (geometryElement == null)
            {
                LogMissingRequiredElement(UrdfSchema.GEOMETRY_ELEMENT_NAME);
                builder = new Visual.Builder(GeometryParser.DEFAULT_GEOMETRY);
            }
            else
            {
                builder = new Visual.Builder(this.geometryParser.Parse(geometryElement));
            }

            if (nameAttribute != null)
            {
                builder.SetName(nameAttribute.Value);
            }

            if (originElement != null)
            {
                builder.SetOrigin(this.originParser.Parse(originElement));
            }

            if (materialElement != null)
            {
                builder.SetMaterial(this.materialParser.Parse(materialElement));
            }

            return(builder.Build());
        }
Ejemplo n.º 11
0
 public void ConstructVisualNullOrigin()
 {
     Visual visual = new Visual.Builder(new Geometry(new Sphere(1))).SetOrigin(null).Build();
 }
Ejemplo n.º 12
0
 public void ConstructVisualNullGeometry()
 {
     Visual visual = new Visual.Builder(null).Build();
 }