Start here. This category contains how-to articles for Smart Manufacturing & Robotics projects. Every article answers one concrete question with prerequisites, numbered steps, working code and troubleshooting. Use the search box or browse the list below; use the tags to filter by hardware.
Found a mistake or have something to add? Reply to the article.
Universal Robots (UR): connecting from a PC / Python
- How to find and set the IP address for connecting a PC to a UR robot
- How to send and receive data between Python and a UR robot over a TCP/IP socket
- How to control a UR robot from Python with RTDE (ur_rtde library)
- How to set payload, center of gravity and tool center point on a UR robot at run-time
- How to use a UP Board as a companion computer for a UR robot
Universal Robots (UR): programming on the teach pendant
- How to create popups on a Universal Robots teach pendant
- How to build a custom URCaps interface for a UR teach pendant
- How to run a background thread on a UR robot
- How to set the payload and center of gravity on a UR e-Series robot
- How to define and switch between multiple TCPs on a UR robot
- How to add safety planes to a Universal Robot
- How to install and control a Robotiq gripper on a UR robot
Doosan: connecting from a PC / Python
- How to connect a Doosan robot to a PC over a TCP socket (DRL Studio and Python)
- How to send data in a custom format between Python and DRL Studio
- How to control a Doosan robot from Python using the API-DRFL wrapper
- How to use force control on a Doosan robot from DRL
- How to save freedrive coordinates as variables on a Doosan robot
Doosan: programming and hardware I/O
- How to mount a Doosan M1013 on a wall or ceiling
- How to move a Doosan robot with movej, movel, and asynchronous motion commands
- How to rotate the Doosan robot tool and avoid servo lock errors
- How to show pop-up messages on the Doosan teach pendant with tp_popup
- How to set up safety area (space) limits on a Doosan robot
- How to use the analog I/O ports on a Doosan robot
- How to connect a Doosan digital I/O port to a microcontroller using a transistor
- How to connect pneumatic valves, cylinders, grippers, and suction cups to a Doosan robot
- How to connect a weak-signal sensor to a Doosan robot via Arduino and Python
- How to connect a Cognex camera to a Doosan robot over TCP
Kawasaki, FANUC and general robot safety
- How to connect a Kawasaki robot to a Python program over TCP or UDP
- How to control a Kawasaki robot with the PromoBot Python class
- How to pause a Kawasaki robot on command using a background PC program
- How to create a custom GUI panel on a Kawasaki teach pendant
- How to structure FANUC teach pendant code for readability
- How to set up tool, jog, and user frames on a FANUC teach pendant
- How to use motion types, offsets, and speed registers on a FANUC teach pendant
- FANUC teach pendant buttons: quick reference
- Troubleshooting common FANUC robot errors
- How to avoid and recover from singularity errors on a 6-axis robot
- How to create a safe working environment for an industrial robot
ROS2
- How to install ROS2 Jazzy and MoveIt2 to control a Universal Robots cobot
- How to install ROS2 Humble and program a Doosan cobot in Python
Siemens PLC (TIA Portal)
- How to connect to a Siemens PLC from Python using Snap7
- How to connect to a PLC from Python using OPC UA
- How to connect a Siemens PLC to an Arduino over TCP or digital I/O
- How to control Festo pneumatic valves from a Siemens PLC
Camera-to-robot calibration
- Choosing a method to convert camera pixels to robot coordinates
- How to calibrate a camera and map pixels to world coordinates with a ChArUco board
- How to map camera coordinates to robot coordinates with a least-squares fit
- How to calibrate a fixed camera to a robot with a single ArUco marker
- How to do high-precision robot-camera calibration with ArUco markers
- How to convert a RealSense camera pixel to a 3D point and robot coordinates
- How to auto-calibrate a Cognex camera using fixed world points
- How to calibrate a camera and convert a pixel distance to a real-world distance
Cameras and OpenCV
- How to detect and generate fiducial markers, barcodes, QR codes and data matrix codes with OpenCV
- How to zoom into an image or video frame with OpenCV using array slicing
- How to detect multiple data matrix codes fast using threading in Python
- How to detect objects by colour using HSV filtering in OpenCV
- How to split a contour into separate regions with OpenCV
- How to detect transparent glass using a reference object and OpenCV
- How to segment objects with SAM 3 using text prompts in Python
- How to plan a basic vision-based quality control system
- How to install Intel RealSense librealsense and pyrealsense2 on a Raspberry Pi 5 (Ubuntu)
- How to grab, save and filter depth images with Intel RealSense in Python
- How to connect to a Daheng Imaging camera through Python
- How to get an image from a GenICam-compatible camera (e.g. a Genie Nano) using Harvester
- How to install Cognex In-Sight Explorer on Linux using Wine
Machine learning: YOLO and Roboflow
- How to annotate and label images in Roboflow for YOLO training
- How to train a YOLO object detection model with Roboflow and Ultralytics
- How to run a trained YOLO model on a webcam and save detections with OpenCV
- How to train a YOLO OBB model and get the center and angle of detections
- How to run YOLOv8 or YOLOv8-OBB detection within a region of interest (ROI)
- How to augment images and OBB labels to expand a YOLO training set
Python, GUIs, web dashboards and software practice
- How to use multiprocessing in Python to run camera, detection, and robot loops in parallel
- How to build a multi-client TCP server in Python
- How to build an industrial dashboard with Vue and Flask
- How to create a simple web interface for a system using Python and Flask
- How to create a graphical interface in Python with Tkinter
- How to style a Tkinter interface, and how to switch to CustomTkinter
- How to install and use Codeium and Pylance in VS Code
- How to prompt LLM coding agents for more reliable results
- Choosing a sensor to count objects passing through a chute or conveyor
- How to write a business case for a project
Arduino, Raspberry Pi and electronics
- How to connect an Arduino to Ethernet using an ENC28J60 module
- How to switch higher-voltage loads with an Arduino (relay, optocoupler, H-bridge)
- How to control an Arduino from Python over a serial connection
- How to communicate between a Raspberry Pi and an Arduino over serial
- How to set up a Raspberry Pi (with or without a monitor)
- How to run a Python script automatically on Raspberry Pi boot
- How to control the 5-finger Robot Hand from Arduino and Python
- How to set up ultrasonic and IR sensors for object detection on a conveyor
- How to drive a stepper motor with Arduino or Raspberry Pi
- How to design a PCB in KiCad
- How to build an electric safety box for components above 25V
- How to use the 230V power-outlet switch (PNOZ X7 relay)
- How to read a weight scale over RS-232/serial in Python
- How to print GS1 barcode labels on a Zebra printer with ZPL from Python
- How to tune a PID controller (best practice)
Conveyors, motors, inverters, pneumatics and end effectors
- How to wire a conveyor belt’s electrical box (frequency inverter, E-stop, direction control)
- How to control a conveyor belt over Modbus-RTU from Python (Mitsubishi FR-D720S inverter)
- How to set up an Invertek Optidrive E2 frequency inverter for a conveyor belt
- How to wire and configure a T-verter E2 frequency inverter for a conveyor belt
- How to set up basic control for an SEW Movitrac frequency inverter
- How to calculate motor power, RPM and torque for a conveyor belt
- How to choose parts and design shafts for a chain drive system
- How to design an air-cushion (frictionless) track
- Choosing between pneumatic and electric actuators
- How to control a Festo solenoid valve (VUVG-LK10-M52) from a UR robot
- How to set up a Festo vacuum sensor (SPAE, part 8001443) for suction cup feedback
- How to choose and use suction cups for picking up objects
- How to design and 3D-print a custom suction cup for a specific object
- How to automatically dispense a fixed amount of liquid with a pneumatic pinch valve
CAD, SolidWorks, 3D printing and laser cutting
- How to model a parametric coffee cup (beginner parametric CAD tutorial)
- How to model a 3D-printed press-fit bearing mount (intermediate parametric CAD tutorial)
- How to design parts for 3D printing in SolidWorks
- How to print on the BambuLab P1S 3D printer in the robot lab
- How to design a SolidWorks camera mount for the Intel RealSense D435
- How to set up item aluminum profiles in CAD using the item24 Engineering Tool
- How to use SolidWorks Design Study to estimate forces on an oddly shaped part
- How to perform a basic stress analysis on a CAD model in SolidWorks
- How to use mechanical mates (hinge) in SolidWorks assemblies
- How to track SolidWorks part versions by putting the version in the title block
- How to import ISO standard hardware from the SolidWorks Toolbox
- How to make a render in SolidWorks
- How to speed up your modelling process in SolidWorks
- How to design and export parts in SolidWorks for the workshop laser cutter
- How to make a 2D drawing from a 3D model in SolidWorks
- How to design a laser-cut wood finger joint (fingerbox) connection in Autodesk Inventor
- How to design a conveyor in CAD using free online part models