roscpp 编写 图像/字符串 发布器

str_puber.cpp 发布 str

#include "ros/ros.h"
#include "std_msgs/String.h"
#include 


int main(int argc, char **argv) {
    ros::init(argc, argv, "str_puber");
    ros::NodeHandle n;
    ros::Publisher chatter_pub = n.advertise("chatter", 1000);
    ros::Rate loop_rate(10);

    int count = 0;
    while (ros::ok()) {
        std_msgs::String msg;
        std::stringstream ss;
        ss << "hello world " << count; // string stream to ss
        msg.data = ss.str(); // stringstream cvt to str
        ROS_INFO("%s", msg.data.c_str()); // const pointer of str, show sending info

        chatter_pub.publish(msg);

        ros::spinOnce();
        loop_rate.sleep();
        ++count;
    }

    return 0;
}

image_puber 发布 sensor_msgs::Image

  • cv_bridge 将 opencv Mat 转化为 ros sensor_msgs Image,注意编码格式
  • std_msgs::Header 设置图像相关属性,时间戳,sequence
  • CMakeLists.txt 添加 cv_bridge 等库
#include 
#include 
#include 
#include 
#include 
#include 
#include 


int main(int argc, char **argv) {
    ros::init(argc, argv, "image_puber");
    ros::NodeHandle n;
    ros::Publisher chatter_pub = n.advertise("/stereo/rgb/image", 1000);
    ros::Rate loop_rate(10); // 10fps

    // opencv mat Image
    cv::Mat rgb = cv::imread("/home/nvidia/wali_ws/src/stereo/img/rgb.jpg");

    // ros sensor_msg Image, attrs
    sensor_msgs::ImagePtr rgb_msg;
    std_msgs::Header header; // not necessary
    header.frame_id = "/stereo/rgb/image"; // detailed header info
    header.stamp = ros::Time::now(); // time stamp

    unsigned int count = 0;
    while (ros::ok()) {
        header.seq = count;
        rgb_msg = cv_bridge::CvImage(header, "bgr8", rgb).toImageMsg(); // color img
        ROS_INFO("send rgb %d", count); // const pointer of str, show sending info

        chatter_pub.publish(rgb_msg);

        ros::spinOnce();
        loop_rate.sleep();
        ++count;
    }

    return 0;
}

使用 image_view 测试是否收到

roscore
rosrun stereo image_puber
rosrun image_view image_view image:=/stereo/rgb/image

CMakeLists.txt

cmake_minimum_required(VERSION 2.8.3)
project(stereo)

## Compile as C++11, supported in ROS Kinetic and newer
add_compile_options(-std=c++11)

find_package(catkin REQUIRED COMPONENTS
        roscpp
        rospy
        sensor_msgs
        std_msgs
        cv_bridge
        )

find_package(OpenCV REQUIRED)

catkin_package(
        #  INCLUDE_DIRS include
        #  LIBRARIES stereo
        #  CATKIN_DEPENDS roscpp rospy sensor_msgs std_msgs
        #  DEPENDS system_lib
)

###########
## Build ##
###########

## Specify additional locations of header files
## Your package locations should be listed before other locations
include_directories(
        include
        ${catkin_INCLUDE_DIRS}
        ${OpenCV_INCLUDE_DIRS}
)

## Declare a C++ executable
## With catkin_make all packages are built within a single CMake context
## The recommended prefix ensures that target names across packages don't collide
add_executable(str_puber src/str_puber.cpp)
add_executable(image_puber src/image_puber.cpp)

## Add cmake target dependencies of the executable
## same as for the library above

# str_puber
add_dependencies(str_puber
        ${${PROJECT_NAME}_EXPORTED_TARGETS}
        ${catkin_EXPORTED_TARGETS}
        )
target_link_libraries(str_puber
        ${catkin_LIBRARIES}
        )

# image_puber
add_dependencies(image_puber
        ${${PROJECT_NAME}_EXPORTED_TARGETS}
        ${catkin_EXPORTED_TARGETS}
        )
target_link_libraries(image_puber
        ${catkin_LIBRARIES}
        ${OpenCV_LIBRARIES}
        )

你可能感兴趣的:(roscpp 编写 图像/字符串 发布器)