From d9b32abf643aff2067b3e4b295192cdb9a555a0d Mon Sep 17 00:00:00 2001 From: Dennis Mronga Date: Thu, 28 Nov 2024 21:30:43 +0100 Subject: [PATCH] Update paper.md --- paper.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/paper.md b/paper.md index ee43550e..6c620556 100644 --- a/paper.md +++ b/paper.md @@ -58,19 +58,20 @@ $$\begin{array}{cc} & \boldsymbol{\tau}_m \leq \boldsymbol{\tau} \leq \boldsymbol{\tau}_M \\ \end{array}$$ -where $\mathbf{w}^i$ are task weights for the i-th task, $\mathbf{J}^i$ is the respective robot Jacobian, $\dot{\mathbf{v}}^i_d$ the desired task space acceleration, $\mathbf{q},\dot{\mathbf{q}},\ddot{\mathbf{q}}$ the joint positions, velocities, and accelerations $\mathbf{H}$ the mass-inertia matrix, $\mathbf{h}$ the vector of gravity and Coriolis forces, $\boldsymbol{\tau}$ the robot joint torques, $\mathbf{f}$ the contact wrenches, $\mathbf{J}_c$ the contact Jacobian, and $\boldsymbol{\tau}_m,\boldsymbol{\tau}_M$ the joint torque limits. To implement a simple Cartesian position controller for, e.g., controlling the end effector of a robot manipulator, the following PD-controller can be used to generate $\dot{\mathbf{v}}_d$: +where $\mathbf{w}^i$ are the task weights for the i-th task, $\mathbf{J}^i$ is the respective robot Jacobian, $\dot{\mathbf{v}}^i_d$ the desired task space acceleration, $\mathbf{q},\dot{\mathbf{q}},\ddot{\mathbf{q}}$ the joint positions, velocities, and accelerations $\mathbf{H}$ the mass-inertia matrix, $\mathbf{h}$ the vector of gravity and Coriolis forces, $\boldsymbol{\tau}$ the robot joint torques, $\mathbf{f}$ the contact wrenches, $\mathbf{J}_c$ the contact Jacobian, and $\boldsymbol{\tau}_m,\boldsymbol{\tau}_M$ the joint torque limits. To implement a simple Cartesian position controller for, e.g., controlling the end effector of a robot manipulator, the following PD-controller can be used to generate $\dot{\mathbf{v}}_d$: $$ \dot{\mathbf{v}}_d = \dot{\mathbf{v}}_r + \mathbf{K}_d(\mathbf{v}_r-\mathbf{v}) + \mathbf{K}_p(\mathbf{x}_r-\mathbf{x}) $$ -where $\mathbf{K}_p,\mathbf{K}_d$ are gain matrices, $\mathbf{x},\mathbf{v}$ the end effector position and velocity, $\dot{\mathbf{v}}_r,\mathbf{v}_r,\mathbf{x}_r$ the reference acceleration, velocity, and position. Figure \ref{fig:snippet} shows a C++ code snippet from ARC-OPT, which implements the above QP on a KUKA iiwa robot arm (no contacts, fixed based robot). In the code example, first the robot model is set up using the robot URDF, then solver (QPOases), scene and a Cartesian controller are configured. Afterwards, in the control loop, a circular trajectory is tracked in Cartesian space. The full example can be found in the ARC-OPT tutorials\footnote{\url{https://github.com/ARC-OPT/wbc/blob/master/tutorials/kuka_iiwa/cart_pos_ctrl_dynamic.cpp}}. The example implements a single controller, however, multiple controllers can be designed around the solver to track multiple objectives, e.g., leg positions and center of mass for a walking robot. +where $\mathbf{K}_p,\mathbf{K}_d$ are gain matrices, $\mathbf{x},\mathbf{v}$ the end effector position and velocity, $\dot{\mathbf{v}}_r,\mathbf{v}_r,\mathbf{x}_r$ the reference acceleration, velocity, and position. Figure \ref{fig:snippet} shows a C++ code snippet from ARC-OPT, which implements the above QP on a KUKA iiwa robot arm (no contacts, fixed base robot). In the code example, first the robot model is set up using the robot URDF, then the QP-solver (qpOASES), scene and a Cartesian controller are configured. In the subsequent control loop, a circular trajectory is tracked in Cartesian space. The full example can be found in the ARC-OPT tutorials\footnote{\url{https://github.com/ARC-OPT/wbc/blob/master/tutorials/kuka_iiwa/cart_pos_ctrl_dynamic.cpp}}. Figure \ref{fig:screenshots} shows a visualization of the resulting robot motion. While the example implements a simple Cartesian controller, much more complex control problems can be composed using multiple controllers to track different targets, e.g., leg positions and center of mass for a walking robot. -![Minimal code example for dynamic Cartesian position control on a KUKA iiwa robot\label{fig:snippet}](snippet.png) +![Minimal code example for Cartesian position control on a KUKA iiwa robot\label{fig:snippet}](snippet.png) +![Screenshots of the resulting robot motion in the example\label{fig:screenshots}](screenshots.png) # ROS 2 integration and Python Bindings -The WBC library is integrated with ros2\_control\footnote{\url{https://control.ros.org/humble}}. Every controller, which is represented as a separate ros 2 controller here, connects its output to the central Whole-Body controller, which sets up and solves and the QP. Typical control rates for the WBC are 500Hz - 1Khz. Most configuration options are exposed to ROS 2, and the WBC problem can be configured using .yaml configuration files. +The WBC library is integrated with \textit{ros2\_control}\footnote{\url{https://control.ros.org/humble}}. Every controller, which is represented as a separate ros 2 controller here, connects its output to the central Whole-Body controller, which sets up and solves and the QP. Typical control rates for the WBC are 500Hz - 1Khz. Most configuration options are exposed to ROS 2, and the WBC problem can be configured using .yaml configuration files. Additionally, Python bindings for most of the library functions are available~\footnote{\url{https://github.com/ARC-OPT/wbc_py}}.