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!
ROS 2
Prerequisites
- How to Install Ubuntu 22.04 Virtual Machine on a Windows PC
- The Complete Guide to Linux Fundamentals for Robotics
- C++ Fundamentals for Robotics
- How to Add an External C++ Library to Your Project
- Python Fundamentals for Robotics
- How to Install and Configure Visual Studio Code for ROS 2
- How to Upload a ROS 2 Project to GitHub
General
- 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 Install Ubuntu and VirtualBox on a Windows PC
Iron
Fundamentals
- 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
A0509 by Doosan Robotics
How to Create a URDF File of the A0509 by Doosan Robotics – ROS 2
Gen 3 Lite By Kinova Robotics
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
UR3e by Universal Robots
WidowX 250 by Interbotix
Galactic
Fundamentals
- How to Create a tf Listener Using ROS 2 and Python
- Connect Your Built-in Webcam to Ubuntu 20.04 on a VirtualBox
- How To Display Launch Arguments for a Launch File in ROS2
Navigation
- How to Send Goals to the ROS 2 Navigation Stack – Nav2
- How To Send a Goal Path to the ROS 2 Navigation Stack – Nav2
- How to Send Waypoints to the ROS 2 Navigation Stack – Nav 2
- How to Create an Indoor Delivery Robot – ROS 2 Navigation
- How to Load a New Map for Multi-Floor Navigation Using ROS 2
- How To Create a Straight Line Path Planner Plugin – ROS 2
- How to Navigate Within Preferred Lanes – ROS 2 Navigation
- How to Navigate With Keepout Zones – ROS 2 Navigation
- How to Run an Inspection With a Robot – ROS 2 Navigation
- How to Set Speed Limit Zones – ROS 2 Navigation
- How To Create an Object Following Robot – ROS 2 Navigation
- How To Use the Regulated Pure Pursuit Plugin – ROS 2
- How to Create a Battery State Publisher in ROS 2
- How To Create an Action in ROS 2 Galactic (Advanced)
- Go to a Goal Location Upon Low Battery – ROS 2 Navigation
- Automatic Docking to a Battery Charging Station – ROS 2
- Sensor Fusion Using the Robot Localization Package – ROS 2
- How to Add Ultrasonic Sensors to an SDF File for Gazebo
- How to Add a Depth Camera to an SDF File for Gazebo
- Auto-docking to Recharge Battery – ArUco Marker and ROS 2
Vision
- Getting Started With OpenCV in ROS 2 Galactic (Python)
- How to Create an ArUco Marker Using OpenCV Python
- How to Detect ArUco Markers Using OpenCV and Python
- How to Perform Pose Estimation Using an ArUco Marker
- How to Publish tf Between an ArUco Marker and a Camera
- Estimate ArUco Marker Pose Using OpenCV, Gazebo, and ROS 2
Foxy
Fundamentals
- How to Install ROS 2 Foxy Fitzroy on Ubuntu Linux
- How To Set up a ROS2 Project for Python – Foxy Fitzroy
- How To Write a ROS2 Publisher and Subscriber (Python) – Foxy
- How to Publish Goal Coordinates in ROS2
- Mastering Turtlesim in ROS 2 Foxy Fitzroy
- How to Create a Launch File in ROS 2 Foxy Fitzroy
- How to Record and Play Back Data in ROS 2 Foxy Fitzroy
- How to Create a Workspace | ROS 2 Foxy Fitzroy
- How to Create a Package | ROS 2 Foxy Fitzroy
- Create a Publisher and Subscriber in C++ | ROS 2 Foxy Fitzroy
- Create a Basic Publisher and Subscriber (Python) | ROS2 Foxy
- How to Create a Service and Client (C++) | ROS2 Foxy Fitzroy
- How to Create a Service and Client (Python) | ROS2 Foxy
- Getting Started With OpenCV in ROS 2 Foxy Fitzroy (Python)
- ROS 2 Tutorials – Foxy Fitzroy
- How to Install MoveIt 2 for ROS 2 Foxy Fitzroy
- How to Add a Python ROS2 Node to a C++ ROS 2 Package
Navigation
- How to Install ROS 2 Navigation (Nav2)
- Navigation and SLAM Using the ROS 2 Navigation Stack
- The Ultimate Guide to the ROS 2 Navigation Stack
- How to Use GPS With the Robot Localization Package – ROS 2
- How to Load a URDF File into RViz – ROS 2
- How to Convert a Xacro File to URDF and Then to SDF
- How to Load a World File into Gazebo – ROS 2
- Useful World Files for Gazebo and ROS 2 Simulations
- How to Load a URDF File into Gazebo – ROS 2
- How to Load a Robot Model (SDF Format) into Gazebo – ROS 2
Projects
- How to Make a Mobile Robot in Gazebo (ROS2 Foxy)
- How to Simulate a Robot Using Gazebo and ROS 2
- How to Install and Demo the Webots Robot Simulator for ROS 2
- How to Create a Simulated Mobile Robot in ROS 2 Using URDF
- Set Up the Odometry for a Simulated Mobile Robot in ROS 2
- Set Up LIDAR for a Simulated Mobile Robot in ROS 2
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
Melodic
Fundamentals
- How to Install ROS on Ubuntu Linux in 5 Minutes or Less
- Create a Hello World Project in ROS
- Launch the Turtlesim Robot Simulation in ROS
- How to Launch RViz and RQt in ROS
- How to Launch Gazebo in Ubuntu
- How to Create a ROS Workspace
- How to Create and Execute Publisher and Subscriber Nodes in ROS
- How to Create and Execute ROS Launch Files
- How to Visualize Nodes Using the RQt GUI Tool
- Implementing the ROS Turtlesim Project With rospy
Projects
- How to Connect Arduino to ROS 1
- How to Make an Autonomous Wheeled Robot Using ROS
- How to Launch the TurtleBot3 Simulation With ROS
- How to Create a ROS Package
- How to Build an Indoor Map Using ROS and LIDAR-based SLAM
- Visualize IMU Data Using the MPU6050, ROS, and Jetson Nano
- Visualize IMU Data Using the BNO055, ROS, and Jetson Nano
- How to Publish Wheel Encoder Tick Data Using ROS and Arduino
- How to Publish IMU Data Using ROS and the BNO055 IMU Sensor
- How to Publish LIDAR Data Using a ROS Launch File
- How to Control a Robot’s Velocity Remotely Using ROS
- How to Create an Initial Pose and Goal Publisher in ROS
- How to Publish Wheel Odometry Information Over ROS
- Sensor Fusion Using the ROS Robot Pose EKF Package
- How to Create a Map for ROS From a Floor Plan or Blueprint
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
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
Basic Wheeled Robot (Arduino)
- How to Build a Basic Wheeled Robot Base
- How to Wire the Batteries and Motors of a Basic Wheeled Robot
- How to Make an Autonomous Wheeled Robot Move | Arduino
- How to Make an Object Detection Robot | Arduino
- How to Make an Obstacle Avoiding Robot | Arduino
- How to Make a Remote Controlled Robot | Arduino
- How to Make an Autonomous Line-Following Robot | Arduino
- How to Add Lights to a Wheeled Robot | Arduino
- How to Add Sound to a Wheeled Robot | Arduino
- How to Build a Multi-Obstacle-Avoiding Robot Using Arduino
- Obstacle Avoiding Robot Using a DC Motor and Arduino
Basic Wheeled Robot (Raspberry Pi)
- How to Make a Wheeled Robot Using Raspberry Pi
- How to Make a Remote Controlled Robot Using Raspberry Pi
- How to Make an Obstacle Avoiding Robot Using Raspberry Pi
- How to Add Light to a Raspberry Pi Wheeled Robot
- How to Make an Object Tracking Robot Using Raspberry Pi
- How to Configure Raspberry Pi to Run Programs On Startup
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
Arduino
- Setting up the BNO055 Absolute Orientation Sensor
- How to Display a String as Morse Code on an LED Using Arduino
- How to Transmit Time and Temperature Using a TMP36 Sensor and Arduino
- How to Develop an Arduino-Based Optical Tachometer
- How to Capture Temperature and Humidity Using the ESP8266 Weather Kit
- When to Use Arduino Instead of Raspberry Pi for Your Projects
- How to Control a Servo Motor Using Arduino
- How to Control Multiple Servo Motors Using Arduino
CAD Design
Computer Vision
- Definition of Computer Vision
- Real-Time Object Tracking Using OpenCV and a Webcam
- How to Detect Pedestrians in Images and Video Using OpenCV
- How to Perform Camera Calibration Using OpenCV
- How to Detect Objects in Video Using MobileNet SSD in OpenCV
- How to Do Multiple Object Tracking Using OpenCV
- How to Determine the Orientation of an Object Using OpenCV
- The Ultimate Guide to Real-Time Lane Detection Using OpenCV
Deep Learning
Theory
- What is Deep Learning?
- How to Choose an Optimal Learning Rate for Gradient Descent
- Why Deep Learning Has Received So Much Attention Lately
- What are Deep Learning Methods Really Learning?
- Significance of the Misunderstanding of Deep Learning
- The Limitations of Deep Learning
- Artificial General Intelligence and Deep Learning’s Long-Run Viability
- How Does Quickprop Address the Vanishing Gradient Problem in Cascade Correlation?
- How Do Neural Networks Make Predictions?
Projects
- Artificial Feedforward Neural Network With Backpropagation From Scratch
- Real-Time Object Recognition Using a Webcam and Deep Learning
- Predict Vehicle Fuel Economy Using a Deep Neural Network
- Develop a Neural Network to Classify Handwritten Digits
- How to Detect and Classify Traffic Lights
- How to Detect and Classify Road Signs Using TensorFlow
- Human Pose Estimation Using Deep Learning in OpenCV
- How to Load a TensorFlow Model Using OpenCV
- How Can I Check My CUDA Version in Linux?
Docker
Embedded Systems
- What is the Shared Data Problem?
- Round-Robin vs Function-Queue-Scheduling | Embedded Software Architecture
- Mutex vs Semaphore Using a Gas Station Bathroom Analogy
- Queues vs Mailboxes vs Pipes for RTOSs
- Common Tools and Instrumentation for Embedded System Debugging
- UART vs I2C vs SPI
- Benefits of Cross Compiling from a Host Computer to the Raspberry Pi
- How to Control the Speed and Direction of a Small DC Motor
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
Machine Learning
Theory
- Why Most Machine Learning Books Suck
- Useful Metrics for 2-Class Classification Problems
- Naive Bayes Algorithm From Scratch | Machine Learning
- Occam’s Razor and Machine Learning
- What Is a Maximum Spanning Tree?
- K-Means Clustering and the Local Search Problem
- Latent Variables and Latent Variable Models
- Difference Between Maximum Likelihood and Maximum a Posteriori Estimation
- Five-Fold Stratified Cross-Validation
- Difference Between Recursion and Iteration
- Linear Separability and the XOR Problem
- Advantages of the K-Nearest Neighbors Algorithm
- Advantages of Decision Trees
- Advantages of K-Means Clustering
- How to Determine What Machine Learning Model to Use
- Propositional Rules, Logical Decision Trees, and the Satisfiability Problem
- The Difference Between Generative and Discriminative Classifiers
- Difference Between Supervised and Unsupervised Learning
Projects
- My Master’s Thesis
- Winnow2 Algorithm From Scratch | Machine Learning
- Stepwise Forward Selection Algorithm From Scratch
- K-means Clustering Algorithm From Scratch | Machine Learning
- K-Nearest Neighbors Algorithm From Scratch | Machine Learning
- Iterative Dichotomiser 3 (ID3) Algorithm From Scratch
- Logistic Regression Algorithm From Scratch
MATLAB
NVIDIA Jetson Nano
- How to Set Up the NVIDIA Jetson Nano Developer Kit
- How to Install ROS Melodic on the NVIDIA Jetson Nano
- How to Write a Python Program for NVIDIA Jetson Nano
- How to Write a C/C++ Program for NVIDIA Jetson Nano
- How to Blink an LED Using NVIDIA Jetson Nano
- How to Install OpenCV 4.5 on NVIDIA Jetson Nano
- How to Set Up a Camera for NVIDIA Jetson Nano
Raspberry Pi
- Setting up the Raspberry Pi 3 in 15 Minutes
- How to Blink an LED on Raspberry Pi 3 Model B+
- How to Read Input from a Push Button Switch on Raspberry Pi 3 Model B+
- 2-Way Communication Between Raspberry Pi and Arduino
- How To Install Ubuntu and Raspbian on Your Raspberry Pi 4
- How to Set Up Real-Time Video Using OpenCV on Raspberry Pi 4
- Motion Detection Using OpenCV on Raspberry Pi 4
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
Unmanned Aerial Vehicles
- How to Assemble the QWinOut DIY Radio-Controlled Quadcopter
- How to Stream Live Video Using Raspberry Pi
- How to Stream GPS Data Using Raspberry Pi
- How to Capture Roll, Pitch, and Yaw Data Using Raspberry Pi and Arduino
- How to Send Roll, Pitch, & Yaw Over Bluetooth | Raspberry Pi and Arduino
- How to Send Roll, Pitch, & Yaw Data Over I2C From Arduino to Raspberry Pi