ROS 学习系列 -- image_transport 发布jpg图片文件流在image_view中看视频效果

本文介绍如何在ROS环境中通过编程实现从本地文件夹读取连续拍摄的2000张JPG格式图片,创建并发布成图像流,同时在image_view中实时展示为视频效果。具体步骤包括安装必要的软件包、编写发布节点代码以及设置image_view以查看压缩或未压缩的图像流。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://www.it610.com/article/5477845.htm

目标:

   目录/home/camera 中保存了2000张照相机连续拍照的JPG文件,名字按数字排序 1.jpg  2.jpg  3.jpg  ......... 现在需要在ROS中建立一个node按频率发布所有照片,并可以在image_view中看视频效果。

   详细见链接:http://wiki.ros.org/image_transport/Tutorials/PublishingImages

首先安装image_transport,一般在安装ROS时都安装过了。执行

sudo apt-get install ros-indigo-image-transport

发布node的代码:

#include <ros/ros.h>
#include <stdlib.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);

ros::Rate loop_rate(5);
for(int i = 0; i < 2000; i++)
{
if(!nh.ok())
break;
std::ostringstream stringStream;
stringStream << “/home/camero/” << i << “.jpg”;
cv::Mat image = cv::imread(stringStream.str(), CV_LOAD_IMAGE_COLOR);
sensor_msgs::ImagePtr msg = cv_bridge::CvImage(std_msgs::Header(), “bgr8”, image).toImageMsg();

pub.publish(msg);
ros::spinOnce();
loop_rate.sleep();

}
}

使用image_view 查看视频流

上面的node发布视频流到 /camera/image 上,但是image_transport同时还发布了其它的topic用来兼容image_view的功能,就是说上面的代码自动帮助发布了有压缩格式的视频流:

/camera/image
/camera/image/compressed
/camera/image/compressed/parameter_descriptions
/camera/image/compressed/parameter_updates
/camera/image/compressedDepth
/camera/image/compressedDepth/parameter_descriptions
/camera/image/compressedDepth/parameter_updates
/camera/image/theora
/camera/image/theora/parameter_descriptions
/camera/image/theora/parameter_updates

使用下面的命令查看图片流效果:

rosrun image_view image_view image:=/camera/image

如果要查看压缩视频流效果,需要增加一个参数就可以了:

rosrun image_view image_view image:=/camera/image/ image_transport:=‘compressed’

<think>好的,我现在需要帮助用户在Ubuntu上安装ROS Noetic的几个特定软件包:ros-noetic-cv-bridge、ros-noetic-image-transportros-noetic-tf、ros-noetic-diagnostic-updater和ros-noetic-ddynamic-reconfigure。首先,我得确认用户的环境是否符合要求,ROS Noetic需要Ubuntu 20.04,所以用户应该已经安装好了这个系统。接下来,用户可能已经按照官方指南安装了ROS Noetic,但需要补充安装这些额外的包。 根据用户提供的引用内容,安装ROS包通常使用apt命令,比如引用[1]和[2]中提到安装ros-noetic-desktop-full。所以安装其他包的方法应该类似,使用sudo apt install加上包名。不过需要注意包名的正确性,比如ddynamic-reconfigure可能拼写是否正确,或者是否有不同的命名习惯。例如,ros-noetic-ddynamic-reconfigure是否存在,或者是否应该是ros-noetic-dynamic-reconfigure?这里可能需要确认,但根据用户提供的包名,应该是正确的。 接下来,步骤应该是先更新软件包列表,然后执行安装命令。因此,步骤大概是: 1. 更新apt缓存:sudo apt update 2. 安装每个指定的包:sudo apt install ros-noetic-cv-bridge ros-noetic-image-transport ros-noetic-tf ros-noetic-diagnostic-updater ros-noetic-ddynamic-reconfigure 需要检查这些包是否存在,可能需要用户确保已经正确配置了ROS的软件源。通常,安装ROS桌面完整版时会配置好源,但用户如果遇到问题可能需要检查/etc/apt/sources.list.d/中的ROS源是否正确。 另外,引用[3]提到rosinstall可能需要单独安装,但在这个问题中用户只需要通过apt安装,所以可能不需要用到rosinstall工具。不过,如果某些包不在默认源中,可能需要添加其他仓库,但根据包名,这些应该是官方提供的常见包,应该可以直接安装。 最后,验证安装是否成功,可以通过查找文件是否存在,或者运行相关命令测试。例如,检查cv_bridge的版本或者尝试导入相关ROS包。</think>要在Ubuntu上安装ROS Noetic相关功能包,请按以下步骤操作: 1. **更新软件包列表**(确保系统与ROS仓库同步): ```bash sudo apt update ``` 2. **安装指定功能包**(通过apt命令批量安装): ```bash sudo apt install ros-noetic-cv-bridge ros-noetic-image-transport ros-noetic-tf ros-noetic-diagnostic-updater ros-noetic-ddynamic-reconfigure ``` 3. **验证安装**(以cv-bridge为例): ```bash dpkg -L ros-noetic-cv-bridge ``` 若输出包含`/opt/ros/noetic/share/cv_bridge`路径,则安装成功[^1][^2]。 **注意事项**: - 需已配置ROS Noetic官方软件源(安装桌面完整版时自动配置)[^1][^3] - 若遇到依赖问题,可尝试`sudo apt --fix-broken install`修复 - 所有ROS包命名格式为`ros-<发行版>-<包名>`,注意大小写敏感
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值