This repository contains implementation codes of robotic rock-and-walk manipulation (video) for dynamic and non-prehensile object transport. The object, which is in contact with an environmental surface, is basically manipulated to rock from side to side about the contact point iteratively by the robot system. In the meantime, the passive dynamics due to gravity enables the object to roll along a zigzag path that leads to a forward walk. Rock-and-walk is a special-purpose method that enables the transport of a certain class of objects, which are too large and heavy to apply other primary methods such as grasping- or pushing-based operations. Our work is motivated by an interesting question in archaeology, how the giant rock statues of Easter Island (known as “moai”) were transported several hundred years ago, and a recent demonstration performed by archaeologists that it is possible to walk the statue by iterative rocking.
Our implementation employs a feedback control strategy for sustainable rock-and-walk gaiting through the effective regulation of the object’s energy and posture in multiple robotic settings: caging-based single-arm manipulation, cable-driven dual-arm manipulation, and aerial manipulation.
Related Papers
- A. Nazir and J. Seo, "Passive Dynamic Object Locomotion by Rocking and Walking Manipulation," 2019 International Conference on Robotics and Automation (ICRA), Montreal, QC, Canada, 2019, pp. 7926-7932, doi: 10.1109/ICRA.2019.8794163.
- Matlab for object's passive dynamics simulation
- ROS Kinetic running on Ubuntu 16.04 for real implementation of rock-and-walk
- python-urx for UR10 robot arm control
- rosserial to acquire data from Arduino 9 Axis Motion Shield
- teleop_twist_keyboard to perform teleoperated rock-and-walk on a treadmill
The following provides a brief description of each folder contained in this repository
1. /aerial_manipulation: contains ROS packages for rock-and-walk implementation with a quadrotor using mocap
2. /cad_models: contains .stl files for the object models used in the experiments
3. /rockwalk_kinematics: ROS package to acquire data from motion shield and process to obtain object state as it rolls without slipping
4. /rockwalk_ur10_control: ROS package to implement rock-and-walk in a single- or dual-arm setting using Arduino-MotionShield mounted on the object
5. /simulation: Matlab codes for passive dynamic simulation of object rolling on ground with its control point fixed
6. /simulation_rviz: ROS package to visualize passive dynamic simulation in RViz
To install ROS packages, first downloaded them into your catkin workspace and then run catkin build
command from catkin_tools. Matlab scripts can be executed directly in Matlab.
Our Matlab implementation computes passive dynamics of the object, modeled as an oblique-cone that has a circular base and a vertical rod attached to it, as it rolls without slipping on a flat surface. Our dynamic formulation only considers the center of mass of the object, while ignoring its moment of inertia. The motion of the object is visualized in RViz.
To obtain and solve the dynamic model in Matlab
>> cd simulation/
>> rolling_disk_eom.m
>> fixed_apex_sim.m
Parmeters for the oblique-cone model can be altered in the simulation/cone_parameters.m
file. To visualize the simulation in RViz
roslaunch simulation_rviz fixed_apex.launch
First, publish motion shield data in ROS using rosserial. Then calibrate the motion shield and use the output to compute object state:
rosrun rosserial_python serial_node.py _port:=/dev/ttyACM0 _baud:=115200
***calibrate motion sheild***
rosrun rockwalk_kinematics rockwalk_kinematics_node
Then run the following nodes to implement rock-and-walk in a single-arm setting with a caging end-effector, or, in a dual-arm setting with cables:
rosrun rockwalk_ur10_control single_arm_caging_labfloor_rockwalk
rosrun rockwalk_ur10_control dual_arm_cable_labfloor_rockwalk
Detailed instructions on executing rock-and-walk using a quadrotor equipped with a caging end-effector can be found in aerial_manipulation/README.md
. Note our current implementation with quadrotor requires motion capture system to obtain state of both the quadrotor and the object.
For technical enquiry, please contact Abdullah Nazir (a.nazir[at]connect.ust.hk) and Pu Xu (pxuaf[at]connect.ust.hk)