Carnegie Mellon University

Computer Systems  (18-612)

Parallel Computing (15-618)

This course was an introduction to think about how programs are executed in parallel. It talked about modern multicore and GPU architecture followed by various parallel programming models. Finally to optimize the implementation, we had to understand cache coherence and memory consistency models. Various frameworks like Intel SIMD, Cilk Plus, CUDA, OpenMP and MPI were explored and their advantages and drawbacks were discussed.

Our project targeted to use multiple frameworks and models for parallelizing path for robots in 2D and compare their performances on multiple maps and different hardware configurations. Details of the project can be found at: Parallel RRT path planning for robots.

Embedded System Software Engineering (18-642)

This course provides in-depth coverage of the topics that are essential to the success of embedded software projects based on case studies of industry project teams that have suffered or failed. I learnt about a variety of topics including: lightweight but high quality embedded software processes, technical best practices for embedded software, effective testing and validation, causes of software system failures, software for safety-critical systems, and embedded-specific aspects of software security. The course was a mixture of programming assignments, tool use experiences, and research questions to get hands-on experience at dealing with the types of problems that are encountered in industry embedded projects. This course  focuses on software quality, safety, and security skills that are required to make embedded systems that can handle the messiness of the real world and is all about getting ready to build industry-strength embedded projects. 

We implemented these tools on simple maze solving project. Details of the project can be found at: Maze Solver in ROS

Real-Time Embedded Systems (18-648)

I learnt the possible application of real time embedded systems in various domains. They range from household appliances, transportation and motion control systems, medical systems and devices, robotics, multimedia and mobile communications, videogames, energy generation distribution and management, to aerospace and defense systems. 

The course focused on the core concepts and principles underlying these systems, including resource management, scheduling, dependability and safety. Implications to multi-core platforms, SoCs, networks and communication buses along with mathematical models and analysis techniques were discussed. There was also a hands-on experience with implementing real-time embedded systems on raspberry pi. We developed our own scheduling algorithms in the linux kernel for various applications to get detailed understanding of hardware-software interfaces, concurrency and communications. Finally, there were application-level concepts such as signal processing, image processing, computer vision, sensor fusion and feedback control to give an overview of the breadth and depth of the subject. 

We implemented energy aware dynamic frequency scaling scheduling algorithm for multiple core in linux kernel. Details of the project can be foumd at: Energy Aware Multicore Scheduler

Computer Architecture and Systems (18-742)

Wireless Sensor Networks (18-748)

The course started with various sensor characteristics, classifications and limitations. Then it dove into the network stack going into detail of physical, MAC and network layers. Various MAC protocols and network routing protocols were compared, and the tradeoffs were studied. Clock synchronization being an essential part of distributed systems was studied. Some of the security implications were explored and few ways to mitigate it. 

We had to demonstrate the learnings with a course project. Our team implemented swarm robotics as an application of warehouse management. IMU and RFID sensors were used on each robot controlled by ARM microcontroller fitted with ESP-32 Bluetooth radio. The system was laid out as a star topology but we proposed an idea to implement a complete ad-hoc network without a central hub. Details of the project can be found at: Robot Networks

Non Linear Control (18-776)

This course provided an introduction to the analysis and design of nonlinear systems and nonlinear control systems, stability analysis using Lyapunov, input-output and asymptotic methods, and design of stabilizing controllers using a variety of methods selected from linearization, vibrational control, sliding modes, feedback linearization and geometric control.  

Finally, there was a project to bring this theory into practice. The goal was to compare the performance of linear control to that of nonlinear methods. We designed a baseline LQR controller for a quadcopter to allow it to hover and move to specified (x,y,z) co-ordinates. Then we designed a non-linear observer for a better state estimation that was then fed to the original LQR controller. Control algorithm development and tuning was done in MATLAB and the simulations were done in PX4 flight controller. Details of the project can be found at: Quadrotor Observer

Principles and Engineering Applications of AI (18-662)

Robot Autonomy (16-662)

This course was an excellent introduction to the world of robotic manipulators. It started with mathematics behind forward kinematics and inverse kinematics algorithms. The robotic language of URDF was also covered for robotic arms. We were able to perform hands on implementations of these algorithm on 7 DOF Franka Panda Arm after perfecting them in ROS simulations. Various gripping mechanisms and sensors were discussed used in research and industry setting. The course went on to discuss about sophisticated supervised and unsupervised learning algorithms for optimized robot manipulations and gripping.

We implemented a project titled Setting and Resetting environment. The goal was to enable the arm to pick objects from a box on a tray and vice versa using multiple image sensors. This would allow the robot to collect useful sensor data from grasping which can later be used for machine learning algorithms. We wanted to automate this tedious process with minimal human intervention. We had a novel approach of identifying probability of successful grasp and push the object around to a favorable position before attempting the grasp. The algorithm was showcased in Coppelia Sim environment and details of the project can be found at: Robot Grasping

Vishwakarma Institute of Technology

Semester I

Semester II

Semester III

Semester IV

Semester V

Semester VI

Semester VII

Honors - Reliability and Testing