diff --git a/Go2Py/control/walk_these_ways.py b/Go2Py/control/walk_these_ways.py index 1f313e4..47b7403 100755 --- a/Go2Py/control/walk_these_ways.py +++ b/Go2Py/control/walk_these_ways.py @@ -114,7 +114,7 @@ class HistoryWrapper: class CommandInterface: def __init__(self, limits=None): self.limits = limits - gaits = { + self.gaits = { "pronking": [0, 0, 0], "trotting": [0.5, 0, 0], "bounding": [0, 0.5, 0], @@ -123,11 +123,15 @@ class CommandInterface: self.x_vel_cmd, self.y_vel_cmd, self.yaw_vel_cmd = 0.0, 0.0, 0.0 self.body_height_cmd = 0.0 self.step_frequency_cmd = 3.0 - self.gait = torch.tensor(gaits["trotting"]) - self.footswing_height_cmd = 0.03 + self.gait = torch.tensor(self.gaits["trotting"]) + self.footswing_height_cmd = 0.08 self.pitch_cmd = 0.0 self.roll_cmd = 0.0 - self.stance_width_cmd = 0.0 + self.stance_width_cmd = 0.25 + + def setGaitType(self, gait_type): + assert gait_type in [key for key in self.gaits.keys()], f'The gain type should be in {[key for key in self.gaits.keys()]}' + self.gait = torch.tensor(self.gaits[gait_type]) def get_command(self): command = np.zeros((19,)) diff --git a/examples/walk_these_ways_real.ipynb b/examples/walk_these_ways_real.ipynb index 8e5c18e..3c5b3b2 100644 --- a/examples/walk_these_ways_real.ipynb +++ b/examples/walk_these_ways_real.ipynb @@ -47,19 +47,19 @@ " self.command_profile.yaw_vel_cmd = 0.0\n", " self.command_profile.x_vel_cmd = 0.0\n", " self.command_profile.y_vel_cmd = 0.0\n", - " self.command_profile.stance_width_cmd=0.2\n", - " self.command_profile.footswing_height_cmd=-0.05\n", - " self.command_profile.step_frequency_cmd = 2.5\n", - " self.command_profile.bodyHeight = 0.05\n", + " self.command_profile.stance_width_cmd=0.25\n", + " self.command_profile.footswing_height_cmd=0.08\n", + " self.command_profile.step_frequency_cmd = 3.0\n", + " self.command_profile.bodyHeight = 0.00\n", "\n", " 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().rx\n", - " vx = robot.getRemoteState().ry\n", - " omega = robot.getRemoteState().lx*2.2\n", - " self.command_profile.x_vel_cmd = vx\n", - " self.command_profile.y_vel_cmd = vy\n", + " vy = -robot.getRemoteState().lx\n", + " vx = robot.getRemoteState().ly\n", + " omega = -robot.getRemoteState().rx*2.2\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\n" ] }, @@ -127,10 +127,20 @@ "outputs": [], "source": [ "checkpoint = \"/home/rstaion/projects/rooholla/locomotion/Go2Py/Go2Py/assets/checkpoints/walk_these_ways/\"\n", + "# checkpoint = \"/home/rstaion/projects/rooholla/walk-these-ways/runs/gait-conditioned-agility/pretrain-v0/train/025417.456545\"\n", + "\n", "controller = walkTheseWaysController(robot, remote, checkpoint)\n", "fsm = FSM(robot, remote, safety_hypervisor, user_controller_callback=controller.update)\n", - "safety_hypervisor = SafetyHypervisor(robot)" + "safety_hypervisor = SafetyHypervisor(robot)\n", + "fsm.control_dT = 1./56." ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/examples/walk_these_ways_sim.ipynb b/examples/walk_these_ways_sim.ipynb index 2f1461b..c686ed6 100644 --- a/examples/walk_these_ways_sim.ipynb +++ b/examples/walk_these_ways_sim.ipynb @@ -33,16 +33,10 @@ "metadata": {}, "outputs": [], "source": [ - "from Go2Py.control.walk_these_ways import *" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "checkpoint_path = \"/home/rstaion/projects/rooholla/locomotion/Go2Py/Go2Py/assets/checkpoints/walk_these_ways/\"\n", + "from Go2Py.control.walk_these_ways import *\n", + "# checkpoint_path = \"/home/rstaion/projects/rooholla/locomotion/Go2Py/Go2Py/assets/checkpoints/walk_these_ways/\"\n", + "checkpoint_path = \"/home/rstaion/projects/rooholla/walk-these-ways/runs/gait-conditioned-agility/pretrain-v0/train/025417.456545\"\n", + "\n", "\n", "cfg = loadParameters(checkpoint_path)\n", "policy = Policy(checkpoint_path)\n", @@ -78,7 +72,7 @@ "source": [ "robot.reset()\n", "obs = agent.reset()\n", - "for i in range(5000):\n", + "for i in range(50000):\n", " policy_info = {}\n", " action = policy(obs, policy_info)\n", " if i % (control_dt // simulation_dt) == 0:\n", @@ -87,9 +81,6 @@ " command_profile.yaw_vel_cmd = 0.0\n", " command_profile.x_vel_cmd = 0.0\n", " command_profile.y_vel_cmd = 0.0\n", - " command_profile.stance_width_cmd=0.2\n", - " command_profile.footswing_height_cmd=-0.05\n", - " command_profile.step_frequency_cmd = 2.5\n", " time.sleep(robot.dt/4)" ] }, @@ -102,7 +93,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -116,7 +107,16 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "robot = Go2Sim()" + ] + }, + { + "cell_type": "code", + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -137,10 +137,10 @@ " self.command_profile.yaw_vel_cmd = 0.0\n", " self.command_profile.x_vel_cmd = 0.0\n", " self.command_profile.y_vel_cmd = 0.0\n", - " self.command_profile.stance_width_cmd=0.2\n", - " self.command_profile.footswing_height_cmd=-0.05\n", - " self.command_profile.step_frequency_cmd = 2.5\n", - " self.command_profile.bodyHeight = 0.05\n", + " self.command_profile.stance_width_cmd=0.25\n", + " self.command_profile.footswing_height_cmd=0.08\n", + " self.command_profile.step_frequency_cmd = 3.0\n", + " self.command_profile.body_height_cmd = 0.5\n", "\n", " def update(self, robot, remote):\n", " action = self.policy(self.obs, self.policy_info)\n", @@ -149,31 +149,23 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "remote = KeyboardRemote()\n", - "robot = Go2Sim()\n", "robot.standUpReset()\n", "safety_hypervisor = SafetyHypervisor(robot)" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "p_gains: [20. 20. 20. 20. 20. 20. 20. 20. 20. 20. 20. 20.]\n" - ] - } - ], + "outputs": [], "source": [ "checkpoint = \"/home/rstaion/projects/rooholla/locomotion/Go2Py/Go2Py/assets/checkpoints/walk_these_ways/\"\n", + "# checkpoint = \"/home/rstaion/projects/rooholla/walk-these-ways/runs/gait-conditioned-agility/pretrain-v0/train/025417.456545\"\n", "controller = walkTheseWaysController(robot, remote, checkpoint)\n", "fsm = FSM(robot, remote, safety_hypervisor, user_controller_callback=controller.update)" ] @@ -182,19 +174,16 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [ - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mThe Kernel crashed while executing code in the the current cell or a previous cell. Please review the code in the cell(s) to identify a possible cause of the failure. Click here for more info. View Jupyter log for further details." - ] - } - ], + "outputs": [], "source": [ - "robot.standUpReset()\n", - "controller.command_profile.roll_cmd=0.3" + "controller.command_profile.pitch_cmd=0.0\n", + "controller.command_profile.body_height_cmd=0.1\n", + "controller.command_profile.footswing_height_cmd=0.08\n", + "controller.command_profile.roll_cmd=0.0\n", + "controller.command_profile.stance_width_cmd=0.2\n", + "controller.command_profile.x_vel_cmd=-0.2\n", + "controller.command_profile.y_vel_cmd=0.01\n", + "controller.command_profile.setGaitType(\"pronking\")" ] }, { @@ -202,7 +191,9 @@ "execution_count": null, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "fsm.close()" + ] } ], "metadata": {