Complete Beginner-Proof Workflow (Tested & Practical)
This document provides a complete, correct, and repeatable workflow for:
- Installing ROS 2 Humble
- Creating a ROS 2 workspace
- Creating a robot description package
- Exporting a robot model from Autodesk Fusion 360 to URDF
- Fixing common CAD → URDF problems
- Visualizing the robot in RViz2
- Debugging URDF, TF, RViz, mesh, and launch errors
- Zero prior ROS knowledge
- You are using Ubuntu (native or WSL)
- You want reliable results, not shortcuts
- Ubuntu 22.04 (recommended)
- Ubuntu on WSL2 is acceptable
- Internet connection
- At least 8 GB RAM recommended
- GPU acceleration helps but is not required
sudo apt update
sudo apt install -y locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8sudo apt install -y software-properties-common
sudo add-apt-repository universe
sudo apt update
sudo apt install -y curl
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key \
-o /usr/share/keyrings/ros-archive-keyring.gpgecho "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] \
http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" | \
sudo tee /etc/apt/sources.list.d/ros2.list > /dev/nullsudo apt update
sudo apt install -y ros-humble-desktopecho "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrcros2 --versionExpected Output:
ros2 cli version: 0.xx.x
mkdir -p ~/ros2_ws/src
cd ~/ros2_wscolcon buildsource install/setup.bashNote: ROS only detects packages inside a sourced workspace.
ros2 pkg listExpected: Many default ROS packages listed with no errors
cd ~/ros2_ws/src
ros2 pkg create robot_description --build-type ament_cmakerobot_description/
├── CMakeLists.txt
├── package.xml
cd robot_description
mkdir urdf meshes launch rvizMandatory rules:
- Each moving part = one Component
- Base body = grounded
- Use revolute joints for wheels
- Joint axes must be correct
- Avoid spaces in component names
Repository: https://github.com/syuntoku14/fusion2urdf
In Fusion 360:
Tools → Add-Ins → Scripts and Add-Ins → Add
Enable:
- URDF/Xacro export
- Mesh export
- Package structure export
Export result:
ROS_description/
├── urdf/
├── meshes/
├── CMakeLists.txt
├── package.xml
cp -r /mnt/c/Users/<your_name>/Downloads/ROS_description ~/ros2_ws/src/ls ~/ros2_ws/src/ROS_descriptionFusion exports in millimeters.
Fix in URDF/Xacro:
scale="0.001 0.001 0.001"Symptom: Robot invisible or extremely tiny in RViz.
URDF must contain only one <robot> element.
Check:
xacro ROS.xacro❌ Bad: Revolute 1
✅ Good: revolute_1
✅ Correct:
package://robot_description/meshes/file.stl❌ Incorrect:
/home/user/meshes/file.stlcd ~/ros2_ws
colcon build
source install/setup.bashros2 pkg list | grep robot_descriptionsudo apt install -y \
ros-humble-robot-state-publisher \
ros-humble-joint-state-publisher \
ros-humble-joint-state-publisher-gui \
ros-humble-rviz2 \
ros-humble-xacroCreate file:
nano launch/display.launch.pyAdd content:
from launch import LaunchDescription
from launch_ros.actions import Node
from launch.substitutions import Command
from ament_index_python.packages import get_package_share_directory
import os
def generate_launch_description():
pkg = get_package_share_directory('robot_description')
xacro = os.path.join(pkg, 'urdf', 'robot.xacro')
return LaunchDescription([
Node(
package='robot_state_publisher',
executable='robot_state_publisher',
parameters=[{'robot_description': Command(['xacro ', xacro])}]
),
Node(
package='joint_state_publisher_gui',
executable='joint_state_publisher_gui'
),
Node(
package='rviz2',
executable='rviz2'
)
])ros2 launch robot_description display.launch.py- Fixed Frame:
base_link - Add → RobotModel
- Add → TF
- Add → Grid
- Wrong fixed frame
- Scale too small
- No TF published
- No joint_state_publisher running
ls install/robot_description/share/robot_description/meshessource install/setup.bashros2 run tf2_tools view_framescheck_urdf robot.urdf-
ros2 pkg listshows robot_description -
check_urdfpasses - RViz opens without errors
- Robot visible
- Joints move via GUI
- TF tree valid
- RViz is for runtime understanding, not simulation
- Gazebo is required for physics
- URDF correctness is critical
- Always verify scale and TF first
This workflow is production-correct and scalable.