Teaching

  • EGN4912 Reliable and Safe Autonomous Racing (Spring 2024)

    This is a Course-based Undergraduate Research Experience (CURE) course aimed to provide hands-on research experience in a lab setting. 

    This course revolves around building a small-scale autonomous racing car that can navigate a circular track reliably and safely despite unexpected environment changes (e.g., different illumination or previously unseen obstacles) and mechanical degradations (e.g., slippery surface or depleted battery). Specifically, these 1/16th to 1/10th-scale racing cars are based on commercial RC hardware and equipped with a camera or a lidar sensor. Our deep learning-based software runs on a Linux system, which is deployed on an NVidia Jetson platform, and sends commands to an electronic speed controller that actuates the car’s motor and servos.

    To be successful, this end-to-end robotic development requires diverse expertise from mechanical, electrical, and computing domains. Undergraduate students should expect to be assigned tasks that match their initial skills and also develop new competencies along the way. In the long term, autonomous racing cars will serve as a physical platform for evaluating and demonstrating the latest research of the TEA (Trustworthy Engineered Autonomy) Lab in predicting and validating the safety of autonomous systems. The skills and knowledge developed in our lab can be applied to a broad range of other autonomous systems and robots. 

    Under the supervision of Dr. Ivan Ruchkin and experienced student mentors, undergraduate students in this course will (i) assemble and configure the mechanical and electrical hardware of racing cars, (ii) program and train perception and control components for racing cars, (iii) assist comprehensive literature search and review, (iv) participate in weekly engineering meetings and research discussions. Depending on the circumstances, undergraduate students will also have an opportunity to contribute to research publications as co-authors.

    Credits: 0 – 3.

    Instructors

    • Ivan Ruchkin, faculty
    • Ao Wang, graduate mentor
    • Sam Jhong, graduate mentor
    • Nathan Norohna, graduate mentor 
    • Lorant Domokos, undergraduate mentor
    • Yuang Geng, graduate meta-mentor
    • Zhenjiang Mao, graduate meta-mentor
  • EEL4837 Programming for Electrical Engineers II (Spring 2023)

    This course covers the fundamentals of data structures and algorithms, including lists, queues, stacks, divide-and-conquer, dynamic programming, trees, tables, graphs, and recursive techniques. It also investigates the role of specific data structures in electrical engineering applications.

    Programming has become an essential component of virtually every aspect of Engineering.  However, writing correct and efficient programs requires an understanding of the underlying foundations, including implementation, manipulation, and analysis of structured data, understanding how algorithms are built on top of such data, and navigating trade-offs between program performance and resource constraints. This course covers the foundations of programming specifically targeted toward Electrical Engineers. It will cover the implementation and use of data structures in solving programming problems, including queues, trees, tables, and graphs.  Algorithm development including recursive techniques will be discussed, and several algorithmic design techniques (greedy, dynamic programming, branch and bound) will be presented.  The course will include excursions illustrating the use of these techniques in a variety of Electrical Engineering domains.

    Credits: 3. 

    The complete syllabus can be found here.

  • EEL6935 Safe Autonomous Systems (Fall 2022)

    This course will teach mathematical and algorithmic techniques and tools for building safe autonomous systems, from unmanned drones to self-driving cars to medical devices. 

    The course is split into three modules: 

    1. Systems: how to understand and formally represent a complex autonomous system? Mathematical formalisms for dynamical, probabilistic, and hybrid systems.
    2. Autonomy: how to enable autonomous operation in a challenging environment? Data-driven components, probabilistic graphical models, neural networks, errors/robustness of learned models, learned perception/control.
    3. Safety: how to ensure that an autonomous system behaves safely? Logical specifications of safety, verification of system models and learned components, safe planning and control, temporal and confidence monitoring.

    Credits: 3.

    See the syllabus for details. Feel free to reach out if you have any questions about the course or your participation in it.

    If you are interested in the teaching materials, please reach out as well.

Pre-UF Courses

During my time at Carnegie Mellon and UPenn, I took on various roles in several undergraduate and graduate courses.

Computer Systems Programming CIT 595 (UPenn)

Role: co-instructor.
Semesters: Spring 2021.
Students: Masters with non-CS backgrounds and junior/senior undergraduate students with non-CS majors, ~65.
Responsibilities: (re)designing a course, giving lectures, designing teaching activities, managing a team of 7 TAs.

Data-Driven/IoT Computing: Advanced Topics in Computing Systems CIS 640 (UPenn)

Role: co-instructor.
Semesters: Spring 2020.
Students: Masters and PhD students in computer science, ~15.
Responsibilities: designing a course, designing homeworks, supervising class projects and presentations, providing feedback and grading.

Foundations of Software Engineering 15-313 (CMU)

Roles: guest lecturer, volunteer contributor.
Semesters: Fall 2014.
Students: juniors and seniors, mostly majors in computer science and electrical and computer engineering, ~50.
Responsibilities: co-creating a unit devoted to software design and architecture, giving a lecture, creating a homework assignment.

Architectures for Software Systems 17-655 (CMU)

Roles: teaching assistant, volunteer contributor.
Semesters: Spring 2013, Spring 2014.
Students: Masters in software engineering, ~50.
Responsibilities: updating assignments and reading questions, grading, giving lectures and recitations, holding office hours.

Models of Software Systems 17-651 (CMU)

Role: volunteer contributor.
Semester: Fall 2013, Fall 2014.
Students: Masters in software engineering, ~40.
Responsibilities: designing a unit on Alloy, giving lectures, creating homeworks.

Principles of Software Construction 15-214 (CMU)

Role: teaching assistant.
Semester: Fall 2012.
Students: sophomores and juniors in computer science and electrical engineering, non-majors, ~90.
Responsibilities: designing and updating assignments, grading, coordinating TAs, giving recitations and labs, holding office hours.

Teaching Training

At UF, I have completed the First-Year Faculty Training Academy and various seminars by the Center for Teaching Excellence and the Center for Instructional Technology & Training.

At UPenn, I have attended the seminars of the Center for Teaching and Learning, which have been particularly helpful in transitioning to online teaching during the pandemic.

I have completed the CMU Eberly Center’s Future Faculty Program. This program helped me develop my personal teaching philosophy of learning games (not to be confused with gamification of learning), which you can read about in my teaching statement.