zoukankan      html  css  js  c++  java
  • ROS 订阅图像节点(1)

    博客

    http://blog.csdn.net/github_30605157/article/details/50990493

    参考ROS原网站

    http://wiki.ros.org/image_transport/Tutorials

    ROS:两个节点同时具有发布和订阅图像信息的功能

    http://blog.csdn.net/ding977921830/article/details/70168877

    发射结点 my_publisher

    #include <ros/ros.h>
    #include <image_transport/image_transport.h>
    #include <opencv2/highgui/highgui.hpp>
    #include <cv_bridge/cv_bridge.h>
    
    int main(int argc, char** argv)
    {
      ros::init(argc, argv, "image_publisher");
      ros::NodeHandle nh;
      image_transport::ImageTransport it(nh);
      image_transport::Publisher pub = it.advertise("camera/image", 1);
    
      cv::Mat image = cv::imread(argv[1], CV_LOAD_IMAGE_COLOR);
      sensor_msgs::ImagePtr msg = cv_bridge::CvImage(std_msgs::Header(), "bgr8", image).toImageMsg();
    
      ros::Rate loop_rate(5);
      while (nh.ok()) {
        pub.publish(msg);
        ros::spinOnce();
        loop_rate.sleep();
      }
    }
    

    接收节点 my_subscriber

    接受完要等待一下

    #include <ros/ros.h>
    #include <image_transport/image_transport.h>
    #include <opencv2/highgui/highgui.hpp>
    #include <cv_bridge/cv_bridge.h>
    
    //cv::Mat image;
    void imageCallback(const sensor_msgs::ImageConstPtr& msg)
    {
      try
      {
       // image = cv_bridge::toCvShare(msg, "bgr8")->image;
       // cv::imshow("view", image);
      //  cvWaitKey(1);
       cv::imshow("view", cv_bridge::toCvShare(msg, "bgr8")->image);
       cvWaitKey(1);
    
      }
      catch (cv_bridge::Exception& e)
      {
        ROS_ERROR("Could not convert from '%s' to 'bgr8'.", msg->encoding.c_str());
      }
    }
    
    int main(int argc, char **argv)
    {
      ros::init(argc, argv, "image_listener");
      ros::NodeHandle nh;
      cv::namedWindow("view", 0);
      cv::startWindowThread();
      image_transport::ImageTransport it(nh);
      image_transport::Subscriber sub = it.subscribe("camera/image", 1, imageCallback);
      
      
      ros::spin();
      cv::destroyWindow("view");
    }
    

    camke.list

    cmake_minimum_required(VERSION 2.8.3)
    project(my_image_transport)
    
    
    find_package(catkin REQUIRED COMPONENTS
      cv_bridge
      image_transport
      OpenCV
    )
    
    
    catkin_package(
    #  INCLUDE_DIRS include
    #  LIBRARIES my_image_transport
      CATKIN_DEPENDS cv_bridge image_transport
    #  DEPENDS system_lib
    )
    
    
    
    include_directories(
    # include
      ${catkin_INCLUDE_DIRS}
      ${OpenCV_INCLUDE_DIRS}
    )
    
    
    
    #build my_publisher and my_subscriber
    add_executable(my_publisher src/my_publisher.cpp)
    target_link_libraries(my_publisher ${catkin_LIBRARIES} ${OpenCV_LIBRARIES})
    
    add_executable(my_subscriber src/my_subscriber.cpp)
    target_link_libraries(my_subscriber ${catkin_LIBRARIES} ${OpenCV_LIBRARIES})
    

     package。xml

    <?xml version="1.0"?>
    <package format="2">
      <name>my_image_transport</name>
      <version>0.0.0</version>
      <description>The my_image_transport package</description>
    
      <!-- One maintainer tag required, multiple allowed, one person per tag -->
      <!-- Example:  -->
      <!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> -->
      <maintainer email="drone@todo.todo">drone</maintainer>
    
    
      <!-- One license tag required, multiple allowed, one license per tag -->
      <!-- Commonly used license strings: -->
      <!--   BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 -->
      <license>TODO</license>
    
    
      <!-- Url tags are optional, but multiple are allowed, one per tag -->
      <!-- Optional attribute type can be: website, bugtracker, or repository -->
      <!-- Example: -->
      <!-- <url type="website">http://wiki.ros.org/my_image_transport</url> -->
    
    
      <!-- Author tags are optional, multiple are allowed, one per tag -->
      <!-- Authors do not have to be maintainers, but could be -->
      <!-- Example: -->
      <!-- <author email="jane.doe@example.com">Jane Doe</author> -->
    
    
      <!-- The *depend tags are used to specify dependencies -->
      <!-- Dependencies can be catkin packages or system dependencies -->
      <!-- Examples: -->
      <!-- Use depend as a shortcut for packages that are both build and exec dependencies -->
      <!--   <depend>roscpp</depend> -->
      <!--   Note that this is equivalent to the following: -->
      <!--   <build_depend>roscpp</build_depend> -->
      <!--   <exec_depend>roscpp</exec_depend> -->
      <!-- Use build_depend for packages you need at compile time: -->
      <!--   <build_depend>message_generation</build_depend> -->
      <!-- Use build_export_depend for packages you need in order to build against this package: -->
      <!--   <build_export_depend>message_generation</build_export_depend> -->
      <!-- Use buildtool_depend for build tool packages: -->
      <!--   <buildtool_depend>catkin</buildtool_depend> -->
      <!-- Use exec_depend for packages you need at runtime: -->
      <!--   <exec_depend>message_runtime</exec_depend> -->
      <!-- Use test_depend for packages you need only for testing: -->
      <!--   <test_depend>gtest</test_depend> -->
      <!-- Use doc_depend for packages you need only for building documentation: -->
      <!--   <doc_depend>doxygen</doc_depend> -->
      <buildtool_depend>catkin</buildtool_depend>
      <build_depend>cv_bridge</build_depend>
      <build_depend>image_transport</build_depend>
      <build_export_depend>cv_bridge</build_export_depend>
      <build_export_depend>image_transport</build_export_depend>
      <build_depend>opencv2</build_depend>
      <exec_depend>cv_bridge</exec_depend>
      <exec_depend>image_transport</exec_depend>
    
    
      <!-- The export tag contains other, unspecified, tags -->
      <export>
        <!-- Other tools can request additional information be placed here -->
    
      </export>
    </package>
    

    测试命令

    发射
    rosrun my_image_ansport my_publisher 2.png 接受 rosrun my_image_transport my_subscriber

     http://www.cvlibs.net/datasets/kitti/eval_odometry.php

  • 相关阅读:
    生成token和获取token
    python异常处理
    获取文件路径
    批量导出和批量安装第三方模块
    python操作从数据库中获取数据的接口
    centos中开机时如何自启动samba服务器
    MSSQL 创建自定义异常
    MSSQL 生成拼音码
    MSSQL FOR MXL PATH 运用(转载)
    MSSQL旋转和反旋转的例子
  • 原文地址:https://www.cnblogs.com/kekeoutlook/p/8031388.html
Copyright © 2011-2022 走看看