Let's get you a robot!

MIT 6.881: Robotic Manipulation

Fall 2020, Lecture 2

Follow live at https://slides.com/russtedrake/fall20-lec02/live

(or later at https://slides.com/russtedrake/fall20-lec02)

Click here

(on this slide)

Then here

(in the colab window)

or Ch.2 of the notes.

Today

  • Survey of robot arms.  Why did we pick iiwa?
  • Simulating the robot / visualizing the results.
  • Breakouts!
  • Survey of robot hands.  Why did we pick wsg?
  • Your "Manipulation Station" API.

https://itempool.com/MIT-Robotic-Manipulation/live

https://www.pinterest.com/pin/549579960772413472/

https://www.infineon.com/cms/en/discoveries/robotics-systems-safety-security/

https://spectrum.ieee.org/robotics/industrial-robots/rethink-robotics-baxter-robot-factory-worker

Universal Robots

Rethink

Kuka

Kinova

ABB

Franka

http://robotpark.com/academy/gear-motors-gearboxes-51055/

 A. Albu-Schäffer, S. Haddadin, C. Ott, A. Stemmer, T. Wimböck, and G. Hirzinger, "The DLR lightweight robot: design and control concepts for robots in human environments," Industrial Robot: An International Journal, vol. 34, pp. 376-385, 2007.

Drake's Physics Engine: MultibodyPlant

from pydrake.all import MultibodyPlant, FindResourceOrThrow, Parser

plant = MultibodyPlant(time_step=1e-4)
Parser(plant).AddModelFromFile(
        FindResourceOrThrow("drake/manipulation/models/iiwa_description/sdf/iiwa14_no_collision.sdf"))
plant.WeldFrames(plant.world_frame(), plant.GetFrameByName("iiwa_link_0"))
plant.Finalize()

Robot Description Files

<?xml version="1.0"?>
<sdf version="1.7">
  <model name="iiwa14">
    <link name="iiwa_link_0">
      <inertial>
        <pose>-0.1 0 0.07 0 0 0</pose>
        <mass>5</mass>
        <inertia>
          <ixx>0.05</ixx>
          <ixy>0</ixy>
          <ixz>0</ixz>
          <iyy>0.06</iyy>
          <iyz>0</iyz>
          <izz>0.03</izz>
        </inertia>
      </inertial>
      <visual name="iiwa_link_0_fixed_joint_lump__iiwa_link_0_visual">
        <geometry>
          <mesh>
            <scale>1 1 1</scale>
            <uri>../meshes/visual/link_0.obj</uri>
          </mesh>
        </geometry>
        <material>
          <diffuse>0.4 0.4 0.4 1.0</diffuse>
        </material>
      </visual>
      <gravity>1</gravity>
      <velocity_decay/>
      <self_collide>0</self_collide>
    </link>
    <link name="iiwa_link_1">
      <pose relative_to="iiwa_joint_1"/>
      <inertial>
        <pose>0 -0.03 0.12 0 0 0</pose>
        <mass>5.76</mass>
        <inertia>
          <ixx>0.033</ixx>
          <ixy>0</ixy>
          <ixz>0</ixz>
          <iyy>0.0333</iyy>
          <iyz>0</iyz>
          <izz>0.0123</izz>
        </inertia>
      </inertial>
      <visual name="iiwa_link_1_visual">
        <geometry>
          <mesh>
            <scale>1 1 1</scale>
            <uri>../meshes/visual/link_1.obj</uri>
          </mesh>
        </geometry>
        <material>
          <diffuse>0.4 0.4 0.4 1.0</diffuse>
        </material>
      </visual>
      <gravity>1</gravity>
      <velocity_decay/>
      <self_collide>0</self_collide>
    </link>
    <joint name="iiwa_joint_1" type="revolute">
      <pose relative_to="iiwa_link_0">0 0 0.1575 0 0 0</pose>
      <child>iiwa_link_1</child>
      <parent>iiwa_link_0</parent>
      <axis>
        <xyz>0 0 1</xyz>
        <limit>
          <lower>-2.96706</lower>
          <upper>2.96706</upper>
          <effort>300</effort>
          <velocity>10</velocity>
        </limit>
        <dynamics>
          <damping>0.0</damping>
          <friction>0</friction>
          <spring_reference>0</spring_reference>
          <spring_stiffness>0</spring_stiffness>
        </dynamics>
      </axis>
    </joint>
    <link name="iiwa_link_2">
      <pose relative_to="iiwa_joint_2"/>
      <inertial>
        <pose>0.0003 0.059 0.042 0 0 0</pose>
        <mass>6.35</mass>
        <inertia>
          <ixx>0.0305</ixx>
          <ixy>0</ixy>
          <ixz>0</ixz>
          <iyy>0.0304</iyy>
          <iyz>0</iyz>
          <izz>0.011</izz>
        </inertia>
      </inertial>
      <visual name="iiwa_link_2_visual_grey">
        <geometry>
          <mesh>
            <scale>1 1 1</scale>
            <uri>../meshes/visual/link_2_grey.obj</uri>
          </mesh>
        </geometry>
        <material>
          <diffuse>0.4 0.4 0.4 1.0</diffuse>
        </material>
      </visual>
      <visual name="iiwa_link_2_visual_orange">
        <geometry>
          <mesh>
            <scale>1 1 1</scale>
            <uri>../meshes/visual/link_2_orange.obj</uri>
          </mesh>
        </geometry>
        <material>
          <diffuse>1.0 0.423529411765 0.0392156862745 1.0</diffuse>
        </material>
      </visual>
      <gravity>1</gravity>
      <velocity_decay/>
      <self_collide>0</self_collide>
    </link>
    <joint name="iiwa_joint_2" type="revolute">
      <pose relative_to="iiwa_link_1">
        0 0 0.2025 1.570796326794897 0 3.141592653589793
      </pose>
      <child>iiwa_link_2</child>
      <parent>iiwa_link_1</parent>
      <axis>
        <xyz>0 0 1</xyz>
        <limit>
          <lower>-2.0944</lower>
          <upper>2.0944</upper>
          <effort>300</effort>
          <velocity>10</velocity>
        </limit>
        <dynamics>
          <damping>0.0</damping>
          <friction>0</friction>
          <spring_reference>0</spring_reference>
          <spring_stiffness>0</spring_stiffness>
        </dynamics>
      </axis>
    </joint>
    <link name="iiwa_link_3">
      <pose relative_to="iiwa_joint_3"/>
      <inertial>
        <pose>0 0.03 0.13 0 0 0</pose>
        <mass>3.5</mass>
        <inertia>
          <ixx>0.025</ixx>
          <ixy>0</ixy>
          <ixz>0</ixz>
          <iyy>0.0238</iyy>
          <iyz>0</iyz>
          <izz>0.0076</izz>
        </inertia>
      </inertial>
      <visual name="iiwa_link_3_visual">
        <geometry>
          <mesh>
            <scale>1 1 1</scale>
            <uri>../meshes/visual/link_3.obj</uri>
          </mesh>
        </geometry>
        <material>
          <diffuse>0.4 0.4 0.4 1.0</diffuse>
        </material>
      </visual>
      <visual name="iiwa_link_3_visual_band">
        <geometry>
          <mesh>
            <scale>1 1 1</scale>
            <uri>../meshes/visual/band.obj</uri>
          </mesh>
        </geometry>
        <material>
          <diffuse>0.6 0.6 0.6 1.0</diffuse>
        </material>
      </visual>
      <visual name="iiwa_link_3_visual_kuka">
        <geometry>
          <mesh>
            <scale>1 1 1</scale>
            <uri>../meshes/visual/kuka.obj</uri>
          </mesh>
        </geometry>
        <material>
          <diffuse>0 0 0 1</diffuse>
        </material>
      </visual>
      <gravity>1</gravity>
      <velocity_decay/>
      <self_collide>0</self_collide>
    </link>
    <joint name="iiwa_joint_3" type="revolute">
      <pose relative_to="iiwa_link_2">0 0.2045 0 1.570796326794897 0 3.141592653589793</pose>
      <child>iiwa_link_3</child>
      <parent>iiwa_link_2</parent>
      <axis>
        <xyz>0 0 1</xyz>
        <limit>
          <lower>-2.96706</lower>
          <upper>2.96706</upper>
          <effort>300</effort>
          <velocity>10</velocity>
        </limit>
        <dynamics>
          <damping>0.0</damping>
          <friction>0</friction>
          <spring_reference>0</spring_reference>
          <spring_stiffness>0</spring_stiffness>
        </dynamics>
      </axis>
    </joint>
    <link name="iiwa_link_4">
      <pose relative_to="iiwa_joint_4"/>
      <inertial>
        <pose>0 0.067 0.034 0 0 0</pose>
        <mass>3.5</mass>
        <inertia>
          <ixx>0.017</ixx>
          <ixy>0</ixy>
          <ixz>0</ixz>
          <iyy>0.0164</iyy>
          <iyz>0</iyz>
          <izz>0.006</izz>
        </inertia>
      </inertial>
      <visual name="iiwa_link_4_visual_grey">
        <geometry>
          <mesh>
            <scale>1 1 1</scale>
            <uri>../meshes/visual/link_4_grey.obj</uri>
          </mesh>
        </geometry>
        <material>
          <diffuse>0.4 0.4 0.4 1.0</diffuse>
        </material>
      </visual>
      <visual name="iiwa_link_4_visual_orange">
        <geometry>
          <mesh>
            <scale>1 1 1</scale>
            <uri>../meshes/visual/link_4_orange.obj</uri>
          </mesh>
        </geometry>
        <material>
          <diffuse>1.0 0.423529411765 0.0392156862745 1.0</diffuse>
        </material>
      </visual>
      <gravity>1</gravity>
      <velocity_decay/>
      <self_collide>0</self_collide>
    </link>
    <joint name="iiwa_joint_4" type="revolute">
      <pose relative_to="iiwa_link_3">0 0 0.2155 1.570796326794897 0 0</pose>
      <child>iiwa_link_4</child>
      <parent>iiwa_link_3</parent>
      <axis>
        <xyz>0 0 1</xyz>
        <limit>
          <lower>-2.0944</lower>
          <upper>2.0944</upper>
          <effort>300</effort>
          <velocity>10</velocity>
        </limit>
        <dynamics>
          <damping>0.0</damping>
          <friction>0</friction>
          <spring_reference>0</spring_reference>
          <spring_stiffness>0</spring_stiffness>
        </dynamics>
      </axis>
    </joint>
    <link name="iiwa_link_5">
      <pose relative_to="iiwa_joint_5"/>
      <inertial>
        <pose>0.0001 0.021 0.076 0 0 0</pose>
        <mass>3.5</mass>
        <inertia>
          <ixx>0.01</ixx>
          <ixy>0</ixy>
          <ixz>0</ixz>
          <iyy>0.0087</iyy>
          <iyz>0</iyz>
          <izz>0.00449</izz>
        </inertia>
      </inertial>
      <visual name="iiwa_link_5_visual">
        <geometry>
          <mesh>
            <scale>1 1 1</scale>
            <uri>../meshes/visual/link_5.obj</uri>
          </mesh>
        </geometry>
        <material>
          <diffuse>0.4 0.4 0.4 1.0</diffuse>
        </material>
      </visual>
      <visual name="iiwa_link_5_visual_band">
        <geometry>
          <mesh>
            <scale>1 1 1</scale>
            <uri>../meshes/visual/band.obj</uri>
          </mesh>
        </geometry>
        <material>
          <diffuse>0.6 0.6 0.6 1.0</diffuse>
        </material>
      </visual>
      <visual name="iiwa_link_5_visual_kuka">
        <geometry>
          <mesh>
            <scale>1 1 1</scale>
            <uri>../meshes/visual/kuka.obj</uri>
          </mesh>
        </geometry>
        <material>
          <diffuse>0 0 0 1</diffuse>
        </material>
      </visual>
      <gravity>1</gravity>
      <velocity_decay/>
      <self_collide>0</self_collide>
    </link>
    <joint name="iiwa_joint_5" type="revolute">
      <pose relative_to="iiwa_link_4">0 0.1845 0 -1.570796326794897 3.141592653589793 0</pose>
      <child>iiwa_link_5</child>
      <parent>iiwa_link_4</parent>
      <axis>
        <xyz>0 0 1</xyz>
        <limit>
          <lower>-2.96706</lower>
          <upper>2.96706</upper>
          <effort>300</effort>
          <velocity>10</velocity>
        </limit>
        <dynamics>
          <damping>0.0</damping>
          <friction>0</friction>
          <spring_reference>0</spring_reference>
          <spring_stiffness>0</spring_stiffness>
        </dynamics>
      </axis>
    </joint>
    <link name="iiwa_link_6">
      <pose relative_to="iiwa_joint_6"/>
      <inertial>
        <pose>0 0.0006 0.0004 0 0 0</pose>
        <mass>1.8</mass>
        <inertia>
          <ixx>0.0049</ixx>
          <ixy>0</ixy>
          <ixz>0</ixz>
          <iyy>0.0047</iyy>
          <iyz>0</iyz>
          <izz>0.0036</izz>
        </inertia>
      </inertial>
      <visual name="iiwa_link_6_visual_grey">
        <geometry>
          <mesh>
            <scale>1 1 1</scale>
            <uri>../meshes/visual/link_6_grey.obj</uri>
          </mesh>
        </geometry>
        <material>
          <diffuse>0.4 0.4 0.4 1.0</diffuse>
        </material>
      </visual>
      <visual name="iiwa_link_6_visual_orange">
        <geometry>
          <mesh>
            <scale>1 1 1</scale>
            <uri>../meshes/visual/link_6_orange.obj</uri>
          </mesh>
        </geometry>
        <material>
          <diffuse>1.0 0.423529411765 0.0392156862745 1.0</diffuse>
        </material>
      </visual>
      <gravity>1</gravity>
      <velocity_decay/>
      <self_collide>0</self_collide>
    </link>
    <joint name="iiwa_joint_6" type="revolute">
      <pose relative_to="iiwa_link_5">0 0 0.2155 1.570796326794897 0 0</pose>
      <child>iiwa_link_6</child>
      <parent>iiwa_link_5</parent>
      <axis>
        <xyz>0 0 1</xyz>
        <limit>
          <lower>-2.0944</lower>
          <upper>2.0944</upper>
          <effort>300</effort>
          <velocity>10</velocity>
        </limit>
        <dynamics>
          <damping>0.0</damping>
          <friction>0</friction>
          <spring_reference>0</spring_reference>
          <spring_stiffness>0</spring_stiffness>
        </dynamics>
      </axis>
    </joint>
    <link name="iiwa_link_7">
      <pose relative_to="iiwa_joint_7"/>
      <inertial>
        <pose>0 0 0.02 0 0 0</pose>
        <mass>1.2</mass>
        <inertia>
          <ixx>0.001</ixx>
          <ixy>0</ixy>
          <ixz>0</ixz>
          <iyy>0.001</iyy>
          <iyz>0</iyz>
          <izz>0.001</izz>
        </inertia>
      </inertial>
      <visual name="iiwa_link_7_visual">
        <geometry>
          <mesh>
            <scale>1 1 1</scale>
            <uri>../meshes/visual/link_7.obj</uri>
          </mesh>
        </geometry>
        <material>
          <diffuse>0.4 0.4 0.4 1.0</diffuse>
        </material>
      </visual>
      <gravity>1</gravity>
      <velocity_decay/>
      <self_collide>0</self_collide>
    </link>
    <joint name="iiwa_joint_7" type="revolute">
      <pose relative_to="iiwa_link_6">
        0 0.081 0 -1.570796326794897 3.141592653589793 0
      </pose>
      <child>iiwa_link_7</child>
      <parent>iiwa_link_6</parent>
      <axis>
        <xyz>0 0 1</xyz>
        <limit>
          <lower>-3.05433</lower>
          <upper>3.05433</upper>
          <effort>300</effort>
          <velocity>10</velocity>
        </limit>
        <dynamics>
          <damping>0.0</damping>
          <friction>0</friction>
          <spring_reference>0</spring_reference>
          <spring_stiffness>0</spring_stiffness>
        </dynamics>
      </axis>
    </joint>
    <static>0</static>
    <plugin name="gazebo_ros_controller" filename="libgazebo_ros_control.so">
      <robotNamespace>/iiwa</robotNamespace>
    </plugin>
  </model>
</sdf>

The "Context"

context = plant.CreateDefaultContext()
print(context)

In breakouts today: try "peer programming"

  • One person shares their screen / open colab notebook.
    • Make a new code cell and edit (in the existing notebook).
    • Can save to your google drive when you're done.
  • Paste visualizer URL in the chat.
  • Everyone can view the same scene on your own machines.

Meshcat tips and tricks

You can save an image using the controls.

And view any animations here

Questions for the breakout

  • If we remove the "weld" joint, then where will the hand end up relative to the base at time 5.0?
    • Hint: There will be more positions to set.
    • Adding [1, 0, 0, 0, 0, 0, 0] to the start will do it!  (six zeros)

 

  • Can you find some joint angles to make the "wrist" of the robot just touch the ground?

Time to experiment

(Zoom breakout rooms; lecture will continue in ~15 minutes)

Questions:

  1. If we remove the "weld" joint, then where will the hand end up relative to the base at time 5.0?
  2. Can you find some joint angles to make the "wrist" of the robot just touch the ground?

Peer-programming idea:

  • One person shares their screen / open colab notebook.
    • Make a new code cell and edit (in the existing notebook).
    • Can save to your google drive when you're done.
  • Paste visualizer URL in the chat.
  • Everyone can view the same scene on your own machines.

Will ask for volunteers to share their meshcat window when we regroup.

http://personalrobotics.stanford.edu/