视频讲解
在《ROS2下编写orbbec相机C++ package并Rviz显示》的基础上,继续添加depth图像的获取及显示
- rgb_publisher_ = this->create_publisher<sensor_msgs::msg::Image>("rgb_image", 10);
- depth_publisher_ = this->create_publisher<sensor_msgs::msg::Image>("depth_image", 10);
-
- rclcpp::Publisher<sensor_msgs::msg::Image>::SharedPtr rgb_publisher_;
- rclcpp::Publisher<sensor_msgs::msg::Image>::SharedPtr depth_publisher_;
将原来的publisher变量变成rgb,并增加depth发布者,同时将深度图像的消息名称命名为depth_image
- void timer_callback()
- {
- //CV_8UC3 8位无符号3通道图像
- cv::Mat rgb_image = cam_.getImg();
- sensor_msgs::msg::Image::SharedPtr rgb_msg = cv_bridge::CvImage(std_msgs::msg::Header(), "bgr8", rgb_image).toImageMsg();
- rgb_publisher_->publish(*rgb_msg);
- //CV_16UC1 16位无符号单通道图像
- cv::Mat depth_image = cam_.getDepth();
- sensor_msgs::msg::Image::SharedPtr depth_msg = cv_bridge::CvImage(std_msgs::msg::Header(), "mono16", depth_image).toImageMsg();
- depth_publisher_->publish(*depth_msg);
- // RCLCPP_INFO(this->get_logger(), "Publishing image");
- }
只需要修改time_callback函数即可,增加cam_.getDetph();图像的类型为16位单通道无符号,所以要将cv_brige的格式改成mono16,不然会出现格式转换有问题的现象
- sudo su
- colcon build --packages-select orbbec_cam_pkg
- source install/setup.bash
- ros2 run orbbec_cam_pkg image_publisher
切换到sudo,编译,运行,另起一个窗口启动Rviz2
再添加一个Image,Topic选择/depth_image,如果图像不显示,则将三个policy全选System Default即可