资讯详情

ROS2+Gazebo+OpenCV之mobot仿真视觉传感器

之前介绍过使用笔记本或者使用笔记本USB一些摄像头的方法,比如获取图像,然后简单处理。

预备基础:

ROS2之OpenCV微笑入门资料

ROS2之OpenCV如何理解代码

ROS2机器人个人教程博客汇总(2021共6套)


其中:

使用机器人操作系统ROS 2和仿真软件Gazebo 服务高级实战(八)- mobot行驶至目标位置


当然,这些案例dashing/foxy/galactic/humble都是通用的。

如:ROS2之OpenCV同样,如何理解代码。

只需修改一行代码即可实现:

在这种环境下,基本的视觉教学任务,如红绿识别和赛道巡线。

在充分听取学生建议的基础上,对三轮考试进行了优化和改进,并全部公开。


提示:

图片右侧显示mobot_camera,参考:


参考python代码:

# Basic ROS 2 program to subscribe to real-time streaming  # video from your built-in webcam # Author: # - Addison Sears-Collins # - https://automaticaddison.com    # Import the necessary libraries import rclpy # Python library for ROS 2 from rclpy.node import Node # Handles the creation of nodes from sensor_msgs.msg import Image # Image is the message type from cv_bridge import CvBridge # Package to convert between ROS and OpenCV Images import cv2 # OpenCV library   class ImageSubscriber(Node):   """   Create an ImageSubscriber class, which is a subclass of the Node class.   """   def __init__(self):     """     Class constructor to set up the node     """     # Initiate the Node class's constructor and give it a name     super().__init__('image_subscriber')            # Create the subscriber. This subscriber will receive an Image     # from the video_frames topic. The queue size is 10 messages.     self.subscription = self.create_subscription(       Image,        'video_frames',        self.listener_callback,        10)     self.subscription # prevent unused variable warning            # Used to convert between ROS and OpenCV images     self.br = CvBridge()       def listener_callback(self, data):     """     Callback function.     """     # Display the message on the console     self.get_logger().info('Receiving video frame')       # Convert ROS Image message to OpenCV image     current_frame = self.br.imgmsg_to_cv2(data)          # Display image     cv2.imshow("camera", current_frame)          cv2.waitKey(1)    def main(args=None):      # Initialize the rclpy library   rclpy.init(args=args)      # Create the node   image_subscriber = ImageSubscriber()      # Spin the node so the callback function is called.   rclpy.spin(image_subscriber)      # Destroy the node explicitly   # (optional - otherwise it will be done automatically   # when the garbage collector destroys the node object)   image_subscriber.destroy_node()      # Shutdown the ROS client library for Python   rclpy.shutdown()    if __name__ == '__main__':   main()

需要修改:

    # from the video_frames topic. The queue size is 10 messages.     self.subscription = self.create_subscription(       Image,        '**********',        self.listener_callback,        10)

频率为10hz,可修改为模拟虚拟传感器对应的发布频率,*******修改为相应的主题。

修改不重要:

    # Display image     cv2.imshow("camera", current_frame)

部分调试过程截图:

全景

局部


部分版本的接口函数不一致:

dashing foxy一切ok。

需要修改,后续补充。


标签: usb智能传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台