top of page

Accessible Robotic Education

BioRobotics Lab, University of Washington

customLinkArm.jpeg

Background

EE543 "Models of Robot Manipulation" is a graduate-level course at the University of Washington focusing on the kinematic modeling of serial manipulators. Traditionally, the course relied on paper-and-pencil exams. The instructing team now aims to incorporate hands-on projects to enhance the learning experience.

Objective

A course project idea is needed that enables students to apply their knowledge of robot arm kinematics. The project should include a simple servo system with a Python API, allowing students to implement forward and inverse kinematics. Additionally, a configurable robot arm structure is required so that students can experiment with various robot link geometries.

Contribution

  • Developed a low-cost robot arm kit under $100, including a power supply, servo controller, servo motors, and mechanical structures.

  • Designed a lightweight motor controller with joint velocity control capability and PC-side Python  API.

  • Created assembly instructions, and procedures to extract D-H parameters from the CAD model.

Skills

  • CAD(Creo)

  • 3D Printing

  • Servo Motor Control

  • Pulse-Width Modulation

  • I2C and Serial Communication

  • Arduino

  • Python

System Components Diagram

The system consists of four components: a laptop, an Arduino Uno, a PCA9685 PWM controller with a power supply, and MG996 servo motors mounted on the arm.

The user specifies the target position and velocity for each joint using the "goto()" function, which then generates a series of position commands sent through the serial port.

The Arduino board converts these position commands into duty cycle counts for PWM generation and sends them to the PCA9685 board via I2C communication.

The PCA9685 chip then generates 50Hz PWM signals with the appropriate duty cycle to drive the servo motors to the desired positions.

SerialCommSignalDiagram.png

Communication and Velocity Control

Whenever the "goto()" function is called, the Python API calculates the difference between the current and target joint positions, generating the necessary position increments for each joint based on their velocities and the serial communication frequency.

​

The position commands are then transmitted through the serial port at the specified frequency. This method relies on consistent and periodic serial communication for smooth velocity control. Experimental results indicate that the system maintained this consistency only when the communication frequency was below 30Hz—sufficient for the servo robot arm, but underscoring the critical importance of real-time capability in robotic control systems.

​

​

Playground For Robot Geometry

To enhance the project's complexity, three types of custom linkages are designed for students to explore different robot geometries:

  1. linkage with offset

  2. linkage with offset and 45-degree twisting

  3. linkage with offset and 45-degree bending

Incorporating these linkages into the robot structure complicates the DH parameters, as standard motor frames typically allow only a 90-degree or pure offset between joint axes.

EE543ArmCustomLinkBend.PNG
EE543ArmFrameAssignment.png

Modeling the Kinematics

We provide students with a step-by-step guide to extracting the DH parameters of their custom-built robot arms. This enables them to construct both forward and inverse kinematics models, facilitating the transition from joint-space to task-space control using the Python API.

©Copyright, Tin Chiang 2024

bottom of page