dhir patel
[<] back to home
nowedmonton, abneuromuscular control and biomechanics laboratory (ncbl)

mechatronics intern

at glenrose rehabilitation hospital↗

jan 2026 - present

mechatronics intern in the neuromuscular control and biomechanics laboratory (ncbl) at the glenrose rehabilitation hospital - building a gamified unity front end for a ros 2 autonomous pediatric power wheelchair, designed so every child-facing function works with two switches, one switch, or discrete commands from a brain-computer interface.

responsibilities

  • design and build the unity client: three navigation modes, switch access, caregiver tools and gamification.
  • keep ros 2 authoritative - every motion request and pose update crosses the unity / ros boundary through one bridge component.
  • bring up and maintain the ros 2 simulation backend the client is developed against.
  • link brain-computer interface commands into the same input path the keyboard and switches use.

what i accomplished

  • built three navigation modes: explorer (step-wise forward / turn / stop commands), magic travel (pick a room and the chair drives there), and smart guide (pick a caregiver, wall or doorway to follow).
  • made the scanning loop the primary code path - two-switch scanning, one-switch timed scanning, direct keys and bci markers all call the same trigger, so there's one behaviour to validate instead of three.
  • rebuilt the clinic floor at runtime from the slam occupancy grid - threshold, or-reduce, de-speckle, thicken walls, check every room is still connected - then bake a navmesh, so a new map installs without rebuilding the app.
  • drove every reward from the chair's measured pose, never from commanded motion, so a child is never rewarded for a trip the chair didn't make.
  • ported the lab's gazebo classic simulation to gazebo fortress with a full map_server / amcl / nav2 bring-up; in simulation the chair planned and drove to a commanded goal, finishing 0.24 m from it.
  • tracked down a 'blind' lidar: under the vm's hardware-accelerated opengl, gazebo's gpu lidar returned its minimum range on every beam while still publishing at a normal 30 hz. forcing software rendering fixed it.
  • piped bci commands in over lsl (FORWARD / TURN_LEFT / TURN_RIGHT / STOP) through the same trigger as the keyboard and switches. when lsl's pull_sample never returned inside unity's mono runtime, a packet capture proved the samples were arriving - so i moved lsl receiving into a small python lsl → tcp bridge. so far it has been tested end to end with a stub classifier, not real eeg.

professional growth

research taught me to work without a spec - to take an open-ended question, scope it into something buildable, and defend my technical choices to people who know far more than i do. it also taught me to be honest about what's done: the unity client works end to end in simulation, but sending goals from unity to ros 2 is still stubbed and nothing has been tested with children yet. the bci path works over lsl with a stub classifier; connecting a real eeg classifier comes next.

teamwork & responsibility

i work under a graduate-student researcher who scopes the project, alongside a lab colleague handling pcb and electronics work on the chair, so i had to learn to translate between robotics, software, and the real needs of pediatric patients. building something a child will actually use raises the bar on communication and care.