Day 6: (Thu Sep 15, Week 3) Webots Modeling

Notes for 2022-09-15.

New Assignments

  1. New assignment, due before next class: Exercise: Empathetic Machine Design. (The prelude of device sketches was due in class).

Agenda

  1. Quick review of device sketches due today. Please discuss them with your table partners before I come around.

  2. Introduce new assignment.

  3. Quick intro to rigid body dynamics.

  4. Walk through the Webots pendulum model.

  5. Essential nodes: Robot, Transform, Shape, Appearance, Geometry, Solid, HingeJoint, RotationalMotor, Appearance, Physics

  6. Demo of the draft Dobot model.

  7. Webots geometry import.

  8. Building a Webots model from scratch.

Essential Scene Tree Kinematics

This describes the in-class example, available in Webots.zip as spirals.wbt.

digraph input_matching { node [fontsize=10] edge [fontsize=8] dpi="72" size="7,7!" // declare all nodes Robot [ label = "Robot (base body)"] Shape0 [ label = "Shape (base geometry)"] Joint1 [ label = "HingeJoint 1"] Joint2 [ label = "HingeJoint 2"] Solid1 [ label = "Solid (disc 1 body)"] Solid2 [ label = "Solid (disc 2 body)"] Shape1 [ label = "Shape (disc 1 geometry)"] Shape2 [ label = "Shape (disc 2 geometry)"] // declare all edges Robot -> Joint1 [label = "children"] Joint1 -> Solid1 [label = "endPoint"] Solid1 -> Joint2 [label = "children"] Joint2 -> Solid2 [label = "endPoint"] Robot -> Shape0 [label = "children"] Solid1 -> Shape1 [label = "children"] Solid2 -> Shape2 [label = "children"] label = "Essential kinematics of in-class example model." }

Full Scene Tree

Following is an SVG figure showing the full Scene Tree. It may be easier to read by opening the frame in a separate window, if your browswer allows.

digraph input_matching { node [fontsize=10] edge [fontsize=8] dpi="72" size="24,24!" // declare all nodes Robot [ label = "Robot (base body)"] Solid1 [ label = "Solid (disc 1 body)"] Solid2 [ label = "Solid (disc 2 body)"] Joint1 [ label = "HingeJoint 1"] Joint2 [ label = "HingeJoint 2"] Shape0 [ label = "Shape (base geometry)"] Shape1 [ label = "Shape (disc 1 geometry)"] Shape2 [ label = "Shape (disc 2 geometry)"] Transform0 [ label = "Transform (base geom location)"] Transform1 [ label = "Transform (disc 1 geom location)"] Transform2 [ label = "Transform (disc 2 geom location)"] Physics0 [ label = "NULL"] Physics1 [ label = "Physics (disc 1 mass properties)"] Physics2 [ label = "Physics (disc 2 mass properties)"] JointParameters1 [ label = "JointParameters (joint 1 props)" ] JointParameters2 [ label = "JointParameters (joint 1 props)" ] Motor1 [ label = "RotationalMotor (actuator j1)"] Motor2 [ label = "RotationalMotor (actuator j2)"] Appearance0 [ label = "Appearance (base color)"] Appearance1 [ label = "Appearance (disc 1 color)"] Appearance2 [ label = "Appearance (disc 2 color)"] Cylinder0 [ label = "Cylinder (base geometry)"] Disc1 [ label = "DEF spiral IndexedFaceSet (imported disc1 geometry)"] Disc2 [ label = "USE spiral (backreference to shared IndexedFaceSet)"] // declare all edges Robot -> Joint1 [label = "children"] Solid1 -> Joint2 [label = "children"] Joint1 -> Solid1 [label = "endPoint"] Joint2 -> Solid2 [label = "endPoint"] Robot -> Transform0 [label = "children"] Solid1 -> Transform1 [label = "children"] Solid2 -> Transform2 [label = "children"] Transform0 -> Shape0 [label = "children"] Transform1 -> Shape1 [label = "children"] Transform2 -> Shape2 [label = "children"] Shape0 -> Appearance0 [label = "appearance"] Shape1 -> Appearance1 [label = "appearance"] Shape2 -> Appearance2 [label = "appearance"] Shape0 -> Cylinder0 [label = "geometry"] Shape1 -> Disc1 [label = "geometry"] Shape2 -> Disc2 [label = "geometry"] Joint1 -> JointParameters1 [label = "jointParameters"] Joint2 -> JointParameters2 [label = "jointParameters"] Joint1 -> Motor1 [label = "device"] Joint2 -> Motor2 [label = "device"] Robot -> Physics0 [label = "physics"] Solid1 -> Physics1 [label = "physics"] Solid2 -> Physics2 [label = "physics"] label = "Full scene graph of in-class example model." }