Welcome to AutomaticAddison.com, your ultimate destination for diving into the fascinating world of robotics, ROS 2, and artificial intelligence, featuring a wide range of tutorials and step-by-step recipes designed to guide you from the basics to advanced applications in an easy-to-understand format. Keep building!
General
- Coordinate Frame Basics and the Right-Hand Rule of Robotics
- Coordinate Frames and Transforms for ROS-based Mobile Robots
Linux Fundamentals
- How to Install Ubuntu 24.04 Virtual Machine on a Windows PC
- Top 50 Linux Terminal Commands Every Roboticist Should Know
- The Complete Guide to Linux Fundamentals for Robotics
Python Fundamentals
- How to Install Python in Ubuntu Linux – ROS 2
- Getting Started with Python for Robotics Projects
- How to Create Basic Programs Using Python
- How to Make Decisions in Code Using Python
- How to Use Python’s Most Common Data Structures
- How to Write Loops in Python
- How to Use Python Range and Iterator Functions
- How to Process User Input and Strings in Python
- How to Write Functions in Python
- How to Handle Errors in Python
- How to Create Classes and Objects in Python
- How to Read and Write Files in Python
- How to Use Advanced Object-Oriented Python
- How to Use Python Multithreading and Regular Expressions
- How to Work with Python Databases & Other Advanced Features
C++ Fundamentals
- Getting Started with C++ for Robotics Projects
- How to Run C++ Code That Uses External Libraries
- How to Organize Your C++ Code with std Namespace
- How to Use cout and endl in C++
- How to Implement the main Function in C++
- How to Use Variables, Data Types, and Input/Output in C++
- How to Use Operators and Control Flow in C++
- How to Use Arrays, Vectors, and Strings in C++
- How to Use Functions and Pointers in C++
- How to Implement Object-Oriented Programming Basics in C++
- How to Generate Doxygen Comments for C++ Code
- How to Implement Advanced Object-Oriented Programming in C++
- How to Use Inheritance and Abstraction in C++
- How to Use Structs and Operator Overloading in C++
- How to Use Lambda Expressions and File I/O in C++
- How to Use Templates and Macros in C++
- How to Use Memory Management and Smart Pointers in C++
- How to Use Multithreading and Time Functions in C++
- How to Use the Standard Template Library (STL) in C++
- Working With Miscellaneous Topics in C++
ROS 2
Jazzy
Getting Started
- How to Install ROS 2 Jazzy
- Understanding DDS and the ROS_DOMAIN_ID Variable
- How to Create a Workspace in ROS 2 Jazzy
- How to Install and Configure Visual Studio Code for ROS 2
Beginner
- How to Create a ROS 2 Package – Jazzy
- How to Create a ROS 2 Python Publisher – Jazzy
- How to Create a ROS 2 C++ Publisher – Jazzy
- How to Create a ROS 2 Python Subscriber – Jazzy
- How to Create a Subscriber Node in C++ – Jazzy
- How to Create Unit Tests with Pytest – ROS 2 Jazzy
- How to Create Unit Tests with GTest – ROS 2 Jazzy
- Create and Visualize a Robotic Arm with URDF – ROS 2 Jazzy
- Create and Visualize a Mobile Robot with URDF – ROS 2 Jazzy
- Create Launch Files to Display URDF Files – ROS 2 Jazzy
- How to Simulate a Robotic Arm in Gazebo – ROS 2 Jazzy
- How to Simulate a Mobile Robot in Gazebo – ROS 2 Jazzy
Iron
Getting Started
- How to Install ROS 2 Iron on Ubuntu Linux
- How to Create a ROS 2 Workspace – Iron
- How to Create a ROS 2 Package – Iron
- ROS 2 Communication Basics: Publishers, Subscribers, Topics
- How to Create a ROS2 Python Publisher – Iron
- How to Create a ROS 2 Python Subscriber – Iron
- How to Create a ROS2 C++ Publisher – Iron
- How to Create a ROS 2 C++ Subscriber – Iron
- The Complete Guide to Parameters – ROS 2 Python
- The Complete Guide to Parameters – ROS 2 C++
Manipulation
- How to Create a URDF File of the A0509 by Doosan Robotics – ROS 2
- How to Create a URDF File of the Gen3 Lite by Kinova – ROS 2
- How to Create a URDF File of the UR3e Robotic Arm – ROS 2
- How to Create a URDF File of the WidowX 250 by Interbotix – ROS 2
myCobot 280 by Elephant Robotics
- How to Model a Robotic Arm With a URDF File – ROS 2
- How to Create a Launch File for a Simulated Robotic Arm – ROS 2
- How to Simulate a Robotic Arm in Gazebo – ROS 2
- How to Control a Robotic Arm Using ROS 2 Control and Gazebo
- How to Configure MoveIt 2 for a Simulated Robot Arm
- Complete Guide to the Moveit Setup Assistant for MoveIt 2
- Difference between Pilz, STOMP, and OMPL Planners
- How to Create Your First C++ MoveIt 2 Project
- How to Add and Plan Around Objects Using MoveIt 2
- Getting Started with the MoveIt 2 Task Constructor
- Create Alternative Paths Using the MoveIt Task Constructor
- Cartesian Path Planning Using the MoveIt Task Constructor
- Create Fallback Strategies Using the MoveIt Task Constructor
- Solve Inverse Kinematics Using the MoveIt Task Constructor
- Reusing Motion Plans Using the Moveit Task Constructor
- Pick and Place with the MoveIt Task Constructor for ROS 2
- Create a Pick and Place Task Using MoveIt 2 and Perception
Miscellaneous
- Robot State Publisher vs. Joint State Publisher
- Attributes of High-Quality ROS2-Based Systems
- Naming and Organizing Packages in Large ROS 2 Projects
- Organizing Files and Folders Inside a ROS 2 Package
- Topics vs. Services vs. Actions in ROS2-Based Projects
- ROS 2 Architecture Overview
- Autonomous Agricultural Robot Systems Design & Architecture
- URDF vs. SDF – Link Pose, Joint Pose, Visual & Collision
- How to Display the Path to a ROS 2 Package
- How to Save Your ROS 2 Project on GitHub
ROS 1
General
- What is the Difference Between rviz and Gazebo?
- How to Switch Between ROS 1 and ROS 2 in Ubuntu Linux
- Coordinate Frames and Transforms for ROS-based Mobile Robots
- How to Download a ROS Package from GitHub
Noetic
Fundamentals
- How to Install ROS Noetic Ninjemys on Ubuntu Linux
- ROS Noetic Ninjemys Basics – Part 1 of 2
- ROS Noetic Ninjemys Basics – Part 2 of 2
- How to List All Installed Packages in ROS Noetic
- How to Get a List of All Publicly Available ROS Packages in ROS Noetic
- How to Change Your Current Working Directory in ROS Noetic
- How to Create a New Package in ROS Noetic
- How to Build a Package in ROS Noetic
- Common ROS Package Commands in ROS Noetic
- How to Create a Publisher Node in ROS Noetic
- How to Create a Subscriber Node in ROS Noetic
- How to Build a Node in ROS Noetic
- How to Run a Node in ROS Noetic
- How to Create Custom Messages in ROS Noetic
- How to Publish and Subscribe to Custom Messages in ROS Noetic
- How to Create a Service in ROS Noetic
- How to Create a Launch File in ROS Noetic
- How to Find the Path of a Package in ROS Noetic
- How to List the Files Inside a Package in ROS Noetic
- ROS Parameters and the dynamic_reconfigure Package in ROS Noetic
- Working With ROS actionlib in ROS Noetic
- Working With ROS pluginlib in ROS Noetic
- Working With ROS nodelets in ROS Noetic
- Getting Started With Gazebo in ROS Noetic
- Working With tf2 in ROS Noetic
- Working With ROS and OpenCV in ROS Noetic
- Working With rosbags in ROS Noetic
- How to Create a Finite State Machine Using SMACH and ROS
Projects
- How to Move the Turtlesim Robot to Goal Locations – ROS
- How to Set Up the ROS Navigation Stack on a Robot
- How to Build a Simulated Mobile Robot Base Using ROS
- How to Build a Simulated Robot Arm Using ROS
- How to Build a Simulated Mobile Manipulator Using ROS
- How to Move a Simulated Robot Arm to a Goal Using ROS
- Setting Up the ROS Navigation Stack for a Simulated Robot
- How to Send a Simulated Robot to Goal Locations Using ROS
- How to Set Up and Control a Robotic Arm Using MoveIt and ROS
Robotics
General
- Definition of a Robot
- What Are the 3 Main Types of Robots?
- How Robots Help Us Explore Extreme Environments
- Revolutionizing Healthcare: The Future Impact of Robots
- Your Best Career Decision of the Next 50 Years
Generative AI
Coordinate Frames and Transformations
- Yaw, Pitch, and Roll Diagrams Using 2D Coordinate Systems
- How to Describe the Rotation of a Robot in 2D
- How to Describe the Rotation of a Robot in 3D
- How to Convert a Quaternion to a Rotation Matrix
- How To Multiply Two Quaternions Together Using Python
- How To Convert a Quaternion Into Euler Angles in Python
- How To Convert Euler Angles to Quaternions Using Python
Dynamics and Control
- PID Control Made Simple
- Impact of Different Sized Wheels on a Tripod-Wheeled Robot
- How To Derive the State Space Model for a Mobile Robot
- How To Derive the Observation Model for a Mobile Robot
- Extended Kalman Filter (EKF) With Python Code Example
- Linear Quadratic Regulator (LQR) With Python Code Example
- Combine the Extended Kalman Filter With LQR
Kinematics
- What is Robot Kinematics?
- How to Draw the Kinematic Diagram for a 2 DOF Robotic Arm
- How to Assign Denavit-Hartenberg Frames to Robotic Arms
- How to Find the Rotation Matrices for Robotic Arms
- How to Find Displacement Vectors for Robotic Arms
- How to Write Displacement Vectors in Code Using Python
- Find Homogeneous Transformation Matrices for a Robotic Arm
- How to Find Denavit-Hartenberg Parameter Tables
- Homogeneous Transformation Matrices Using Denavit-Hartenberg
- Coding Denavit-Hartenberg Tables Using Python
- Difference Between Forward Kinematics and Inverse Kinematics
- How to Do the Graphical Approach to Inverse Kinematics
- Review of Denavit-Hartenberg for Robotic Arms
- The Ultimate Guide to Jacobian Matrices for Robotics
- The Ultimate Guide to Inverse Kinematics for 6DOF Robot Arms
- What Are Parallel Manipulators?
Manipulation
DIY Robotic Arm
- How to Build a DIY Aluminium 6-DOF Robotic Arm From Scratch
- Robotic Arm With Vacuum Suction Cup for Pick and Place
- How to Build a 2 DOF Robotic Arm
- How to Convert Camera Pixels to Real-World Coordinates
- How to Convert Camera Pixels to Robot Base Frame Coordinates
- How To Perform a Pick and Place Task With a DIY SCARA Robot
Motion Planning
Motors
- How to Determine What Torque You Need for Your Servo Motors
- Calculate Pulses per Revolution for a DC Motor With Encoder
- How to Calculate the Velocity of a DC Motor With Encoder
- How to Connect DC Motors to Arduino and the L298N
- How to Calculate Wheel Velocities for a Differential Drive Robot
Localization
Path Planning
Wheeled Robots
Omni-directional Mobile Robot with Mecanum Wheels
- Force Vector Diagrams for an Omni-directional Mobile Robot
- Omni-Directional Wheeled Robot Simulation in Python
Self-Balancing Robot
Other Topics
Docker
Entrepreneurship
- How to Succeed in Technology: The 10,000 Experiment Rule
- The Secret to Tech Startup Success: Speed and Simplicity
- 5 Ways to Generate a Lot of Business Ideas
- How to Write a Business Plan for a Technology Project
Image Processing
- Biometric Fingerprint Scanner | Image Processing Applications
- How to Draw the Letter ‘E’ on an Image Using Scikit-Image
- Why Use CMOS Instead of CCD Sensors in Mobile Phones
- How to Create an Image Histogram Using OpenCV
- How to Annotate Images Using OpenCV
- Pros and Cons of Gaussian Smoothing
- How to Display an Image Using OpenCV
- How to Blend Multiple Images Using OpenCV
- How to Apply a Mask to an Image Using OpenCV
- Noise Reduction Using Mathematical Morphology vs. Convolution Filters
- What is the Difference Between Mathematical Morphology Filters and Convolution Filters?
- How to Estimate a Normalized Histogram for a 3D Image
- How to Do Histogram Matching Using OpenCV
- How the Sobel Operator Works
- How the Laplacian of Gaussian Filter Works
- How the Canny Edge Detector Works
- Detect the Corners of Objects Using Harris Corner Detector
- How To Draw Contours Around Objects Using OpenCV
- How To Create a NumPy Array
- How To Load and Write an Image Using OpenCV
- How To Detect Objects Using Semantic Segmentation
- How to Detect and Draw Contours in Images Using OpenCV
- Difference Between Histogram Equalization and Histogram Matching
- Image Feature Detection, Description, and Matching in OpenCV
Imitation Learning
Reinforcement Learning
- How Reinforcement Learning Works
- Value Iteration vs. Q-Learning Algorithm in Python Step-By-Step
- Boltzmann Distribution and Epsilon Greedy Search
- Combining Deep Neural Networks With Reinforcement Learning for Improved Performance
- Partial Observability and Reinforcement Learning
- Hierarchical Actions and Reinforcement Learning