From 06f003be7410b41732e46cb6a70bc1d68bd0a5e9 Mon Sep 17 00:00:00 2001 From: paLeziart <paleziart@laas.fr> Date: Thu, 19 Mar 2020 17:21:14 +0100 Subject: [PATCH] Gamepad implementation with a new script + 2 test functions for profiling + moving camera in PyBullet --- Joystick.py | 21 ++++--- TSID_Debug_controller_four_legs_fb_vel.py | 26 ++++++-- bauzil_stairs.stl | Bin 0 -> 32684 bytes bauzil_stairs.urdf | 24 ++++++++ gamepadClient.py | 72 ++++++++++++++++++++++ main.py | 13 ++-- utils.py | 3 + 7 files changed, 143 insertions(+), 16 deletions(-) create mode 100644 bauzil_stairs.stl create mode 100644 bauzil_stairs.urdf create mode 100644 gamepadClient.py diff --git a/Joystick.py b/Joystick.py index c60e2891..ee9e888a 100644 --- a/Joystick.py +++ b/Joystick.py @@ -2,6 +2,7 @@ import numpy as np from time import clock +import gamepadClient as gC # import inputs @@ -21,9 +22,11 @@ class Joystick: self.vX = 0. self.vY = 0. self.vYaw = 0. - self.VxScale = 0.1/32768 - self.VyScale = 0.1/32768 - self.vYawScale = 0.4/32768 + self.VxScale = 0.1 + self.VyScale = 0.1 + self.vYawScale = 0.4 + + self.gp = gC.GamepadClient() def update_v_ref(self, k_loop): """events = inputs.get_gamepad() @@ -36,14 +39,18 @@ class Joystick: self.vY = event.state * self.VyScale if event.code == 'ABS_RX': self.vYaw = event.state * self.vYawScale - print(- self.vY, - self.vX, - self.vYaw) + print(- self.vY, - self.vX, - self.vYaw)""" - self.v_ref = np.array([[- self.vY, - self.vX, 0.0, 0.0, 0.0, - self.vYaw]]).T""" + self.vX = self.gp.leftJoystickX.value * self.VxScale + self.vY = self.gp.leftJoystickY.value * self.VxScale + self.vYaw = self.gp.rightJoystickX.value * self.vYawScale + # print(- self.vY, - self.vX, - self.vYaw) + self.v_ref = np.array([[- self.vY, - self.vX, 0.0, 0.0, 0.0, - self.vYaw]]).T # Change reference velocity during the simulation (in trunk frame) # Moving forwards - if k_loop == 200: - self.v_ref = np.array([[0.1, 0.0, 0.0, 0.0, 0.0, 0.0]]).T + """if k_loop == 200: + self.v_ref = np.array([[0.1, 0.0, 0.0, 0.0, 0.0, 0.0]]).T""" """ # Turning if k_loop == 1500: diff --git a/TSID_Debug_controller_four_legs_fb_vel.py b/TSID_Debug_controller_four_legs_fb_vel.py index 78b4a4af..242935b9 100644 --- a/TSID_Debug_controller_four_legs_fb_vel.py +++ b/TSID_Debug_controller_four_legs_fb_vel.py @@ -91,7 +91,7 @@ class controller: self.memory_contacts = R @ self.shoulders.copy() # Foot trajectory generator - max_height_feet = 0.04 + max_height_feet = 0.05 t_lock_before_touchdown = 0.05 self.ftgs = [ftg.Foot_trajectory_generator(max_height_feet, t_lock_before_touchdown) for i in range(4)] @@ -509,11 +509,14 @@ class controller: def update_footsteps(self, k_simu, k_loop, looping, sequencer, mpc_interface): - self.t_remaining[0, [1, 2]] = np.max((0.0, 0.16 * (looping*0.5 - k_loop) * 0.001)) + """# self.t_remaining[0, [1, 2]] = np.max((0.0, 0.16 * (looping*0.5 - k_loop) * 0.001)) + self.t_remaining[0, [1, 2]] = 0.16 * (looping*0.5 - k_loop) * 0.001 + (self.t_remaining[0, [1, 2]])[self.t_remaining[0, [1, 2]] < 0.0] = 0.0 if k_loop < int(looping*0.5): self.t_remaining[0, [0, 3]] = 0.0 else: - self.t_remaining[0, [0, 3]] = 0.16 * (looping - k_loop) * 0.001 + self.t_remaining[0, [0, 3]] = 0.16 * (looping - k_loop) * 0.001""" + self.test_tmp1(k_loop, looping) # Get PyBullet velocity in local frame """self.vu_m[0:2, 0:1] = mpc_interface.lV[0:2, 0:1] @@ -527,8 +530,23 @@ class controller: """for i in range(4): self.footsteps[:, i:(i+1)] = mpc_interface.o_shoulders[0:2, i:(i+1)] + \ (mpc_interface.oMl.rotation @ self.fstep_planner.footsteps_tsid[:, i]).T[0:2, :]""" - self.footsteps = np.array(mpc_interface.o_shoulders + (mpc_interface.oMl.rotation @ self.fstep_planner.footsteps_tsid))[0:2, :] + # self.footsteps = np.array(mpc_interface.o_shoulders + (mpc_interface.oMl.rotation @ self.fstep_planner.footsteps_tsid))[0:2, :] + self.test_tmp2(mpc_interface) + + return 0 + def test_tmp1(self, k_loop, looping): + # self.t_remaining[0, [1, 2]] = np.max((0.0, 0.16 * (looping*0.5 - k_loop) * 0.001)) + self.t_remaining[0, [1, 2]] = 0.16 * (looping*0.5 - k_loop) * 0.001 + (self.t_remaining[0, [1, 2]])[self.t_remaining[0, [1, 2]] < 0.0] = 0.0 + if k_loop < int(looping*0.5): + self.t_remaining[0, [0, 3]] = 0.0 + else: + self.t_remaining[0, [0, 3]] = 0.16 * (looping - k_loop) * 0.001 + return 0 + + def test_tmp2(self, mpc_interface): + self.footsteps = np.array(mpc_interface.o_shoulders + (mpc_interface.oMl.rotation @ self.fstep_planner.footsteps_tsid))[0:2, :] return 0 def update_ref_forces(self, mpc_interface, mpc): diff --git a/bauzil_stairs.stl b/bauzil_stairs.stl new file mode 100644 index 0000000000000000000000000000000000000000..c75c11b9c75eccda0502c24f645bec841a864c69 GIT binary patch literal 32684 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 SuB)p_0c+Pe-<Sc;vi}G7dLKam literal 0 HcmV?d00001 diff --git a/bauzil_stairs.urdf b/bauzil_stairs.urdf new file mode 100644 index 00000000..022d7ba9 --- /dev/null +++ b/bauzil_stairs.urdf @@ -0,0 +1,24 @@ +<robot name="bauzil_stairs.urdf"> + <link concave="yes" name="baseLink"> + <inertial> + <origin rpy="0 0 0" xyz="0 0 0"/> + <mass value="0.0"/> + <inertia ixx="0" ixy="0" ixz="0" iyy="0" iyz="0" izz="0"/> + </inertial> + <visual> + <origin rpy="0 0 3.1415" xyz="-0.9 1.8 -0.01"/> + <geometry> + <mesh filename="bauzil_stairs.stl" scale="1 1 0.3"/> + </geometry> + <material name="red"> + <color rgba="1 0 0 1"/> + </material> + </visual> + <collision concave="yes"> + <origin rpy="0 0 3.1415" xyz="-0.9 1.8 -0.01"/> + <geometry> + <mesh filename="bauzil_stairs.stl" scale="1 1 0.3"/> + </geometry> + </collision> + </link> +</robot> \ No newline at end of file diff --git a/gamepadClient.py b/gamepadClient.py new file mode 100644 index 00000000..c2e3f65f --- /dev/null +++ b/gamepadClient.py @@ -0,0 +1,72 @@ +''' +Simple python script to get Asyncronous gamepad inputs +Thomas FLAYOLS - LAAS CNRS +From https://github.com/thomasfla/solopython + +Use: +To display data, run "python gamepadClient.py" +''' +import inputs +import time +from multiprocessing import Process +from multiprocessing.sharedctypes import Value +from ctypes import c_double, c_bool + + +class GamepadClient(): + def __init__(self): + self.running = Value(c_bool, lock=True) + self.startButton = Value(c_bool, lock=True) + self.leftJoystickX = Value(c_double, lock=True) + self.leftJoystickY = Value(c_double, lock=True) + self.rightJoystickX = Value(c_double, lock=True) + self.rightJoystickY = Value(c_double, lock=True) + + self.startButton.value = False + self.leftJoystickX.value = 0.0 + self.leftJoystickY.value = 0.0 + self.rightJoystickX.value = 0.0 + self.rightJoystickY.value = 0.0 + + args = (self.running, self.startButton, self.leftJoystickX, + self.leftJoystickY, self.rightJoystickX, self.rightJoystickY) + self.process = Process(target=self.run, args=args) + self.process.start() + time.sleep(0.2) + + def run(self, running, startButton, leftJoystickX, leftJoystickY, rightJoystickX, rightJoystickY): + running.value = True + while(running.value): + events = inputs.get_gamepad() + for event in events: + #print(event.ev_type, event.code, event.state) + if event.ev_type == 'Absolute': + if event.code == 'ABS_X': + leftJoystickX.value = event.state / 32768.0 + if event.code == 'ABS_Y': + leftJoystickY.value = event.state / 32768.0 + if event.code == 'ABS_RX': + rightJoystickX.value = event.state / 32768.0 + if event.code == 'ABS_RY': + rightJoystickY.value = event.state / 32768.0 + if (event.ev_type == 'Key'): + if event.code == 'BTN_START': + startButton.value = event.state + print (event.state) + def stop(self): + self.running.value = False + self.process.terminate() + self.process.join() + + +if __name__ == "__main__": + gp = GamepadClient() + for i in range(1000): + print("LX = ", gp.leftJoystickX.value, end=" ; ") + print("LY = ", gp.leftJoystickY.value, end=" ; ") + print("RX = ", gp.rightJoystickX.value, end=" ; ") + print("RY = ", gp.rightJoystickY.value, end=" ; ") + print("start = ",gp.startButton.value) + time.sleep(0.1) + + gp.stop() diff --git a/main.py b/main.py index d3a7b332..b6c72d41 100644 --- a/main.py +++ b/main.py @@ -28,8 +28,8 @@ N_SIMULATION = 1000 # number of time steps simulated # Initialize the error for the simulation time time_error = False -t_list_mpc = [] -t_list_tsid = [] +t_list_mpc = [0] * int(N_SIMULATION) +t_list_tsid = [0] * int(N_SIMULATION) # Enable/Disable Gepetto viewer enable_gepetto_viewer = False @@ -66,7 +66,7 @@ for k in range(int(N_SIMULATION)): time_start = time.time() - if (k % 100) == 0: + if (k % 1000) == 0: print("Iteration: ", k) #################################################################### @@ -101,6 +101,9 @@ for k in range(int(N_SIMULATION)): pyb.resetBaseVelocity(pyb_sim.sphereId2, linearVelocity=[-3.0, 0.0, 2.0]) flag_sphere2 = False + pyb.resetDebugVisualizerCamera(cameraDistance=0.75, cameraYaw=50, cameraPitch=-35, + cameraTargetPosition=[qmes12[0, 0],qmes12[1, 0] + 0.0, 0.0]) + ######################## # Update MPC interface # ######################## @@ -211,7 +214,7 @@ for k in range(int(N_SIMULATION)): time_spent = time.time() - time_mpc # Logging the time spent - t_list_mpc.append(time_spent) + t_list_mpc[k] = time_spent # Visualisation with gepetto viewer if enable_gepetto_viewer: @@ -315,7 +318,7 @@ for k in range(int(N_SIMULATION)): time_spent = time.time() - time_start # Logging the time spent - t_list_tsid.append(time_spent) + t_list_tsid[k] = time_spent ############ # PYBULLET # diff --git a/utils.py b/utils.py index 018b8665..cdbe39dc 100644 --- a/utils.py +++ b/utils.py @@ -210,6 +210,9 @@ class pybullet_simulator: # Load horizontal plane pyb.setAdditionalSearchPath(pybullet_data.getDataPath()) self.planeId = pyb.loadURDF("plane.urdf") + """self.stairsId = pyb.loadURDF("../../../../../Documents/Git-Repositories/mpc-tsid/bauzil_stairs.urdf")#, + #basePosition=[-1.25, 3.5, -0.1], + #baseOrientation=pyb.getQuaternionFromEuler([0.0, 0.0, 3.1415]))""" mesh_scale = [1.0, 0.1, 0.02] visualShapeId = pyb.createVisualShape(shapeType=pyb.GEOM_MESH, -- GitLab