lawarob-wheeled/Ex4_ackerman.py
2025-09-23 05:58:04 +02:00

59 lines
1.6 KiB
Python
Executable File

#!/usr/bin/env python
import numpy as np
from WheeledRobot import AckermanRobotEnv
# AckermanRobot kinematics
r = 0.1
# wheel equations function
def J(dX_R):
"""Transform desired robot velocities to control inputs"""
U = ...
return U
def controller_ackerman(t, X_I, dX_I):
# example controller outputs
radius = 2; period = 10
dX_R_des = np.array([[2*np.pi*radius/period],[0],[2*np.pi/period]])
#dX_R_des = np.array([[1],[0],[0]])
#dX_R_des = np.array([[0],[1],[0]])
#dX_R_des = np.array([[0],[0],[1]])
U = J(dX_R_des)
return U
def run_simulation():
"""Run simulation using Gymnasium environment"""
env = AckermanRobotEnv(render_mode="human")
observation, _ = env.reset()
print("Starting Ackermann Robot Simulation")
print("Controller: Circular motion")
for step in range(200):
# Extract controller inputs from observation
time = observation[6] # Current time
X_I = observation[:3].reshape(-1, 1) # State [x, y, theta]
dX_I = observation[3:6].reshape(-1, 1) # Derivatives [dx, dy, dtheta]
# Call original controller
U = controller_ackerman(time, X_I, dX_I)
# Step environment
observation, reward, terminated, truncated, _ = env.step(U.flatten())
# Render the environment
env.render()
if terminated or truncated:
print(f"Simulation ended at step {step}")
break
input("Press Enter to close the simulation window...")
env.close()
print("Simulation completed")
if __name__ == "__main__":
run_simulation()