Nishanth Sundaran

I build safe, intelligent robots that work alongside people.

About me

Recent M.Eng. graduate, robotics and AI, in Cham, Bavaria.

Nishanth Sundaran
Now

Graduated 14 June 2026. Living in Germany and available immediately for full-time roles or a full-time internship leading to a permanent position.

Focus
I am a robotics and AI engineer based in Cham, Bavaria. I recently completed my M.Eng. in Artificial Intelligence for Smart Sensors and Actuators at Technische Hochschule Deggendorf, and my focus is robots that are safe and genuinely useful around people.
Thesis
My Master’s thesis delivered a complete human-robot interaction stack on a UR3e cobot: a 500 Hz hybrid position-admittance controller, an ISO/TS 15066 safety layer (Speed & Separation Monitoring, Power & Force Limiting, Hand Guiding), and YOLOv8 human detection on an Intel RealSense D435i, built in ROS 2 Humble and MoveIt 2 and validated on real hardware.
Since then
Since then I have focused on connecting foundation models to real robot bodies: a Claude tool-use agent that turns natural-language commands into MoveIt 2 pick-and-place plans, a self-hosted Qwen2.5-VL brain that drives both the Unitree G1 and H1 humanoids through one tool interface, and a G1 motion-imitation policy trained on human motion capture in JAX and MJX.
Most recently
Most recently I have been benchmarking vision-language-action models on LIBERO: reproducing SmolVLA, I traced a gap to the published result to a simulator rendering change and to open-loop action chunks, then trained a 52M-parameter ACT model on a laptop GPU that succeeds in 99% of 300 held-out episodes, against 92% for the 450M SmolVLA. A short assignment teleoperating two Franka arms for robot-learning data collection at AlphaIgnis showed me how such models are trained in practice.
Before robotics
Before robotics I worked as a project engineer on high-voltage power grids, in data analysis at Amazon, and as a remote ML intern applying computer vision to aerial imagery. I am now looking for roles in robotics software, humanoid robotics, VLA and embodied AI, or collaborative robotics, either full-time or as a full-time internship that leads to a permanent position.

Experience

From power engineering to collaborative robotics.

Sep 2025 to Jun 2026

Master’s Thesis Researcher

Technische Hochschule Deggendorf (THD), Cham, Germany

  • Developed a real-time hybrid position-admittance controller for safe physical human-robot interaction on a UR3e collaborative robot using ROS 2 and MoveIt 2
  • Designed and implemented an ISO/TS 15066-compliant safety system with three operational modes: Speed & Separation Monitoring, Power & Force Limiting, and Hand Guiding
  • Built a computer vision pipeline with Intel RealSense D435i for YOLOv8-based human detection, hand-eye calibration, and HSV-based object localisation with depth back-projection
  • Created a 13-state FSM for assistive lift-and-place tasks integrating autonomous grasping with human-guided placement via real-time force feedback

ROS 2, MoveIt 2, Python, OpenCV, YOLOv8, Intel RealSense, Gazebo, tf2

Dec 2023 to Nov 2024

Machine Learning Intern

Energy Future World, London, United Kingdom (Remote)

  • Applied computer vision to aerial imagery for tracking renewable energy infrastructure growth, achieving 85% detection accuracy
  • Developed image processing algorithms (edge detection, contrast enhancement) using OpenCV
  • Conducted pattern analysis and model training using Scikit-learn, NumPy, and Pandas

Python, OpenCV, Scikit-learn, NumPy, Pandas, Jupyter

Mar 2022 to Dec 2022

Process Associate

Amazon, Bangalore, India

  • Performed data analysis and auditing to identify process performance trends
  • Contributed to automation and system optimisation initiatives using data-driven forecasting

May 2019 to Dec 2021

Project Engineer

Power And Instrumentations Ltd, Gujarat, India

  • Analysed high-voltage power grid performance data to optimise reliability and identify failure patterns
  • Managed cost tracking, quality control, and resource allocation across multiple project sites

Projects

Humanoids, robot learning and safe manipulation, in simulation and on real hardware.

One Brain, Many Bodies: Humanoid Autonomy Stack

A self-hosted vision-language model plans; a compliant whole-body controller walks the Unitree G1 to a bench and fetches a block.

Walk, pick and place
17 of 20 runs
Falls while walking
0 in 30
Plan and control rate
1 / 500 Hz
Read the full write-up

Cross-embodiment humanoid autonomy stack in MuJoCo, driven by a self-hosted vision-language model (Qwen2.5-VL-3B, no cloud APIs) and a compliant whole-body controller. The VLM plans at ~1 Hz via tool-calling with Set-of-Mark visual grounding; the controller executes at ~500 Hz. The same brain drives Unitree G1 and H1 through one tool interface (only a per-robot config file changes); 22-DoF five-finger hands composed onto the H1 at load time via MjSpec. The G1 walks about 3 m to a bench, stops, picks a block and places it in a bin in 17 of 20 runs, using GPU-trained PPO walk-and-stop and stance policies trained on the states and arm motions the task really produces. Every policy is scored against human motion: torso lean while manipulating fell from 36° to 1.7°, foot lifts while standing by 97%, the gait runs at about 2 steps/s (human 1.9) with 0 falls in 30 walks, and the arm follows minimum-jerk paths.

Built with Python, PyTorch, MuJoCo, Qwen2.5-VL, PPO, tool use, Set-of-Mark, admittance control, differential IK, Unitree G1 and Unitree H1.

The same held-out episode, three policies: each places the tomato sauce in the basket.

LIBERO Imitation Study: VLA vs ACT vs Diffusion Policy

A 52M-parameter ACT model, trained on a laptop GPU for all ten LIBERO-Object tasks, beats the 450M-parameter SmolVLA over 300 held-out episodes.

Read the full write-up

Benchmark of a vision-language-action model (SmolVLA) against two imitation-learning policies, ACT and Diffusion Policy, on LIBERO-Object with LeRobot, all on a 6 GB RTX 3060 laptop GPU. Before training anything I reproduced the published SmolVLA checkpoint: it first scored 56% against a published 96%, and I traced the gap to a MuJoCo rendering change (pinning 3.3.2 restored it) and to open-loop action chunks (replanning every 10 actions brought it to the published level). I then trained one ACT model (52M) and one Diffusion Policy model (89M) on the same 454 demonstrations for all ten tasks, chose every setting on a separate dev split, and scored each policy on 300 held-out episodes (three seeds, re-seeded per episode so every policy faces identical episodes). Image augmentation lifted ACT from 74 to 99/100; over 300 episodes ACT reached 99.0%, ahead of SmolVLA at 92.3% and Diffusion Policy at 92.0% (paired McNemar, p < 0.001 for both). Two evaluation lessons: Diffusion Policy samples noise at inference and scored 81, 96 and 99 on the three seeds, so one seed is not enough; and GPU kernel autotuning made repeat runs differ by about 2 episodes in 100, so I made evaluation deterministic and re-measured everything, with repeat runs now matching episode for episode. A demo-count study shows how much data the recipe needs: 10 demonstrations per task give 74%, 20 give 91% and all ~45 give 99% on the same held-out episodes, and with little data the failures move from tall bottles to small, partly hidden boxes.

Built with LeRobot, PyTorch, SmolVLA, ACT, Diffusion Policy, LIBERO, MuJoCo, mixed-precision training and Python.

ACT, 52M, trained here
99.0 %
SmolVLA, 450M, published
92.3 %
Diffusion Policy, 89M, trained here
92.0 %
VLM planning loop, local Qwen2.5-VL with Set-of-Mark grounding
Same brain, two bodies: Unitree G1 and H1, only a config file changes
Side-by-side comparison: LAFAN1 human motion-capture reference on the left (speed 0.49 m/s, stride 0.46 m, cadence 1.07/s) and the trained Unitree G1 policy at cycle 7 on the right (speed 0.49 m/s, stride 0.39 m, cadence 1.52/s, 4.6B training steps), both walking in MuJoCo with overlaid gait metrics

G1 Motion Imitation: Learning Human Gait from Motion Capture

Speed, robot and human
0.48 / 0.49 m/s
Cadence
1.09 / 1.07 /s
Stride
0.43 / 0.46 m
Read the full write-up

DeepMimic-style motion imitation training the Unitree G1 to track LAFAN1 human mocap, running in JAX and MJX with PPO on a 6 GB laptop GPU at ~30,000 env-steps/s (9x the CPU baseline); 5.8B total training steps across 13 measured cycles. The resulting gait sits within 2 to 7% of the human reference on speed (0.48 vs 0.49 m/s), cadence (1.09 vs 1.07/s), stride (0.43 vs 0.46 m) and pelvis bounce. Found that PD position control reached in 5M steps what the reference torque-control recipe needed 300M for (~60x sample efficiency), and shipped four undocumented framework fixes upstream, including a silent JAX-scalar vs MuJoCo-enum bug that had been blocking every dataset load.

Built with JAX, MJX, PPO, DeepMimic, LAFAN1 mocap, Unitree G1, MuJoCo and Python.

Autonomous Mobile Robot with SLAM & Nav2

Four-wheeled LiDAR robot rebuilt on ROS 2 Humble with slam_toolbox and a full Nav2 stack. In a cluttered warehouse: 3/3 goals reached, 0 collisions, 0 recoveries.

Read the full write-up

Four-wheeled mobile robot with a 2D LiDAR, rebuilt from scratch on ROS 2 Humble as a solo portfolio piece. Runs slam_toolbox for online SLAM and a full Nav2 stack (AMCL, NavFn A*, DWB local planner, behaviour-tree navigator) for autonomous goal-to-pose navigation on the saved map. Verified in a cluttered warehouse: 3/3 goals reached, 0 collisions, 0 recoveries on the final tuning pass.

Built with ROS 2 Humble, Nav2, slam_toolbox, Gazebo Classic, AMCL, DWB, URDF/Xacro and Python launch files.

Embodied LLM Agent for UR3e Pick-and-Place

A Claude vision model finds the objects in the RealSense frame; a Claude planner turns a sentence into MoveIt 2 actions through eight tools, behind a read-only safety gate.

  • describe_scene
  • pick
  • place
  • move_to
  • open_gripper
  • close_gripper
  • check_safety
  • home
Read the full write-up

Production-pattern agentic AI product built on Claude tool-use: a natural-language command becomes a grounded robot plan through structured outputs, validation logic, and an evaluation loop. A Claude vision model reads the RealSense D435i frame and returns a JSON list of objects with pixel centres; depth + camera intrinsics back-project each one into the base_link frame; a Claude planner then drives an 8-tool loop to execute the instruction on MoveIt 2. Built on top of my thesis’s UR3e + Robotiq 2F-140 + D435i Gazebo sim, with a read-only safety gate that reuses the thesis F/T and proximity topics. The point is that the high-level reasoning (e.g. “put the red block next to the blue cup”, then a grasp pose, then a place pose) is synthesised by the LLM over real tool feedback, not a hand-written state machine.

Built with Claude (Anthropic API), tool use, VLM, ROS 2 Humble, MoveIt 2, UR3e, Robotiq 2F-140, RealSense D435i, Gazebo and Python.

Air Quality Index Prediction & Forecasting for Chennai

Seven SARIMA models feed monthly pollutant forecasts into the Indian CPCB sub-index formula, served as a Streamlit web app.

Read the full write-up

Seven independent SARIMA models (PM2.5, PM10, NO2, SO2, O3, CO, and overall AQI) trained on the Kaggle Air Quality in India dataset, feeding monthly pollutant forecasts into the Indian CPCB sub-index formula I = ((IHI−ILO)/(BPHI−BPLO))(Cp−BPLO) + ILO. Overall AQI = max sub-index across pollutants, with a colour-coded six-category severity banner and health advice. The original Tkinter windows were rewritten as a single Streamlit web app with a forecast-by-month tab and a live AQI calculator tab (dominant-pollutant readout, CSV export, expandable CPCB breakpoint reference).

Built with Python, SARIMA, statsmodels, Streamlit, Pandas, time-series forecasting and the CPCB India standard.

Human-Robot Interaction with Force Feedback in Collaborative Tasks

My master’s thesis, on a real UR3e cobot.

Hybrid position-admittance control
500 Hz
ISO/TS 15066 modes: SSM, PFL, hand guiding
3
States in the assistive lift-and-place machine
13

Complete HRI framework on a UR3e cobot: hybrid admittance control, ISO/TS 15066 safety (SSM, PFL, Hand Guiding), YOLOv8 human detection with Intel RealSense D435i, and a 13-state FSM for assistive manipulation.

Built with ROS 2, MoveIt 2, YOLOv8, Python, Gazebo, ISO/TS 15066, UR3e and Intel RealSense.

UR3e collaborative robot workspace
UR3e workspace with Robotiq 2F-140 gripper and Intel RealSense D435i

Earlier and self-study work

Contour Detection Using Computer Vision

Self study

Classical OpenCV pipeline that segments tablets in a blister pack and classifies each by whether its horizontal seam edge is visible, with no deep learning.

Show the pipeline

Pipeline: Sobel-based edge exploration, then Gaussian blur + adaptive thresholding to get a clean binary mask, then Canny edges on the cropped region, then cv2.findContours with area filtering to isolate tablets; a per-contour horizontal-edge check drives red / green bounding-box classification. Built without any deep learning, the point was to reason about edges, thresholds, and morphology from first principles.

Built with OpenCV, Python, Sobel, Canny, adaptive thresholding and contour analysis.

Point Operations: Brightness, Contrast & Inversion

Self study

Pixel-wise intensity transforms from first principles: darken, lighten, contrast, negative and grayscale.

Show the result

Implemented the core pixel-wise intensity transforms from first principles: the affine map g(x,y) = α·f(x,y) + β drives darken, lighten, low-contrast, and high-contrast variants; a bitwise NOT gives the photographic negative; and a weighted RGB to luminance projection 0.3R + 0.6G + 0.1B produces grayscale. All seven outputs (original, darken, lighten, invert, low-contrast, high-contrast, grayscale) are rendered side by side. No library-level helpers beyond the numpy clip and the OpenCV colour-space wrappers.

Seven-panel comparison of a sports photograph showing original, darken, lighten, invert, low-contrast, high-contrast, and grayscale variants

Built with OpenCV, NumPy and Python.

Histogram Equalization from Scratch

Self study

Global histogram equalization without cv2.equalizeHist, through the PDF and CDF.

Show the result

Reimplemented global histogram equalization without using cv2.equalizeHist: compute the 256-bin intensity histogram, derive the PDF and then the CDF, and use np.interp to remap every pixel through the CDF × 255 lookup. Applied to an under-exposed sunset photograph where most of the intensity mass sits near zero; the equalized output spreads that narrow range across the full 0 to 255 gamut, pulling foliage texture and cloud structure out of the near-black regions.

Side-by-side comparison of an under-exposed sunset photograph and the same image after manual histogram equalization, showing recovered detail in the sky and foliage

Built with NumPy, Matplotlib and Python.

Object Detection Using YOLO with Audio Alert

Self study

Integrated YOLOv8 with Google text-to-speech (gTTS) and a real-time GUI for enhancing accessibility for visually impaired users with audio feedback of detected objects.

Built with YOLOv8, gTTS and Python.

Implementation of MPPT on PV Cell Using Incremental Conductance Method

Bachelor’s thesis

Modelled a 150W PV module in MATLAB/Simulink, implemented the Incremental Conductance MPPT algorithm with a SEPIC DC-DC converter. Achieved 97%+ MPP tracking accuracy, outperforming Perturb & Observe under varying irradiance.

Built with MATLAB, Simulink and Simscape.

Technical skills

Tools and technologies I work with.

Programming and toolsPython, C/C++, Git, Linux, VS Code, Jupyter
Robotics and controlROS 2, MoveIt 2, MoveIt Servo, admittance control, OMPL, Pilz, SLAM, Gazebo, URDF/Xacro, tf2, humanoid robotics
AI and machine learningAgentic AI, tool use, VLM, VLA, LLM application development, PyTorch, JAX, TensorFlow, Scikit-learn, deep learning, reinforcement learning (PPO), ARIMA, SARIMA
Computer vision and sensorsOpenCV, YOLOv8, Intel RealSense D435i, depth estimation, HSV segmentation, hand-eye calibration, point clouds
Safety and standardsISO/TS 15066, SSM, PFL, hand guiding, risk assessment, functional safety
Data and analysisNumPy, Pandas, Matplotlib, MATLAB, Simulink, feature engineering

Languages

English
Fluent
German
A2
Malayalam
Native
Tamil
Fluent
Hindi
Fluent

Education

Master of Engineering, 2022 to 2026

Artificial Intelligence for Smart Sensors and Actuators

Technische Hochschule Deggendorf (DIT), Cham, Germany

“Human-Robot Interaction with Force Feedback in Collaborative Tasks”

Specialisation: Machine Learning, Deep Learning, Computer Vision, Autonomous Systems, IoT, Robotics

Bachelor of Engineering

Electrical and Electronics Engineering

University of Calicut, Kerala, India

“Implementation of MPPT on PV Cell Using Incremental Conductance Method”

Specialisation: Digital Signal Processing, Digital System Design, Power Electronics, IoT

Certifications

Vanderbilt University, August 2026

AI Agents and Agentic AI with Python & Generative AI

Vanderbilt University certificate for AI Agents and Agentic AI with Python and Generative AI, issued to Nishanth Sundaran, August 2026
Skills covered

Agentic AI, Tool Use, Function Calling, AI Agent Architecture, LLM Application Development, Prompt Engineering, Prompt Patterns, OpenAI API, Retrieval-Augmented Generation (RAG), Python for AI.

Verify credential

IBM, September 2026

Machine Learning with Python

IBM certificate for Machine Learning with Python, issued to Nishanth Sundaran, September 2026
Skills covered

Supervised Learning, Unsupervised Learning, Classification (Logistic Regression, KNN, SVM, Decision Trees), Regression (Linear, Non-linear), Clustering (k-means, Hierarchical, DBSCAN), Recommender Systems, Model Evaluation (Cross-validation, Precision/Recall/F1), Scikit-learn, Pandas.

Verify credential

Get in touch

Available immediately for robotics and AI engineering roles in Germany, full-time or as a full-time internship. Based in Cham, Bavaria, and open to relocation and hybrid or remote arrangements.