Dual Quaternion based MPC generating screw motion for n-DOF robot arm.
Project description
screwmpcpy
Generate smooth motions for a n-DOF robot arm end effector using Dual Quaternions while enforcing velocity-, acceleration- and jerk constraints. The package includes a base optimization scheme and a base motion generator, which can be easily extended for custom robot arms. A motion generator for the Franka Emika Panda robot is included.
Install
The package is available in PyPI, you can install it via pip:
pip install screwmpcpy
Getting started
The motion generators yield velocity commands for an n-DoF robot arm. For the
basic usage have a look at examples/motiongenerator.py
. You can also use the
dual quaternions to generate waypoints. Check it out the example for the panda
robot at examples/panda_screwmotion_ik.py
. To install the required package
dependencies execute pip install screwmpcpy[examples]
. You can find advanced
usage examples here. We
include two generators for the panda robot:
The basic screw motion generator and a modified variant, which includes manipulability
maximization from [1].
Extending the available robots
You can easily extend the base class by adding your custom robot arm. Ensure the
forward kinematics of your robot are available.
Create a new file your_robot_mg.py
in folder src/screwmpc.py
.
Custom robot example
from dqrobotics import DQ
from .basemg import BaseMotionGenerator
from .screwmpc import BOUND
class YourRobotMotionGenerator(BaseMotionGenerator):
def __init__(
self,
n_p: int,
n_c: int,
q_mpc: float,
r_mpc: float,
lu_bound_vel: BOUND,
lu_bound_acc: BOUND,
lu_bound_jerk: BOUND,
) -> None:
super().__init__(
n_p, n_c, q_mpc, r_mpc, lu_bound_vel, lu_bound_acc, lu_bound_jerk
)
# custom attributes here
self._kin = YourRobotKinematics()
def step(self, q_robot: np.ndarray, goal: DQ) -> np.ndarray:
# Initialize Dual Quaternion with 6D pose
x_current = DQ(self._kin.your_forward_kinematics(q_robot))
error, smooth_traj = super()._step(x_current, goal)
# calculate commanded dq here
...
return dq
References
[1] Haviland, J., & Corke, P. (2020). A Purely-Reactive Manipulability-Maximising Motion Controller. ArXiv. /abs/2002.11901
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for screwmpcpy-0.5.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ce9d9a2035df2ac81347152d5fc6eabde84fd4f1a813b70e1f24490d80aa2d1b |
|
MD5 | b59c9c7128a5774aaf24b9a56b539fe0 |
|
BLAKE2b-256 | ef7cd26dda80ed706699f07367dec97fc98068f2d25a2a4859c9ca064b577a7b |