
Design/Implementation

Unreal Engine
Permobil provided us with access to a simulated environment implemented in Unreal Engine. Our autonomous system controls a Permobil F5 powered wheelchair within the simulation. The simulation attempts to model real-world physics and exposes simulated sensor outputs used by our system.

Control Flow
As seen in the graphs above, we first parse the data taken from sensors built on the wheelchair. From this, we gather information about the obstacles or the rigid body transform to the ramp in front of us. We gather enough information to set a waypoint in 3d space, multiple waypoints if we need to avoid obstacles. From these waypoints, we use our path planning algorithm to build the path our wheelchair will follow as well as the velocities for each wheel. This information is passed down to our controller module which accounts for various friction forces and castor dynamics. The design of this system is built with Node.js and socket.io in which the vision, control, and path planning are different nodes. Each module subscribes to different nodes and publishes across topics subscribed to by the other nodes.
_edited_edited.jpg)
Path between Waypoints
Path Planning
In order to travel from waypoint to waypoint, we decided to fit a polynomial between the various waypoints. This resulted in smooth trajectories which our wheelchair could easily follow. Additionally, since our wheelchair had castors, sharp turns at some angles were impossible due to castor friction. The robotpy-pathplanning api was very useful for our purposes as we were able to specify waypoints and were given points along the way. Additionally, different headings could be specified to travel a specific angle through the various waypoints which changed the way our polynomial trajectory was shaped.
.png)
Path Following
For path following, we implemented a pure pursuit algorithm. This algorithm finds a point on the described path a given distance in front of it and calculates the necessary linear and angular velocity of the wheelchair to drive through that point. As it forever chases a point ahead of it on the path, the pure pursuit algorithm follows the path to the endpoint, correcting for errors in starting position and drift.

Dynamical Model
Mathematical Model Components
-
Weight Distribution
-
Necessary to calculate friction terms..
-
Accounts for: Inclined surfaces, Dynamic motion.
-
-
Castor Reaction Forces
-
Accounts for: friction of castor wheels.
-
Neglect mass and inertia as mass is small and velocity is low.
-
-
Inverse Kinematics and Dynamics
-
Calculate requisite torques to produce desired motion.
-
Accounts for: weight distribution and normal forces, castor reaction forces, dynamic terms of wheelchair.
-
Dynamical Model
Constants:
-
Friction Coefficients, Thresholds
-
Mass Distribution
-
Various Distances
-
Inertial Matrix
-
Stiffness of castor springs
-
Incline of ground surface
Behavior:
-
Inverse kinematic torque calculations
-
Insufficient to completely suppress castor skew in Unreal, Slow
-
Unclear which parameters are at fault
-
Auto-Generated from Sympy mathematical formulas
Results:
-
Produces expected motion from wheelchair
-
Difficult to tune for simulation - mostly arising from errors in the simulation's representation of friction and contact forces.
-
Replaced with simplified model for driving in the simulation
Simplified Model
Constants:
-
Two Friction Force constants
-
Mass
-
Inertia about Z axis (estimated 1/12 b*h3)
-
Distances from CAD
Behavior:
-
Correct feedback responses
-
Easily tuned to correct majority of behavior
-
Vast improvement over original and Dynamic Model
Results:
-
Tuned to accurately and easily drive wheelchair in simulation
-
Used for path following and joystick driving components of project.
​