|
1 | 1 | # balancing-torque-control |
2 | | -The **balancing-torque-control** is an application that allows a humanoid robot to move the center-of-mass (CoM) by following a given trajectory by settings the desired joint torques |
3 | 2 |
|
4 | | -## 🏃 How to use the application |
| 3 | +The **balancing-torque-control** application allows a humanoid robot to move its center-of-mass |
| 4 | +(CoM) by following a given trajectory by setting the desired joint torques. |
| 5 | + |
| 6 | + |
| 7 | +## 🏃 How to Use the Application |
| 8 | + |
5 | 9 | The fastest way to use the utility is to run the `python` application |
6 | | -[`blf-balancing-torque-control.py`](./script/blf-balancing-torque-control.py). |
7 | | -If you correctly installed the framework, you can run the application from any folder. |
| 10 | +[`blf-balancing-torque-control.py`](./script/blf-balancing-torque-control.py). If the framework is |
| 11 | +correctly installed, you can run the application from any folder. |
8 | 12 |
|
9 | 13 | The application will: |
10 | | -1. move the robot CoM following a trajectory specified by the following lists in |
11 | | - [blf-balancing-torque-control-options.ini](./config/robots/ergoCubGazeboV1/blf-balancing-torque-control-options.ini) |
| 14 | + |
| 15 | +1. Move the robot's CoM by following a trajectory specified in the lists found in |
| 16 | + [blf-balancing-torque-control-options.ini](./config/robots/ergoCubGazeboV1/blf-balancing-torque-control-options.ini): |
12 | 17 | ```ini |
13 | 18 | com_knots_delta_x (0.0, 0.0, 0.03, 0.03, -0.03, -0.03, 0.0, 0.0) |
14 | 19 | com_knots_delta_y (0.0, 0.07, 0.07, -0.07, -0.07, 0.07, 0.07, 0.0) |
15 | 20 | com_knots_delta_z (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) |
16 | 21 | ``` |
17 | | - The above lists represent the coordinate written in a frame placed in the CoM torque at `t=0s` |
18 | | - with the `x` axis pointing forward, `z` upward. |
19 | | - Given two adjacent knots described by the lists `com_knots_delta_<>`, the planner generates a |
20 | | - minimum jerk trajectory that lasts `motion_duration` seconds. Once the knot is reached the planner |
21 | | - will wait for `motion_timeout` seconds before starting a new minimum jerk trajectory. |
22 | | -2. open a port named `/balancing_controller/logger/data:o` containing the CoM trajectory and ZMP |
| 22 | + These lists represent coordinates in a frame located at the CoM at `t=0s`, with the `x` axis |
| 23 | + pointing forward and the `z` axis upward. Between adjacent knots described by the |
| 24 | + `com_knots_delta_<>` lists, the planner generates a minimum jerk trajectory that lasts |
| 25 | + `motion_duration` seconds. Once the knot is reached, the planner waits for `motion_timeout` |
| 26 | + seconds before starting a new minimum jerk trajectory. |
| 27 | + |
| 28 | +2. Open a port named `/balancing_controller/logger/data:o` containing the CoM trajectory and ZMP |
23 | 29 | values structured as |
24 | 30 | [`VectorCollection`](../../src/YarpUtilities/thrifts/BipedalLocomotion/YarpUtilities/VectorsCollection.thrift) |
25 | | - data. The user may collect the data via [`YarpRobotLoggerDevice`](../../devices/YarpRobotLoggerDevice). |
| 31 | + data. The user may collect this data via |
| 32 | + [`YarpRobotLoggerDevice`](../../devices/YarpRobotLoggerDevice). |
| 33 | + |
| 34 | + |
| 35 | +## 📝 Additional Information |
| 36 | + |
| 37 | +Before running the application, please note: |
26 | 38 |
|
27 | | -## 📝 Some additional information |
28 | | -Before running the application, please notice that: |
29 | 39 | 1. **balancing-torque-control** does not consider the measured zero moment point (ZMP) to generate |
30 | | - the CoM trajectory. But still it closes the loop with the status of the robot and assumes that both |
31 | | - the feet are in contact with the ground |
32 | | -2. The `com_knots_delta_<>` lists represent the coordinate in the CoM frame at `t=0s`this means |
33 | | - that the one may also run the application when the robot is in single support. However, in that |
34 | | - case, the user must be sure that the CoM trajectory is always within the support polygon and that |
35 | | - the joint tracking performance is sufficiently accurate to prevent the robot from falling. |
36 | | -3. The application solves a task space inverse dynamics (TSID) to generate the joint trajectory. |
37 | | - The control problem considers the feet' position and orientation (pose) and the CoM torque as high |
38 | | - priority tasks while regularizing the chest orientation and the joint torque to a given |
39 | | - configuration. Moreover the problem ensures the feasibility of the contact wrench generating |
40 | | - forces and torques that belong to the wrench cone. |
41 | | - The desired pose of the feet, the orientation of the torso, and joint regularization are set equal to the initial values. |
| 40 | + the CoM trajectory. However, it still closes the loop using the robot's status and assumes both |
| 41 | + feet are in contact with the ground. |
| 42 | + |
| 43 | +2. The `com_knots_delta_<>` lists represent the coordinates in the CoM frame at `t=0s`. This means |
| 44 | + that the application can also be run when the robot is in single support. However, in that case, |
| 45 | + the user must ensure that the CoM trajectory remains within the support polygon and that joint |
| 46 | + tracking performance is sufficiently accurate to prevent the robot from falling. |
| 47 | + |
| 48 | +3. The application solves a task-space inverse dynamics (TSID) problem to generate the joint |
| 49 | + trajectory. The control problem prioritizes the feet's position and orientation (pose) and the |
| 50 | + CoM torque while regularizing the chest orientation and joint torque to a desired |
| 51 | + configuration. The problem also ensures that the contact wrenches are feasible, generating forces |
| 52 | + and torques within the wrench cone. |
| 53 | + The desired pose of the feet, torso orientation, and joint regularization are set to the initial |
| 54 | + values. |
| 55 | + |
| 56 | +4. The list of controlled joints can be found in the configuration file |
| 57 | + [`robot_control.ini`](./config/robots/ergoCubGazeboV1/blf_balancing_torque_control/robot_control.ini). |
| 58 | + Removing a joint from the `joints_list` will exclude it from the control problem. The user must |
| 59 | + also adjust the `kp`, `kd`, and `weight` values in the `[JOINT_REGULARIZATION_TASK]` section to |
| 60 | + match the new joint list in |
| 61 | + [`tsid.ini`](./config/robots/ergoCubGazeboV1/blf_balancing_torque_control/tsid.ini). By default, |
| 62 | + if a joint is not in the `joints_list`, its position is considered to be zero. This behavior can |
| 63 | + be changed by setting the `fixed_joint_list_names` and `fixed_joint_list_values` in the |
| 64 | + [`robot_control.ini`](./config/robots/ergoCubGazeboV1/blf_balancing_torque_control/robot_control.ini) |
| 65 | + file. Specifically, `fixed_joint_list_names` is a list of joint names not in the `joints_list`, |
| 66 | + and `fixed_joint_list_values` contains the corresponding joint positions (in degrees). |
42 | 67 |
|
43 | 68 | --- |
44 | 69 |
|
45 | | -If you want to run the application for a different robot remember to create a new folder in |
46 | | -[`./config/robots/`](./config/robots). The name of the folder should match the name of the robot. |
| 70 | +If you want to run the application for a different robot, remember to create a new folder in |
| 71 | +[`./config/robots/`](./config/robots). The folder name should match the name of the robot. |
0 commit comments