之前介绍过使用笔记本或者使用笔记本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。
需要修改,后续补充。