Autonomous Racing  1
f1tenth Project Group of Technical University Dortmund, Germany
reset_car.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 
3 import rospy
4 from gazebo_msgs.srv import SetModelState
5 from gazebo_msgs.msg import ModelState, ModelStates
6 from tf.transformations import quaternion_from_euler
7 
8 import math
9 import random
10 
11 from track import track, Point
12 
13 
14 def set_pose(position, orientation):
15  state = ModelState()
16  state.model_name = "racer"
17  state.pose.position.x = position.x
18  state.pose.position.y = position.y
19  state.pose.position.z = 0
20 
21  q = quaternion_from_euler(orientation, math.pi, 0)
22  state.pose.orientation.x = q[0]
23  state.pose.orientation.z = q[1]
24  state.pose.orientation.w = q[2]
25  state.pose.orientation.y = q[3]
26 
27  set_model_state(state)
28 
29 
30 def reset(progress=0, angle=0, offset_from_center=0, forward=True):
31  position = track.get_position(progress * track.length, offset_from_center)
32  angle += position.angle
33  if forward:
34  angle += math.pi
35  set_pose(position.point, angle)
36 
37 
38 def reset_random(max_angle=0, max_offset_from_center=0, forward=True):
39  reset(random.random(), (random.random() * 2 - 1) * max_angle,
40  (random.random() * 2 - 1) * max_offset_from_center, forward)
41 
42 
43 set_model_state = None
44 
45 
47  global set_model_state
48  rospy.wait_for_service('/gazebo/set_model_state')
49  set_model_state = rospy.ServiceProxy(
50  '/gazebo/set_model_state', SetModelState)
51 
52 
53 if __name__ == "__main__":
54  rospy.init_node("reset_car")
56  set_pose(Point(0, 0), math.pi)
def set_pose(position, orientation)
Definition: reset_car.py:14
def reset(progress=0, angle=0, offset_from_center=0, forward=True)
Definition: reset_car.py:30
def reset_random(max_angle=0, max_offset_from_center=0, forward=True)
Definition: reset_car.py:38
Point
Definition: circle.py:8