Erion Plaku is a Program Director at the U.S. National Science Foundation (NSF) in the Directorate for Computer and Information Science and Engineering (CISE) and the Division of Information and Intelligent Systems (IIS). At NSF, Dr. Plaku is part of the Robust Intelligence cluster and co-leads the National Artificial Intelligence Research Institutes program. Prior to joining NSF, Dr. Plaku was an Associate Professor in the Department of Computer Science at George Mason University (2020-2023) and in the Department of Electrical Engineering and Computer Science at the Catholic University of America (2010–2020). Dr. Plaku received his Ph.D. degree in Computer Science from Rice University (2008). He was a Postdoctoral Fellow in the Laboratory for Computational Sensing and Robotics at Johns Hopkins University (2008–2010).

Research CV Publications Teaching Activities Misc

Introduction to Robotics

This course aims to make accessible to students fundamental principles in classical and modern approaches related to robot motion planning and the representation and use of geometric models acquired from sensor data. Two common themes will run throughout the course:

These themes and the related algorithms will be presented in the context of practical applications arising in diverse areas such as mobile systems, navigation and exploration, robot manipulation, computer animation, video games, computational biology, and medicine.

Note: Many of the lectures are accompanied by demo programs to illustrate the various concepts and algorithms. Since some of these can be assigned as programming projects for grading purposes, I have not made them publicly available. If you are an instructor and are interested in the lectures/projects/exams, send an email to me to obtain LaTeX source files for the lectures/exams as well as solutions to the programming projects and additional support code to illustrate the various algorithms.

Syllabus & Lectures

Project 1: Bug Algorithms

[support code in C++ and Matlab]

Project 2: Potential Field Planning for Rigid Bodies and Manipulator Chains

[support code in C++ and Matlab]

Environment consists of a robot, a goal region represented as a circle, and several obstacles represented as circles as well. Graphical interface supports the dynamic addition and displacement of obstacles and goal. A new obstacle can be added at any time by pressing down the left button of the mouse. Each obstacle and the goal can be moved around by clicking inside them and holding the left button down while moving the mouse. To run the planner, user needs to press the key 'p' on the keyboard. Pressing 'p' again toggles between running and stopping the planner. User can change the radius of each obstacle and the goal by first pressing the key 'r' and then clicking inside an obstacle/goal, holding the left-button down while moving the mouse. Pressing 'r' again toggles between editing radius or moving the obstacles and the goal.

Implementation Notes: Rigid Body

Simulator provides access to goal center, goal radius, number of obstacles, current robot configuration (robot x, robot y, robot theta), and vertices of the polygon representing the robot. Simulator also computes the closest point on the i-th obstacle for any given point (x, y), see function ClosestPointOnObstacle

When computing the potential, it is recommended that you use each vertex of the polygon robot as a control point.

If using C++ support code, you should implement the function ConfigurationMove in the class RigidBodyPlanner. This function should return RigidBodyMove, which represents a small move (dx, dy, dtheta) by the robot. If using Matlab support code, you should implement the function RigidBodyPlanner.

Implementation Notes: Manipulator Chain

Environment consists of a 2d manipulator chain, a goal region represented as a circle, and several obstacles represented as circles as well. Simulator provides access to goal center, goal radius, number of obstacles, and start and end positions of each link in the chain. Simulator also computes the closest point on the i-th obstacle for any given point (x, y), see function ClosestPointOnObstacle Moreover, simulator also implements Forward Kinematics, see function FK.

When computing the potential, it is recommended that you use the end position of each chain link as a control point. You should follow a similar approach as in the case of rigid bodies. One difference is that in the case of the manipulator chain, the attractive potential should be computed only between the end effector (last point in the chain) and the goal and not between any intermediate links and the goal. In this way, the potential will guide the end effector and not the intermediate links toward the goal. The repulsive potential, as in the case of rigid bodies, should be computed between the end of each link and each obstacle.

Important: You can use an equivalent but easier to compute definition of the Jacobian. In this definition the partial derivative of the forward kinematics of the end position of the j-th joint with respect to the i-th joint angle with i <= j is given as

If using C++ support code, you should implement the function ConfigurationMove in the class ManipPlanner. This function should compute small moves for each link angle. If using Matlab support code, you should implement the function ManipPlanner.

Support Code: C++

Support Code: MATLAB

Project 3: Sampling-based Motion Planning

[support code in C++ and Matlab]

In this project, you will implement several sampling-based motion planners.

Environment consists of a robot, a goal, and obstacles (all represented as circles). Graphical interface supports the dynamic addition and displacement of obstacles and goal. A new obstacle can be added at any time by pressing down the left-button of the mouse. Each obstacle and the goal can be moved around by clicking inside them and holding the left-button down while moving the mouse. User can change the radius of each obstacle and the goal by first pressing the key 'r' and then clicking inside an obstacle/goal, holding the left-button down while moving the mouse. Pressing 'r' again toggles between editing radius or moving the obstacles and the goal.

First edit the scene and then run the planner. Do not make changes to the scene once the planner has started. Also do not change the initial position of the robot via the graphical interface, but use instead the input text file.

Pressing 'p' toggles between running and stopping the planner.

Support Code: C++

Support Code: MATLAB

Final Project

For the final project, you can work on your own or with at most two other students. Each team can select from the list of final projects described below or propose their own.

Illustrations of bug algorithms, potential fields, and sampling-based motion planners.

Bug0 algorithm

Bug1 algorithm

Bug2 algorithm

Potential field path planner for rigid bodies

Potential field path planner for articulated chain

Potential field path planner getting stuck in local minima

Potential field path planner with moving obstacles

Rapidly-exploring Random Tree (RRT) path planner

Expansive-Space Tree with Grid (ESTGrid) path planner

Phuong Pham: Motion planning with moving obstacles RRT combined with potential fields (in simulation)

Phuong Pham: Motion planning with moving obstacles (using the iRobot Create)

Phuong Pham: Motion planning with moving obstacles (using the iRobot Create)

Minh Le: Motion planning with multiple goals (in simulation)

Minh Le: Motion planning with multiple goals (using the iRobot Create)

Motion planning with differential constraints (second-order dynamics model of a differential drive)

Motion planning with differential constraints (second-order dynamics model of a car-like robot)