/Virtual Chassis for Snake Robots: Definition and Applications

Virtual Chassis for Snake Robots: Definition and Applications

David Rollinson, Austin Buchan and Howie Choset
Journal Article, Carnegie Mellon University, Advanced Robotics, October, 2012

Copyright notice: This material is presented to ensure timely dissemination of scholarly and technical work. Copyright and all rights therein are retained by authors or by other copyright holders. All persons copying this information are expected to adhere to the terms and constraints invoked by each author’s copyright. These works may not be reposted without the explicit permission of the copyright holder.


Intuitively representing the motion of a snake robot is difficult. This is in part because the internal shape changes that the robot uses to locomote involve the entire body and no single point on the robot intuitively represents the robot’s pose at all times. To address this issue, we present a method of defining body coordinate frames that departs from the typical convention of rigidly fixing a frame to a link on the robot, and instead define a body frame that is based on the averaged position of all of the robot’s links. This averaged frame serves as a virtual chassis that effectively isolates the internal motion of the robot’s shape changes from the external motion, due to the robot’s interaction with its surroundings. This separation of motion allows much simpler models — such as those derived for wheeled vehicles — to accurately approximate the motion of the robot as it moves through the world. We demonstrate the practical advantages of using the virtual chassis body frame by estimating the pitch and roll of a snake robot undergoing dynamic motion by fusing readings from its internal encoders, gyros, and accelerometers with an extended Kalman filter.

BibTeX Reference
author = {David Rollinson and Austin Buchan and Howie Choset},
title = {Virtual Chassis for Snake Robots: Definition and Applications},
journal = {Advanced Robotics},
year = {2012},
month = {October},