ROS2+Gazebo+OpenCV之mobot仿真视觉传感器
之前介绍了使用笔记本或者USB摄像头的一些方法,比如获取图像然后再做简单处理。
预备基础:
ROS2之OpenCV的微笑入门资料篇
ROS2之OpenCV怎么理解一段代码
ROS2机器人个人教程博客汇总(2021共6套)
其中:
使用机器人操作系统ROS 2和仿真软件Gazebo 9服务进阶实战(八)- 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 libraryclass 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 namesuper().__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 imagesself.br = CvBridge()def listener_callback(self, data):"""Callback function."""# Display the message on the consoleself.get_logger().info('Receiving video frame')# Convert ROS Image message to OpenCV imagecurrent_frame = self.br.imgmsg_to_cv2(data)# Display imagecv2.imshow("camera", current_frame)cv2.waitKey(1)def main(args=None):# Initialize the rclpy libraryrclpy.init(args=args)# Create the nodeimage_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 Pythonrclpy.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 imagecv2.imshow("camera", current_frame)
部分调试过程截图:
全景

局部

部分版本接口函数不一致:
dashing+foxy一切ok。
需要修改,后续再补充。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
