openfig added

This commit is contained in:
Rooholla-KhorramBakht 2024-04-16 16:08:52 -04:00
parent 1e7877f4f1
commit c0643fd5db
4 changed files with 72 additions and 43 deletions

View File

@ -1,15 +1,19 @@
# Go2Py # Go2Py
## What is it?
This is a Pythonic interface and driver for low-level and high-level control of Unitree Go2 quadruped robots. The motivation of this project is to ease the burden of initial interface development, safety systems of Go2 quadruped by providing a modular pipeline for real-time communication with the robot in both simulated and real world with a unified interface. Go2Py is a Pythonic interface and driver for low-level and high-level control of Unitree Go2 quadruped robots. The motivation of this project is to ease the burden of initial interface development, safety systems of Go2 quadruped by providing a modular pipeline for real-time communication with the robot in both simulated and real world with a unified interface.
<p align="center">
<img src="docs/assets/openfig.png" alt="image" width="60%" height="auto"/>
</p>
This project is comprised of the following components: This project is comprised of the following components:
- **C++ Bridge:** A dockerized ROS2 bridge built upon the [unitree_ros2](https://github.com/unitreerobotics/unitree_ros2) that implements an remote controlled emergency stop and publishes the robot states as standard ROS2 topics usable by upstream systems such as NAV2. - **C++ Bridge:** A dockerized ROS2 bridge built upon the [unitree_ros2](https://github.com/unitreerobotics/unitree_ros2) that implements a remote controlled emergency stop and publishes the robot states as standard ROS2 topics usable by upstream systems such as NAV2.
- **Robot Interface:** A simple Python class that represents the robot and communicates with the C++ bridge through either DDS (ROS independent) or ROS2 interfaces. - **Robot Interface:** A simple Python class that represents the robot and communicates with the C++ bridge through either DDS (ROS independent) or ROS2 interfaces.
- **Robot Management FSM:** A finite state machine for controlling the behavior of the robot up to the point of handover to the user low-level controller (sitting down, standing up) with safety monitors (motor temperatures, emergency stops). - **Robot Management FSM:** A finite state machine for controlling the behavior of the robot up to the point of handover to the user low-level controller (sitting down, standing up) with safety monitors (motor temperatures, emergency stops).
- **Robot Model:** A simple to use [Pinocchio](https://github.com/stack-of-tasks/pinocchio) wrapper for computing the kinematics and dynamics parameters of the robot. - **Robot Model:** A simple to use [Pinocchio](https://github.com/stack-of-tasks/pinocchio) wrapper for computing the kinematics and dynamics parameters of the robot.
- **Simulation Interface:** Simulation environments based on Mujoco and Nvidia Orbit (To be added) with a Python interface identical to the read robot. - **Simulation Interface:** Simulation environments based on Mujoco and Nvidia Orbit (To be added) with a Python interface identical to the real robot.
## How does it look like? ## How Does Using it Look Like?
Communication with the robot will be as simple as importing a Python class: Communication with the robot will be as simple as importing a Python class:
```python ```python
from Go2Py.robot.interface.dds import GO2Real from Go2Py.robot.interface.dds import GO2Real

File diff suppressed because one or more lines are too long

BIN
docs/assets/openfig.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

View File

@ -188,20 +188,6 @@
"text": [ "text": [
"p_gains: [20. 20. 20. 20. 20. 20. 20. 20. 20. 20. 20. 20.]\n" "p_gains: [20. 20. 20. 20. 20. 20. 20. 20. 20. 20. 20. 20.]\n"
] ]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"frq: 0.10237921921805228 Hz\n",
"frq: 46.14348108298404 Hz\n",
"frq: 44.397794032030994 Hz\n",
"frq: 45.603148715941465 Hz\n",
"frq: 45.86595514341641 Hz\n",
"frq: 44.16591026356524 Hz\n",
"frq: 45.82636627843454 Hz\n",
"frq: 45.51950772169346 Hz\n"
]
} }
], ],
"source": [ "source": [
@ -213,31 +199,9 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 7, "execution_count": 6,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [],
{
"name": "stdout",
"output_type": "stream",
"text": [
"frq: 45.741406386320016 Hz\n",
"frq: 44.6901430961184 Hz\n",
"frq: 44.451434445775085 Hz\n",
"frq: 45.19042385846963 Hz\n",
"frq: 45.1087737411542 Hz\n",
"frq: 46.690013692073066 Hz\n",
"frq: 45.09228519824546 Hz\n",
"frq: 45.70053825535531 Hz\n",
"frq: 46.01388873651992 Hz\n",
"frq: 44.94924554183813 Hz\n",
"frq: 45.49383372200228 Hz\n",
"frq: 44.522684330085134 Hz\n",
"frq: 44.42130458266699 Hz\n",
"frq: 43.71525649844704 Hz\n",
"frq: 44.37383889464886 Hz\n"
]
}
],
"source": [ "source": [
"controller.command_profile.pitch_cmd=0.0\n", "controller.command_profile.pitch_cmd=0.0\n",
"controller.command_profile.body_height_cmd=0.0\n", "controller.command_profile.body_height_cmd=0.0\n",