Prereqs: 1. Have ROS1 Noetic installed 2. sudo apt-get install ros-noetic-urdf-tutorial Part 1: Building a Visual Robot Model with URDF from Scratch Docs: https://wiki.ros.org/urdf/Tutorials/Building%20a%20Visual%20Robot%20Model%20with%20URDF%20from%20Scratch 1. Initialize URDF with 1 shape - roslaunch urdf_tutorial display.launch model:='$(find urdf_tutorial)/urdf/01-myfirst.urdf' 2. Adding another shape and a fixed joint - roslaunch urdf_tutorial display.launch model:='$(find urdf_tutorial)/urdf/02-multipleshapes.urdf' - tag defines the relative pose of the child link to the base link 3. Fixing orientation of child part and physical part - roslaunch urdf_tutorial display.launch model:='$(find urdf_tutorial)/urdf/03-origins.urdf' - tag defines how the physical part is positioned relative to the child link 4. Changing the material of the parts - roslaunch urdf_tutorial display.launch model:='$(find urdf_tutorial)/urdf/04-materials.urdf' 5. Adding remaining parts - roslaunch urdf_tutorial display.launch model:='$(find urdf_tutorial)/urdf/05-visual.urdf' Part 2: Building a Movable Robot Model with URDF Docs: https://wiki.ros.org/urdf/Tutorials/Building%20a%20Movable%20Robot%20Model%20with%20URDF 1. Updating the urdf with joints so that the links can move - roslaunch urdf_tutorial display.launch model:='$(find urdf_tutorial)/urdf/06-flexible.urdf' - A continuous joint is a revolute joint that takes values from -inf to inf (e.g., head and wheels) - A revolute joint has limits for the possible angles - A prismatic joint only has translation with limits on how many meters the link can translate - The tutorial takes input values from the sliders and it publishes them to the /joint_states topic, which Rviz subscribes to actually move the parts Part 3: Adding Physical and Collision Properties to a URDF Model Docs: https://wiki.ros.org/urdf/Tutorials/Adding%20Physical%20and%20Collision%20Properties%20to%20a%20URDF%20Model 1. Before we can deploy our urdf into a simulator like Gazebo, we need to define some physical properties - tag defines the shape of the collision boundary of a part - Using simpler shapes to represent the collision boundary of complex mesh shapes is less computationally expensive - tag defines the mass and inertia parameters of the part Part 4: Using a URDF in Gazebo Docs: https://wiki.ros.org/urdf/Tutorials/Using%20a%20URDF%20in%20Gazebo 1. Launch Gazebo with the urdf of the robot loaded and let a controller publish twist commands to move the robot in the simulator - roslaunch urdf_sim_tutorial 13-diffdrive.launch