Skip to content

Commit 19b1248

Browse files
sergiopaniegojderobot
authored andcommitted
Record speedometer
1 parent 9e8858d commit 19b1248

File tree

5 files changed

+110
-4
lines changed

5 files changed

+110
-4
lines changed

behavior_metrics/configs/default_carla.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ Behaviors:
2222
BirdEyeView_0:
2323
Name: 'bird_eye_view_0'
2424
Topic: ''
25+
Speedometer:
26+
Speedometer_0:
27+
Name: 'speedometer_0'
28+
Topic: '/carla/ego_vehicle/speedometer'
2529
Actuators:
2630
CARLA_Motors:
2731
Motors_0:
@@ -43,7 +47,7 @@ Behaviors:
4347
ImageTranform: ''
4448
Type: 'CARLA'
4549
Simulation:
46-
World: /home/jderobot/Documents/Projects/BehaviorMetrics/behavior_metrics/configs/CARLA_launch_files/town_04_anticlockwise.launch
50+
World: /home/jderobot/Documents/Projects/BehaviorMetrics/behavior_metrics/configs/CARLA_launch_files/town_01_anticlockwise.launch
4751
Dataset:
4852
In: '/tmp/my_bag.bag'
4953
Out: ''

behavior_metrics/configs/default_carla_multiple.yml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ Behaviors:
2222
BirdEyeView_0:
2323
Name: 'bird_eye_view_0'
2424
Topic: ''
25+
Speedometer:
26+
Speedometer_0:
27+
Name: 'speedometer_0'
28+
Topic: '/carla/ego_vehicle/speedometer'
2529
Actuators:
2630
CARLA_Motors:
2731
Motors_0:
@@ -34,8 +38,8 @@ Behaviors:
3438
'brains/CARLA/brain_carla_bird_eye_deep_learning.py',
3539
'brains/CARLA/brain_carla_bird_eye_deep_learning.py',
3640
'brains/CARLA/brain_carla_bird_eye_deep_learning_x3.py',
37-
'brain_carla_bird_eye_deep_learning_previous_v.py',
38-
'brain_carla_bird_eye_deep_learning_previous_v.py'
41+
'brains/CARLA/brain_carla_bird_eye_deep_learning_previous_v.py',
42+
'brains/CARLA/brain_carla_bird_eye_deep_learning_previous_v.py'
3943
]
4044
PilotTimeCycle: 100
4145
Parameters:
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
import rospy
2+
from std_msgs.msg import Float32
3+
import threading
4+
5+
6+
def speedometer2Speedometer(speedometer):
7+
8+
speed = Speedometer()
9+
10+
speed.data = speedometer.data
11+
now = rospy.get_rostime()
12+
speed.timeStamp = now.secs + (now.nsecs * 1e-9)
13+
14+
return speed
15+
16+
17+
class Speedometer():
18+
19+
def __init__(self):
20+
21+
self.data = 0 # X coord [meters]
22+
self.timeStamp = 0 # Time stamp [s]
23+
24+
def __str__(self):
25+
s = "Speedometer: {\n x: " + str(self.x) + "\n timeStamp: " + str(self.timeStamp) + "\n}"
26+
return s
27+
28+
29+
class ListenerSpeedometer:
30+
'''
31+
ROS Speedometer Subscriber. Speedometer Client to Receive speedometer from ROS nodes.
32+
'''
33+
def __init__(self, topic):
34+
'''
35+
ListenerSpeedometer Constructor.
36+
37+
@param topic: ROS topic to subscribe
38+
@type topic: String
39+
40+
'''
41+
self.topic = topic
42+
self.data = Speedometer()
43+
self.sub = None
44+
self.lock = threading.Lock()
45+
self.start()
46+
47+
def __callback(self, speedometer):
48+
'''
49+
Callback function to receive and save Speedometer.
50+
51+
@param odom: ROS Odometry received
52+
53+
@type odom: Odometry
54+
55+
'''
56+
speedometer = speedometer2Speedometer(speedometer)
57+
58+
self.lock.acquire()
59+
self.data = speedometer
60+
self.lock.release()
61+
62+
def stop(self):
63+
'''
64+
Stops (Unregisters) the client.
65+
66+
'''
67+
self.sub.unregister()
68+
69+
def start(self):
70+
'''
71+
Starts (Subscribes) the client.
72+
73+
'''
74+
self.sub = rospy.Subscriber(self.topic, Float32, self.__callback)
75+
76+
def getSpeedometer(self):
77+
'''
78+
Returns last Speedometer.
79+
80+
@return last Speedometer saved
81+
82+
'''
83+
self.lock.acquire()
84+
speedometer = self.data
85+
self.lock.release()
86+
87+
return speedometer

behavior_metrics/robot/sensors.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from robot.interfaces.laser import ListenerLaser
1717
from robot.interfaces.pose3d import ListenerPose3d
1818
from robot.interfaces.birdeyeview import BirdEyeView
19+
from robot.interfaces.speedometer import ListenerSpeedometer
1920

2021
__author__ = 'fqez'
2122
__contributors__ = []
@@ -61,6 +62,12 @@ def __init__(self, sensors_config):
6162
if bird_eye_view_conf:
6263
self.bird_eye_view = self.__create_sensor(bird_eye_view_conf, 'bird_eye_view')
6364

65+
# Load speedometer
66+
speedometer_conf = sensors_config.get('Speedometer', None)
67+
self.speedometer = None
68+
if speedometer_conf:
69+
self.speedometer = self.__create_sensor(speedometer_conf, 'speedometer')
70+
6471
def __create_sensor(self, sensor_config, sensor_type):
6572
"""Fill the sensor dictionary with instances of the sensor_type and sensor_config"""
6673
sensor_dict = {}
@@ -75,6 +82,8 @@ def __create_sensor(self, sensor_config, sensor_type):
7582
sensor_dict[name] = ListenerPose3d(topic)
7683
elif sensor_type == 'bird_eye_view':
7784
sensor_dict[name] = BirdEyeView()
85+
elif sensor_type == 'speedometer':
86+
sensor_dict[name] = ListenerSpeedometer(topic)
7887

7988
return sensor_dict
8089

@@ -91,6 +100,8 @@ def __get_sensor(self, sensor_name, sensor_type):
91100
sensor = self.pose3d[sensor_name]
92101
elif sensor_type == 'bird_eye_view':
93102
sensor = self.bird_eye_view[sensor_name]
103+
elif sensor_type == 'speedometer':
104+
sensor = self.speedometer[sensor_name]
94105
except KeyError:
95106
return "[ERROR] No existing camera with {} name.".format(sensor_name)
96107

behavior_metrics/utils/controller_carla.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ def record_metrics(self, metrics_record_dir_path, world_counter=None, brain_coun
267267
self.metrics_record_dir_path = metrics_record_dir_path
268268
os.mkdir(self.metrics_record_dir_path + self.time_str)
269269
self.experiment_metrics_bag_filename = self.metrics_record_dir_path + self.time_str + '/' + self.time_str + '.bag'
270-
topics = ['/carla/ego_vehicle/odometry', '/carla/ego_vehicle/collision', '/carla/ego_vehicle/lane_invasion', '/clock']
270+
topics = ['/carla/ego_vehicle/odometry', '/carla/ego_vehicle/collision', '/carla/ego_vehicle/lane_invasion', '/carla/ego_vehicle/speedometer', '/clock']
271271
command = "rosbag record -O " + self.experiment_metrics_bag_filename + " " + " ".join(topics) + " __name:=behav_metrics_bag"
272272
command = shlex.split(command)
273273
with open("logs/.roslaunch_stdout.log", "w") as out, open("logs/.roslaunch_stderr.log", "w") as err:

0 commit comments

Comments
 (0)