We’re currently designing a task where we ‘replay’ rials to participants (Human Exo) by moving their arm along the trajectory that they took previously. I’ve gotten this working very well using the position controller (with no intertia component in the feed-forward controller) by storing their joint position and feeding that to the position controller (at maximum sampling time 0.00025). This currently works very well, but we’d like to improve the quality of the replay further. Trying to use any of the intertial components of the feed-forward controller leads to extremely high instantaneous forces, which I gather is not unexpected since the desired joint position is changing every time step.
Do you have ideas how we could further improve trajectory control?
Hi Jonathan, as a digital signal the position data suffers from quantization noise. At the position level you don’t notice it much but when you take the derivative to calculate velocity (which the feed-forward controller does) that noise will be greatly amplified (which is why you see high instantaneous forces).
To get around the issue, you will need to filter your position data before you pass it to the position controller. Inside the velocity load blocks you’ll find an example of a filter function we use (it is a Butterworth 2nd order with cut off frequencies at either 10, 40, 50 Hz). I recommend doing 10 Hz cut off and trying it out. It may be necessary to apply the filter twice.
Thanks Koloman. This solution worked very well.