Skip to content

Commit 5420ae6

Browse files
committed
Some fixes
- make local_planner subscription to CarlaVehicleStatus best effort and extend ros compatibility qos setting - adapt cala_walker_agent to carla native ros interface - fix derived_objects_visualizer
1 parent e5bd105 commit 5420ae6

File tree

7 files changed

+43
-23
lines changed

7 files changed

+43
-23
lines changed

carla_ad_agent/src/carla_ad_agent/local_planner.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
import ros_compatibility as roscomp
1818
from ros_compatibility.node import CompatibleNode
19-
from ros_compatibility.qos import QoSProfile, DurabilityPolicy
19+
from ros_compatibility.qos import QoSProfile, DurabilityPolicy, QoSProfileSubscriber
2020

2121
from carla_ad_agent.vehicle_pid_controller import VehiclePIDController
2222
from carla_ad_agent.misc import distance_vehicle
@@ -73,7 +73,7 @@ def __init__(self):
7373
CarlaVehicleStatus,
7474
"/carla/vehicles/{}/vehicle_status".format(role_name),
7575
self.vehicle_status_cb,
76-
qos_profile=10)
76+
QoSProfileSubscriber(depth=10))
7777
self._path_subscriber = self.new_subscription(
7878
Path,
7979
"/carla/vehicles/{}/waypoints".format(role_name),

carla_walker_agent/src/carla_walker_agent/carla_walker_agent.py

+9-9
Original file line numberDiff line numberDiff line change
@@ -44,31 +44,31 @@ def __init__(self):
4444

4545
# wait for ros bridge to create relevant topics
4646
try:
47-
self.wait_for_message("/carla/vehicles/{}/odometry".format(role_name), Odometry, qos_profile=10)
47+
self.wait_for_message("/carla/walkers/{}/object".format(role_name), Odometry, qos_profile=10)
4848
except ROSInterruptException as e:
4949
if not roscomp.ok:
5050
raise e
5151

52-
self._odometry_subscriber = self.new_subscription(
52+
self._object_subscriber = self.new_subscription(
5353
Odometry,
54-
"/carla/vehicles/{}/odometry".format(role_name),
55-
self.odometry_updated,
54+
"/carla/walkers/{}/object".format(role_name),
55+
self.object_updated,
5656
qos_profile=10)
5757

5858
self.control_publisher = self.new_publisher(
5959
CarlaWalkerControl,
60-
"/carla/vehicles/{}/walker_control_cmd".format(role_name),
60+
"/carla/walkers/{}/control/walker_control_cmd".format(role_name),
6161
qos_profile=1)
6262

6363
self._route_subscriber = self.new_subscription(
6464
Path,
65-
"/carla/vehicles/{}/waypoints".format(role_name),
65+
"/carla/walkers/{}/waypoints".format(role_name),
6666
self.path_updated,
6767
qos_profile=QoSProfile(depth=1, durability=DurabilityPolicy.TRANSIENT_LOCAL))
6868

6969
self._target_speed_subscriber = self.new_subscription(
7070
Float64,
71-
"/carla/vehicles/{}/target_speed".format(role_name),
71+
"/carla/walkers/{}/target_speed".format(role_name),
7272
self.target_speed_updated,
7373
qos_profile=10)
7474

@@ -97,9 +97,9 @@ def path_updated(self, path):
9797
for elem in path.poses:
9898
self._waypoints.append(elem.pose)
9999

100-
def odometry_updated(self, odo):
100+
def object_updated(self, odo):
101101
"""
102-
callback on new odometry
102+
callback on new object
103103
"""
104104
self._current_pose = odo.pose.pose
105105

derived_objects_visualizer/derived_objects_visualizer/derived_objects_visualizer.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
import tf2_ros
1111

1212

13-
class ObjectVisualizer(Node):
13+
class DerivedObjectsVisualizer(Node):
1414
def __init__(self):
15-
super().__init__('object_visualizer')
15+
super().__init__('derived_objects_visualizer')
1616

1717
self.declare_parameter("objects_topic", value="/carla/world/objects_with_covariance")
1818

derived_objects_visualizer/derived_objects_visualizer/derived_objects_visualizer_main.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
11
import rclpy
22

3-
from object_visualizer.object_visualizer import ObjectVisualizer
3+
from derived_objects_visualizer.derived_objects_visualizer import DerivedObjectsVisualizer
44

55

66
def main(args=None):
77
rclpy.init(args=args)
88

99
# create nodes
10-
object_visualizer = ObjectVisualizer()
10+
derived_objects_visualizer = DerivedObjectsVisualizer()
1111

1212
# create executor and add nodes
1313
executor = rclpy.executors.MultiThreadedExecutor()
14-
if(not executor.add_node(object_visualizer)):
15-
object_visualizer.get_logger().error(
16-
"Can't add object_visualizer to executor")
14+
if(not executor.add_node(derived_objects_visualizer)):
15+
derived_objects_visualizer.get_logger().error(
16+
"Can't add derived_objects_visualizer to executor")
1717

1818
try:
1919
executor.spin()
2020
except KeyboardInterrupt:
2121
print("Keyboard interrupt. Shutting down.")
2222

23-
object_visualizer.before_shutdown()
23+
derived_objects_visualizer.before_shutdown()
2424
if rclpy.ok():
2525
rclpy.shutdown()
2626

ros_compatibility/src/ros_compatibility/node.py

+7-2
Original file line numberDiff line numberDiff line change
@@ -123,11 +123,16 @@ def destroy(self):
123123
ros_compatibility.qos.DurabilityPolicy.TRANSIENT_LOCAL: rclpy.qos.DurabilityPolicy.TRANSIENT_LOCAL,
124124
ros_compatibility.qos.DurabilityPolicy.VOLATILE: rclpy.qos.DurabilityPolicy.VOLATILE
125125
}
126-
126+
_RELIABILITY_POLICY_MAP = {
127+
ros_compatibility.qos.ReliabilityPolicy.BEST_EFFORT: rclpy.qos.ReliabilityPolicy.BEST_EFFORT,
128+
ros_compatibility.qos.ReliabilityPolicy.RELIABLE: rclpy.qos.ReliabilityPolicy.RELIABLE
129+
}
130+
127131
def _get_rclpy_qos_profile(qos_profile):
128132
return rclpy.qos.QoSProfile(
129133
depth=qos_profile.depth,
130-
durability=_DURABILITY_POLICY_MAP[qos_profile.durability]
134+
durability=_DURABILITY_POLICY_MAP[qos_profile.durability],
135+
reliability=_RELIABILITY_POLICY_MAP[qos_profile.reliability]
131136
)
132137

133138
class CompatibleNode(Node):

ros_compatibility/src/ros_compatibility/qos.py

+16-1
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,26 @@ class DurabilityPolicy(enum.Enum):
1515
TRANSIENT_LOCAL = 1
1616
VOLATILE = 2
1717

18+
class ReliabilityPolicy(enum.Enum):
19+
20+
RELIABLE = 1
21+
BEST_EFFORT = 2
22+
1823

1924
class QoSProfile(object):
20-
def __init__(self, depth, durability=DurabilityPolicy.VOLATILE):
25+
def __init__(self, depth, durability=DurabilityPolicy.VOLATILE, reliability=ReliabilityPolicy.RELIABLE):
2126
self.depth = depth
2227
self.durability = durability
28+
self.reliability = reliability
2329

2430
def is_latched(self):
2531
return self.durability == DurabilityPolicy.TRANSIENT_LOCAL
32+
33+
class QoSProfilePublisher(QoSProfile):
34+
def __init__(self, depth, durability=DurabilityPolicy.TRANSIENT_LOCAL, reliability=ReliabilityPolicy.RELIABLE):
35+
super(QoSProfilePublisher, self).__init__(depth, durability, reliability)
36+
37+
class QoSProfileSubscriber(QoSProfile):
38+
def __init__(self, depth, durability=DurabilityPolicy.VOLATILE, reliability=ReliabilityPolicy.BEST_EFFORT):
39+
super(QoSProfileSubscriber, self).__init__(depth, durability, reliability)
40+

0 commit comments

Comments
 (0)