rosbag play播包,如何查询播包进度?

使用rosbag play命令播放bag文件时,可以使用-r参数来设置播放速率,使用-s参数来设置从bag文件的哪个时间戳开始播放。默认情况下,rosbag play会输出播放的进度,包括当前时间戳和播放速率。

如果你想查询更详细的播放进度,可以使用rosbag info命令获取bag文件的信息,其中包括时间戳范围和消息数量等。同时,可以使用rosbag play--clock参数来让ROS时间同步到播放的时间戳,这样你就可以在ROS的rqt_plot工具中可视化消息的发布时间和播放进度。

如果你想在程序中获取播放进度,可以使用ROS的Python或C++ API来编写一个节点,监听/clock话题来获取当前时间戳,然后计算已播放的时间与总时间的比例来估算播放进度。代码如下:

#include <ros/ros.h>
#include <rosbag/bag.h>
#include <rosbag/view.h>
#include <rosgraph_msgs/Clock.h>
#include <iostream>

int main(int argc, char** argv)
{
    // 初始化ROS节点
    ros::init(argc, argv, "bag_progress");
    ros::NodeHandle nh;

    // 打开bag文件并获取时间戳范围
    rosbag::Bag bag;
    bag.open(argv[1], rosbag::bagmode::Read);
    rosbag::View view(bag);
    ros::Time start_time = view.getBeginTime();
    ros::Time end_time = view.getEndTime();
    ros::Duration duration = end_time - start_time;

    // 创建Publisher发布播放进度
    ros::Publisher progress_pub = nh.advertise<rosgraph_msgs::Clock>("/bag_progress", 10);

    // 创建Subscriber监听/clock话题
    ros::Subscriber clock_sub = nh.subscribe("/clock", 10, [&](const rosgraph_msgs::Clock::ConstPtr& msg) {
        // 计算播放进度并发布
        ros::Duration elapsed_time = msg->clock - start_time;
        double progress = elapsed_time.toSec() / duration.toSec();
        rosgraph_msgs::Clock progress_msg;
        progress_msg.clock = ros::Time(progress * duration.toSec() + start_time.toSec());
        progress_pub.publish(progress_msg);
    });

    // 运行ROS节点
    ros::spin();

    return 0;
}

上述ROS节点的CMakeLists.txt文件如下:

cmake_minimum_required(VERSION 3.0.2)
project(bag_progress)

## 找到依赖包
find_package(catkin REQUIRED COMPONENTS
  rosbag
  roscpp
  rosgraph_msgs
)

## 声明依赖包
catkin_package(
  CATKIN_DEPENDS rosbag roscpp rosgraph_msgs
)

## 编译节点
include_directories(
  ${catkin_INCLUDE_DIRS}
)
add_executable(bag_progress src/bag_progress.cpp)
target_link_libraries(bag_progress ${catkin_LIBRARIES})

## 安装节点和launch文件
install(TARGETS bag_progress
  RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
install(DIRECTORY launch/
  DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/launch
)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值