当前位置: 首页 > news >正文

ros(一)使用消息传递图像+launch启动文件

1)第一步:构建工作空间

mkdir -p test_ws/src
cd test_ws/src
catkin_create_pkg  test_launch  roscpp cv_bridge image_transport sensor_msgs
cd test_ws
catkin_make

这时候发现 test_ws工作空间下有了 build和 devel文件夹,build主要存放的就是编译过程文件,devel主要存放的就是动态库、静态库和可执行文件。

2)编写程序

在 test_launch/src文件夹下,新建一个img_pub.cpp和一个 img_sub.cpp文件

img_pub.cpp文件内容如下:

#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, "publisher_img");ros::NodeHandle nh;image_transport::ImageTransport it(nh);image_transport::Publisher pub = it.advertise("image", 1);cv::Mat image = cv::imread("/home/slamugv/111.jpg");ROS_INFO("Image is Empty %d  %d!",image.cols, image.rows);if (image.empty()){ROS_INFO("Image is Empty!");}sensor_msgs::ImagePtr msg = cv_bridge::CvImage(std_msgs::Header(), "bgr8", image).toImageMsg();ros::Rate loop_rate(5);while(nh.ok()){ROS_INFO("Image is Empty %d  %d!",image.cols, image.rows);pub.publish(msg);ros::spinOnce();loop_rate.sleep();}
}

img_sub.cpp文件内容如下:

#include <ros/ros.h>
#include <image_transport/image_transport.h>
#include <opencv2/highgui/highgui.hpp>
#include <cv_bridge/cv_bridge.h>void imageCallback(const sensor_msgs::ImageConstPtr& msg)
{try{cv::Mat image = cv_bridge::toCvCopy(msg,"bgr8")->image;ROS_INFO("Image is Empty %d  %d!",image.cols, image.rows);cv::imshow("view", image);cv::waitKey(5);}catch(const cv_bridge::Exception& e){ROS_ERROR("cloud not convert from %s to bgr8", msg->encoding.c_str());std::cerr << e.what() << '\n';}}int main(int argc, char** argv)
{ros::init(argc, argv, "sublisher_img");ros::NodeHandle nh;cv::namedWindow("view");// cv::startWindowThread();image_transport::ImageTransport it(nh);image_transport::Subscriber sub = it.subscribe("image", 1, imageCallback);ros::spin();// cv::destroyWindow();// cv::destroyWindow("view");// cv::Mat image = cv::imread("/home/ghigher/workplace/pointcloud_ws/src/pub_sub_image/images/ros_logo.png");// if (image.empty())// {//     ROS_INFO("Image is Empty!");// }// 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();// }
}

写完程序后,还需要修改一下Cmakelist.txt,具体的在

catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES test_launch
#  CATKIN_DEPENDS cv_bridge image_transport roscpp sensor_msgs
#  DEPENDS system_lib
)###########
## Build ##
###########

后面加上

add_executable(img_pub src/img_pub.cpp)
target_link_libraries(img_pub ${catkin_LIBRARIES} ${Opencv_LIBS}) add_executable(img_sub src/img_sub.cpp)
target_link_libraries(img_sub ${catkin_LIBRARIES} ${Opencv_LIBS}) 

然后使用catkin_make编译一下,看看书在devel/lib文件夹下是否生成了test_launch/img_pub和test_launch/img_sub可执行文件。

3)尝试先用rosrun pkg node_name先把程序跑起来,然后再说其他的。

4)编写launch文件

首先在test_launch文件夹下新建一个launch文件夹,然后使用touch test_launch.launch命令,新建一个launch文件。

<launch><node pkg = "test_launch" type = "img_sub" name = "img_sub" output = "screen"/><node pkg = "test_launch" type = "img_pub" name = "img_pub" output = "screen"/></launch>

然后使用

catkin_make
source ./devel/setup.bash
roslaunch test_launch test_launch.launch

就可以把程序给启动起来。

http://www.lryc.cn/news/574611.html

相关文章:

  • 通过Prompt提示构建思维链
  • git操作练习(3)
  • WHAT - React Native 的 Expo Router
  • 华为云Flexus+DeepSeek征文|华为云ModelArts Studio:利用New API实现大模型网关与AI资产管理的无缝对接
  • 梳理React中的fiber架构
  • 学历信息查询API (IVYZ9A2B) 的对接实战 | 天远API
  • WPF/Net Core 简单显示PDF
  • WEB安全--Java安全--jsp webshell免杀1
  • 原子操作(CAS)
  • 【AI大模型】Spring AI 基于Redis实现对话持久存储详解
  • 打包上传到Linux部署并启动
  • 鸿蒙 FolderStack 组件全解析:折叠屏悬停布局开发指南
  • kvm console 的使用
  • linux网 络
  • 计算机基础和Java编程的练习题
  • 储能系统的离网,并网,构网,跟网 简介
  • 【HTTP】取消已发送的请求
  • Linux线程概念及常用接口(1)
  • OSS客户端签名直传实践:Web端安全上传TB级文件方案(含STS临时授权)
  • 从牛顿流体到弹性固体:旋转流变仪的高精度流变特性测定与工业应用
  • Unity_UI_NGUI_UI组件
  • 对人工智能的厌倦感是真实存在的,而且它给品牌带来的损失远不止是参与度的下降
  • 【Linux网络编程】多路转接I/O(一)select,poll
  • 51c嵌入式~电路~合集8
  • 一、永磁同步电机矢量控制——电机数学模型
  • 第十节 新特性与趋势-CSS层叠规则升级
  • AI智能化高效办公:WPS AI全场景深度应用指南
  • 设计模式系列(09):结构型模式 - 适配器模式
  • ffmpeg环境配置
  • HTTP响应头Content-Disposition解析