diff --git a/.devcontainer/docker-compose.yaml b/.devcontainer/docker-compose.yaml index c3968ce..cd1d972 100644 --- a/.devcontainer/docker-compose.yaml +++ b/.devcontainer/docker-compose.yaml @@ -12,6 +12,6 @@ services: environment: - DISPLAY=${DISPLAY} - QT_X11_NO_MITSHM=1 - # runtime: nvidia + runtime: nvidia stdin_open: true tty: true \ No newline at end of file diff --git a/Go2Py/control/walk_these_ways.py b/Go2Py/control/walk_these_ways.py index a6bc131..8cdcf1e 100755 --- a/Go2Py/control/walk_these_ways.py +++ b/Go2Py/control/walk_these_ways.py @@ -425,8 +425,8 @@ class WalkTheseWaysAgent: self.actions = torch.clip(actions[0:1, :], -clip_actions, clip_actions) self.publish_action(self.actions, hard_reset=hard_reset) # time.sleep(max(self.dt - (time.time() - self.time), 0)) - if self.timestep % 100 == 0: - print(f"frq: {1 / (time.time() - self.time)} Hz") + # if self.timestep % 100 == 0: + # print(f"frq: {1 / (time.time() - self.time)} Hz") self.time = time.time() obs = self.get_obs() diff --git a/examples/00-robot-interface.ipynb b/examples/00-robot-interface.ipynb index ecc8730..dce46f3 100644 --- a/examples/00-robot-interface.ipynb +++ b/examples/00-robot-interface.ipynb @@ -103,7 +103,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.18" + "version": "3.10.12" } }, "nbformat": 4, diff --git a/examples/05-walk-these-ways-RL-controller.ipynb b/examples/05-walk-these-ways-RL-controller.ipynb index 8a75b9e..e5cbf0c 100644 --- a/examples/05-walk-these-ways-RL-controller.ipynb +++ b/examples/05-walk-these-ways-RL-controller.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -22,7 +22,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -31,18 +31,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "remote = KeyboardRemote()\n", - "robot.standUpReset()\n", + "robot.sitDownReset()\n", "safety_hypervisor = SafetyHypervisor(robot)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -71,9 +71,9 @@ " def update(self, robot, remote):\n", " action = self.policy(self.obs, self.policy_info)\n", " self.obs, self.ret, self.done, self.info = self.agent.step(action)\n", - " vy = -robot.getRemoteState().lx\n", - " vx = robot.getRemoteState().ly\n", - " omega = -robot.getRemoteState().rx*2.2\n", + " vy = 0. # Update these based on your implementation of the remote controller\n", + " vx = 0.\n", + " omega = 0.\n", " self.command_profile.x_vel_cmd = vx*1.5\n", " self.command_profile.y_vel_cmd = vy*1.5\n", " self.command_profile.yaw_vel_cmd = omega" @@ -81,9 +81,38 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "p_gains: [20. 20. 20. 20. 20. 20. 20. 20. 20. 20. 20. 20.]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "frq: 0.06860146952866389 Hz\n", + "frq: 43.78233593252539 Hz\n", + "frq: 44.41613012538123 Hz\n", + "frq: 46.552687074074896 Hz\n", + "frq: 46.25288370349132 Hz\n", + "frq: 45.19091075603633 Hz\n", + "frq: 46.16786095609198 Hz\n", + "frq: 45.455376979181345 Hz\n", + "frq: 45.34774899450763 Hz\n", + "frq: 46.05987129647932 Hz\n", + "frq: 45.999758721663504 Hz\n", + "frq: 46.80150414532633 Hz\n", + "frq: 45.81385238828631 Hz\n", + "frq: 45.29241401652179 Hz\n", + "frq: 45.742902947880424 Hz\n" + ] + } + ], "source": [ "checkpoint = \"../Go2Py/assets/checkpoints/walk_these_ways/\"\n", "controller = walkTheseWaysController(robot, remote, checkpoint)\n", @@ -92,7 +121,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -106,9 +135,16 @@ "controller.command_profile.setGaitType(\"trotting\")" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Pressing `u` on the keyboard will make the robot stand up. This is equivalent to the `L2+A` combo of the Go2 builtin state machine. After the the robot is on its feet, pressing `s` will hand over the control the RL policy. This action is equivalent to the `start` key of the builtin controller. When you want to stop, pressing `u` again will act similarly to the real robot and locks it in standing mode. Finally, pressing `u` again will command the robot to sit down." + ] + }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -230,6 +266,13 @@ "fsm = FSM(robot, remote, safety_hypervisor, user_controller_callback=controller.update)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Pressing `L2+A` to command the robot to stand up. After the the robot is on its feet, pressing `start` will hand over the control the RL policy. When you want to stop, pressing `L2+A` again will act similarly to the factory controller and locks the robot in standing mode. Finally, pressing `L2+A` again will command the robot to sit down." + ] + }, { "cell_type": "code", "execution_count": null, @@ -256,7 +299,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.18" + "version": "3.10.12" } }, "nbformat": 4,