Conversation
Removed RGBD and color/depth enabling options from launch command.
Updated input mode handling and point cloud topic subscriptions. Improved empty spot finding logic and added error handling for plane segmentation.
Implemented a scoring system which would favour spots far from the objects, but also close to the center of the table
…able segmentation
Change direction of arrow
Make sure the placed object would fit into the table
Updated README to focus on table segmentation and removed sections related to object detection and pose estimation.
Removed unused console scripts for OpenCV nodes.
Added instructions for running object segmentation and updated table segmentation command.
Added instructions for running object and table segmentation, including parameters and example commands.
Added instructions for running table height predictor and floor detection, along with results and methodology.
Predicts the Height of varying heights of Table
Added Action Server for Perception
Added instructions for launching perception and running action vision manager.
There was a problem hiding this comment.
Pull request overview
This is a major "Release 3" that adds significant new functionality to the perception and robotics system, including table height prediction, table segmentation for object placement, action server infrastructure, and tool detection capabilities.
Key Changes
- New table_height_predictor package: Implements table height estimation using YOLO-World and SAM models with RANSAC-based floor detection
- Enhanced perception capabilities: Adds table segmentation, object segmentation with sphere approximation, and action-based vision pipeline management
- Action server infrastructure: Introduces custom ROS 2 action interfaces and vision manager for coordinated perception tasks
- Tool detection training: Includes training scripts and demo code for YOLOv8 model fine-tuning
- Documentation: Adds comprehensive feature readmes for new capabilities
Reviewed changes
Copilot reviewed 49 out of 128 changed files in this pull request and generated 25 comments.
Show a summary per file
| File | Description |
|---|---|
| src/table_height_predictor/table_height_predictor/table_height_node.py | Implements table height estimation using YOLO-World, SAM, and RANSAC for floor detection |
| src/table_height_predictor/table_height_predictor/floor_detector_node.py | Provides floor plane segmentation from point clouds using Open3D RANSAC |
| src/perception/perception/table_segmentation.py | Finds empty spots on tables for object placement using plane segmentation and collision checking |
| src/perception/perception/segment_object.py | Segments objects and approximates them as spheres for collision avoidance |
| src/perception/perception/action_yolo_object_detection.py | YOLO detection node with lifecycle management via service toggle |
| src/perception/perception/action_pose_pca.py | Pose estimation node with PCA-based orientation and lifecycle management |
| src/perception/perception/action_vision_manager.py | Action server that coordinates YOLO and pose estimation nodes with temporal averaging |
| src/my_robot_interfaces/action/RunVision.action | Custom action definition for vision pipeline execution |
| src/perception/setup.py | Updates console script entry points for new perception nodes |
| Feature_Readme/*.md | Documentation for table height, table segmentation, action server, and tool detection features |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| @@ -0,0 +1,22 @@ | |||
| ### Running Table Height | |||
| ```code | |||
| ros2 run table_height_predictor table_heigt | |||
There was a problem hiding this comment.
Typo in command: 'table_heigt' should be 'table_height'
| from ultralytics import YOLO | ||
| from ultralytics.engine.results import Boxes | ||
| import torch | ||
| import cv2 |
There was a problem hiding this comment.
Import of 'cv2' is not used.
| @@ -0,0 +1,56 @@ | |||
| import rclpy | |||
| from rclpy.node import Node | |||
| from sensor_msgs.msg import Image, PointCloud2, PointField | |||
There was a problem hiding this comment.
Import of 'PointField' is not used.
| from sensor_msgs.msg import Image, PointCloud2, PointField | ||
| from cv_bridge import CvBridge | ||
| import numpy as np | ||
| import struct |
There was a problem hiding this comment.
Import of 'struct' is not used.
| import struct | ||
| import sensor_msgs_py.point_cloud2 as pc2 | ||
| from transforms3d.quaternions import mat2quat | ||
| from tf2_ros import TransformBroadcaster |
There was a problem hiding this comment.
Import of 'TransformBroadcaster' is not used.
| node = YoloDetectorNode() | ||
| try: | ||
| rclpy.spin(node) | ||
| except KeyboardInterrupt: |
There was a problem hiding this comment.
'except' clause does nothing but pass and there is no explanatory comment.
| node = FloorDetectorNode() | ||
| try: | ||
| rclpy.spin(node) | ||
| except KeyboardInterrupt: |
There was a problem hiding this comment.
'except' clause does nothing but pass and there is no explanatory comment.
| # Sanity Check: Floor must be visibly lower (higher Y value) than table | ||
| if floor_y_at_table < t_y + 0.1: | ||
| floor_y_at_table = None # Invalid, floor appeared above table | ||
| except: |
There was a problem hiding this comment.
'except' clause does nothing but pass and there is no explanatory comment.
| node = TableHeightNode() | ||
| try: | ||
| rclpy.spin(node) | ||
| except KeyboardInterrupt: pass |
There was a problem hiding this comment.
'except' clause does nothing but pass and there is no explanatory comment.
| if self.use_synthetic: | ||
| frame = self.synthetic_frame.copy() | ||
| # Add some noise or movement? | ||
| pass |
There was a problem hiding this comment.
Unnecessary 'pass' statement.
No description provided.