All projects

RobotStudio Digital Twin

A digital twin of a class workcell in ABB RobotStudio, with self-modeled equipment, a working gripper, ball physics, and a RAPID pick-and-place program.

Role
CAD, simulation logic, and robot programming
Year
2025
Status
Complete
Context
EMSI 320 - Modern Automation
Rev
A
The simulation running. Move your cursor over the video to see the RAPID code behind it.

Key numbers

Balls placed
11
Robot moves
67
Made by me
Everything but the robot

Overview

This is a digital twin of a class workcell, built in ABB RobotStudio. Everything in the station except the robot was made by me, including the table, the pedestal, the conveyor belts, the ball slides, the balls, and the gripper setup.

What I built

  • CAD: I modeled the station’s components in SolidWorks and brought them into RobotStudio.
  • Gripper logic: I programmed the gripper’s logic so it works the way it should when grabbing a ball.
  • Ball physics: The balls behave physically, including bouncing, using RobotStudio’s physics controls.
  • Robot program: I coded the robot in RAPID to pick the balls and place them on the cardboard tray in the order they appear.

Matching the real workcell

I took measurements in the lab so the model would match the real cell. The table and pedestal are modeled to their real dimensions, and the conveyor belts are exact copies of the ones in the lab.

The simulation isn’t perfect. Everything had to be done within a tight deadline, from taking the measurements to designing the ball slides and table to programming the robot.

The code

This is the start of the routine. PulseDO makes a new ball appear, Set Att attaches a ball to the gripper, and Reset Att releases it. It’s copied unchanged from the final program, and the download has the full version.

Module1.mod · PROC Blue1 Download full program
PROC Blue1()
    PulseDO Blue;
    Set di10_2;
    MoveJ PickBlueBall,v400,fine,Grippa_1\WObj:=Pallet;
    Reset di10_2;
    Set Att;
    MoveL Target_10,v400,fine,Grippa_1\WObj:=Pallet;
    MoveL Target_20,v400,fine,Grippa_1\WObj:=Pallet;
    MoveL Target_30,v400,fine,Grippa_1\WObj:=Pallet;
    PulseDO Red;
    MoveL PlaceBlueBall,v400,fine,Grippa_1\WObj:=Pallet;
    Set di10_2;
    Reset Att;
    MoveL Target_40,v400,fine,Grippa_1\WObj:=Pallet;
    MoveL Target_60,v400,fine,Grippa_1\WObj:=Pallet;
    MoveL Pickred,v400,fine,Grippa_1\WObj:=Pallet;
  • ABB RobotStudio
  • ABB RAPID
  • Smart Components
  • SolidWorks