commit 5817485882c0808c2028b28f7cc356c44cf32b0f Author: Aditya Pulipaka Date: Tue Feb 10 13:18:20 2026 -0600 init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..791da87 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +stereoCal +__pycache__ +calib \ No newline at end of file diff --git a/blackfly_viewer.py b/blackfly_viewer.py new file mode 100644 index 0000000..9121e49 --- /dev/null +++ b/blackfly_viewer.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python3 + +import rclpy +from rclpy.node import Node + +from sensor_msgs.msg import Image +from cv_bridge import CvBridge + +import cv2 + + +class BlackflyViewer(Node): + def __init__(self): + super().__init__('blackfly_viewer') + + # Change this topic if your driver publishes elsewhere + image_topic = '/right_camera/image_raw' + + self.bridge = CvBridge() + + self.subscription = self.create_subscription( + Image, + image_topic, + self.image_callback, + 10 + ) + + self.get_logger().info(f'Subscribed to {image_topic}') + + def image_callback(self, msg: Image): + try: + # Convert ROS Image -> OpenCV image + frame = self.bridge.imgmsg_to_cv2(msg, desired_encoding='bgr8') + + cv2.imshow('Blackfly Camera', frame) + + # Needed for OpenCV window events + if cv2.waitKey(1) & 0xFF == ord('q'): + self.get_logger().info('Shutting down viewer') + rclpy.shutdown() + + except Exception as e: + self.get_logger().error(f'Image conversion failed: {e}') + + +def main(): + rclpy.init() + node = BlackflyViewer() + + try: + rclpy.spin(node) + except KeyboardInterrupt: + pass + finally: + cv2.destroyAllWindows() + node.destroy_node() + rclpy.shutdown() + + +if __name__ == '__main__': + main() diff --git a/start_camera.launch.py b/start_camera.launch.py new file mode 100644 index 0000000..1d31c12 --- /dev/null +++ b/start_camera.launch.py @@ -0,0 +1,61 @@ +import os +from ament_index_python.packages import get_package_share_directory +from launch import LaunchDescription +from launch_ros.actions import Node, ComposableNodeContainer + +#from perspective of cameras +LEFT_CAMERA_NAME = 'left' +RIGHT_CAMERA_NAME = 'right' +LEFT_CAMERA_NAMESPACE = 'stereo' +RIGHT_CAMERA_NAMESPACE = 'stereo' + +def generate_launch_description(): + config_path = os.path.join( + get_package_share_directory('spinnaker_camera_driver'), + 'config', + 'blackfly_s.yaml' + ) + + return LaunchDescription([ + ComposableNodeContainer( + name='vision_container', + namespace='', + + ) + Node( + package='spinnaker_camera_driver', + executable='camera_driver_node', + name=LEFT_CAMERA_NAME, + namespace=LEFT_CAMERA_NAMESPACE, + parameters=[{ + 'parameter_file': config_path, + 'serial_number': '25282106', + 'camera_info_url': 'file:///home/sentry/camera_ws/stereoCal/left.yaml' + }] + ), + + Node( + package='spinnaker_camera_driver', + executable='camera_driver_node', + name=RIGHT_CAMERA_NAME, + namespace=RIGHT_CAMERA_NAMESPACE, + parameters=[{ + 'parameter_file': config_path, + 'serial_number': '25235293', + 'camera_info_url': 'file:///home/sentry/camera_ws/stereoCal/right.yaml' + }] + ), + + # Node( + # package='stereo_image_proc', + # executable='point_cloud_node', + # namespace='stereo', + # parameters=[{'approximate_sync': True}], + # remappings=[ + # ('left/image_rect_color', 'left/image_rect'), + # ('right/image_rect_color', 'right/image_rect') + # ], + # output='screen' + # ) + + ]) \ No newline at end of file