-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
466 add radar sensor #522
466 add radar sensor #522
Changes from all commits
634f678
d537803
7ecd33e
08e9711
0af4cc9
ae01b8d
a8a585e
9039a1f
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,54 @@ | ||||||||||||||||||||||||||||||||
#!/usr/bin/env python | ||||||||||||||||||||||||||||||||
import rospy | ||||||||||||||||||||||||||||||||
import ros_numpy | ||||||||||||||||||||||||||||||||
import numpy as np | ||||||||||||||||||||||||||||||||
from sensor_msgs.msg import PointCloud2 | ||||||||||||||||||||||||||||||||
from std_msgs.msg import Float32 | ||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||
class RadarNode: | ||||||||||||||||||||||||||||||||
"""See doc/perception/radar_node.md on | ||||||||||||||||||||||||||||||||
how to configure this node | ||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||
def callback(self, data): | ||||||||||||||||||||||||||||||||
"""Process radar Point2Cloud data and publish minimum velocity. | ||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||
Extracts velocity information from radar data | ||||||||||||||||||||||||||||||||
and publishes the minimum velocity as a | ||||||||||||||||||||||||||||||||
Float32 message | ||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||
Args: | ||||||||||||||||||||||||||||||||
data: Point2Cloud message containing radar data with velocity field | ||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||
coordinates = ros_numpy.point_cloud2.pointcloud2_to_array(data) | ||||||||||||||||||||||||||||||||
msg = np.min(coordinates["Velocity"]) | ||||||||||||||||||||||||||||||||
self.dist_array_radar_publisher.publish(msg) | ||||||||||||||||||||||||||||||||
Comment on lines
+25
to
+27
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Add error handling for radar data processing The callback lacks validation and error handling for the radar data processing. Apply this diff to add proper error handling: - coordinates = ros_numpy.point_cloud2.pointcloud2_to_array(data)
- msg = np.min(coordinates["Velocity"])
- self.dist_array_radar_publisher.publish(msg)
+ try:
+ coordinates = ros_numpy.point_cloud2.pointcloud2_to_array(data)
+ if "Velocity" not in coordinates.dtype.names:
+ rospy.logerr("Radar data missing Velocity field")
+ return
+ if len(coordinates) == 0:
+ rospy.logwarn("Received empty radar data")
+ return
+ msg = np.min(coordinates["Velocity"])
+ self.dist_array_radar_publisher.publish(msg)
+ except Exception as e:
+ rospy.logerr(f"Error processing radar data: {e}") 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||
def listener(self): | ||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||
Initializes the node and it's publishers | ||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||
# run simultaneously. | ||||||||||||||||||||||||||||||||
rospy.init_node("radar_node") | ||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||
# publisher for radar dist_array | ||||||||||||||||||||||||||||||||
self.dist_array_radar_publisher = rospy.Publisher( | ||||||||||||||||||||||||||||||||
rospy.get_param("~image_distance_topic", "/paf/hero/Radar/velocity"), | ||||||||||||||||||||||||||||||||
Float32, | ||||||||||||||||||||||||||||||||
queue_size=10, | ||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||
rospy.Subscriber( | ||||||||||||||||||||||||||||||||
rospy.get_param("~source_topic", "/carla/hero/RADAR"), | ||||||||||||||||||||||||||||||||
PointCloud2, | ||||||||||||||||||||||||||||||||
self.callback, | ||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||
rospy.spin() | ||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||
if __name__ == "__main__": | ||||||||||||||||||||||||||||||||
radar_node = RadarNode() | ||||||||||||||||||||||||||||||||
radar_node.listener() |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
# Radar Node | ||
|
||
**Summary:** This page explains what the radar sensor does. | ||
|
||
- [Radar offsets](#radar-offsets) | ||
- [Radar specification](#radar-specification) | ||
- [Radar data output for each detected point](#radar-data-output-for-each-detected-point) | ||
- [Todo](#todo) | ||
|
||
## Radar offsets | ||
|
||
- x: 2 | ||
- y: 0 | ||
- z: 0.7 | ||
|
||
## Radar specification | ||
|
||
- points per second: 1500 points generated by all lasers per second | ||
- maximum range: 100 meters | ||
- horizontal fov: 30 degrees | ||
- vertical fov: 30 degrees | ||
|
||
## Radar data output for each detected point | ||
|
||
- x | ||
- y | ||
- z | ||
- Range | ||
- Velocity | ||
- AzimuthAngle | ||
- ElevationAngle | ||
|
||
## Todo | ||
|
||
- Discuss further processing of radar data | ||
- Combine lidar, radar and camera data |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Codebase verification
Warning: RADAR topics mismatch detected
The RADAR topics referenced in perception.launch (
/carla/hero/RADAR_filtered
and/carla/hero/RADAR_range
) don't match the actual topics used in the radar_node.py implementation:/carla/hero/RADAR
/paf/hero/Radar/velocity
Additionally, the node doesn't use the parameters
point_cloud_topic
andrange_topic
defined in the launch file.🔗 Analysis chain
Verify the existence of RADAR topics.
The node references filtered RADAR data topics. Let's verify these topics exist in the system.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
Length of output: 175
Script:
Length of output: 6497
Script:
Length of output: 5362