As you have read in previous posts, the calcuation of the intention of motion has yielded promissing results, allowing real-time calculation of an intention path. The goal of this project is to take advantage of this information so that the end-effector of a robot can assist a patient in performing a specific motion as intented. To achieve this, we had to implement two features in our control application.
Firstly, we had to ‘translate’ the intention of motion path into a trajectory specified by ‘waypoints’. Once this is defined, a planning algorithm should calculate the joint trajectories that will result in the desired end-effector trajectory, ideally avoiding obstacles and big deviations from the path. This was possible using the MoveIt! planning framework that comes with ROS. MoveIt! supports trajectories based on waypoints and offers a good variety of planning algorithms.
The second feature that was necessary was a way to facilitate the communication between the ‘intention prediction’ and the ‘trajectory planning’ nodes. The main problem here was the fact that the time it takes to execute a trajectory is not known on before hand, therefore we need a smart way to handle exchange of information between the nodes. This problem was solved by implementing a LIFO approach to handling the messages transmitted from the intention prediction node. This ensured that the trajectory executed will be based on the latest available intention of motion path.
Some initial tests can be seen in the video below
In this video, I am using some pre-recorded data of a person performing a simple movement (arm push) without any contact with the robot. The kinematics and EMG of this measurement are used to calculated the intention of motion, which is then fed as a trajectory to the robot. The robot is simulated in the gazebo environment and the results for different lengths of the prediction horizon are shown.
A second test is visible in the video above. In this experiment, the person (me) is attempting to perform the same motion while holding the robot. The intention of motion is calculated in real-time and is fed as a trajectory for the end-effector of the robot. The patient is able to perform the motion as intended, with the robot assisting in the same direction! Several repetitions of the motion are performed to show the smoothness of the system. As you can observe, the motion performed by the robot is not 100% repeatable, as it depends on the calculated intention of the person.