相机雷达时间同步(基于ROS)

这篇具有很好参考价值的文章主要介绍了相机雷达时间同步(基于ROS)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

运行环境:

ubuntu20.04 noetic
usb_cam
速腾Robosense 16线
宏基暗影骑士笔记本

思路:

软同步:订阅相机和雷达原始数据,然后进行时间同步,最后将同步后的数据发布出去,通过rosbag record进行录制

同步前和同步后效果对比

同步前的话题:
/rslidar_packets
/usb_cam/image_raw

 # 录制命令
 rosbag record -O lidar_camera /usb_cam/image_raw /rslidar_points

# 查看bag时间戳
rqt_bag lidar_camera.bag

相机时间同步,相机-雷达联合标定,c++

同步后的话题:
/sync/img
/sync/lidar

 # 录制命令
 rosbag record -O lidar_camera_syn_time /sync/img /sync/lidar

相机时间同步,相机-雷达联合标定,c++

1.1创建工作空间

mkdir -p sys_time_ws/src
cd sys_time_ws
catkin_make
code .

1.2创建功能包

1) 在工作空间src目录下创建功能包

sys_time
roscpp rospy std_msgs

2.1编写源文件

1)在 src 目录下新建文件 sub_and_pub.cpp

代码解释:
this 关键字指向类创建的对象
registerCallback 绑定回调函数,触发回调函数发布同步后的数据

#include "sys_time/sub_and_pub.h"
 
# 重写头文件中的构造函数subscriberANDpublisher()
# main函数初始化对象(subscriberANDpublisher sp)时自动调用构造函数
subscriberANDpublisher::subscriberANDpublisher()
{
    //订阅话题
    lidar_sub.subscribe(nh, "/rslidar_points", 1);
    camera_sub.subscribe(nh, "/usb_cam/image_raw", 1);

    //消息过滤器,使用 ApproximateTime 进行时间同步(允许一定程度的时间误差)
    sync_.reset(new message_filters::Synchronizer<syncpolicy>(syncpolicy(10), camera_sub, lidar_sub));
    sync_->registerCallback(boost::bind(&subscriberANDpublisher::callback, this, _1, _2));

    //发布者
    camera_pub = nh.advertise<sensor_msgs::Image>("sync/img", 10);
    lidar_pub = nh.advertise<sensor_msgs::PointCloud2>("sync/lidar", 10);
}

void subscriberANDpublisher::callback(const sensor_msgs::ImageConstPtr& image, const sensor_msgs::PointCloud2ConstPtr& pointcloud) {
    ROS_INFO("Received synchronized message!");
    camera_pub.publish(image);
    lidar_pub.publish(pointcloud);
}

2.2编写头文件

1)在功能包下的 include/功能包名 目录下新建头文件 sub_and_pub.h
2)配置 includepath 详情见

#ifndef SUB_AND_PUB_H
#define SUB_AND_PUB_H
//ros头文件
#include <ros/ros.h>
//时间同步
#include <message_filters/subscriber.h>
#include <message_filters/sync_policies/approximate_time.h>
#include <message_filters/synchronizer.h>
//传感器消息
#include <sensor_msgs/Image.h>
#include <sensor_msgs/image_encodings.h>
#include <sensor_msgs/PointCloud2.h>
 
class subscriberANDpublisher{
public:
    subscriberANDpublisher();
    void callback(const sensor_msgs::ImageConstPtr &image, const sensor_msgs::PointCloud2ConstPtr &pointcloud);
 
private:
    ros::NodeHandle nh;
    ros::Publisher camera_pub;
    ros::Publisher lidar_pub;
    message_filters::Subscriber<sensor_msgs::PointCloud2> lidar_sub;//雷达订阅
    message_filters::Subscriber<sensor_msgs::Image> camera_sub;//相机订阅
 
    typedef message_filters::sync_policies::ApproximateTime<sensor_msgs::Image, sensor_msgs::PointCloud2> syncpolicy;//时间戳对齐规则
    typedef message_filters::Synchronizer<syncpolicy> Sync;
    boost::shared_ptr<Sync> sync_;//时间同步器
 
};
#endif

2.3编写可执行文件

#include <ros/ros.h>
#include "sys_time/sub_and_pub.h"

 
int main(int argc, char **argv) {
    ros::init(argc, argv, "node");
    subscriberANDpublisher sp;
    ROS_INFO("main done! ");
    ros::spin();
}

2.4配置文件

1)修改CMakeLists.txt

# 添加message_filters ROS包依赖
find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
  message_filters
)

# 头文件路径
include_directories(
  include
  ${catkin_INCLUDE_DIRS}
)

# 注意:根据include文件夹位置去修改
# 新建c++库,将头文件和源文件添加到新库里面
add_library(sys_time_lib
  include /sys_time/sub_and_pub.h
  src/sub_and_pub.cpp
)

# 将src目录下的main.cpp编译成可执行文件
add_executable(main.cpp src/main.cpp)

# 将新库和ros库链接起来
target_link_libraries(sys_time_lib
  ${catkin_LIBRARIES}
)

# 将可执行文件和新库链接起来
target_link_libraries(main.cpp
  sys_time_lib
  ${catkin_LIBRARIES}
)

2)修改package.xml (实际上不修改也可以通过编译)

  <exec_depend>message_filters</exec_depend>

3.1编译运行

1)运行时间同步节点

# 编译
ctrl+shift+b

roscore
source ./devel/setup.bash
rosrun sys_time main.cpp

相机时间同步,相机-雷达联合标定,c++

2)启动相机

cd usb_cam_ws
source ./devel/setup.bash
roslaunch usb_cam usb_cam-test.launch

3)启动雷达

cd robosense_ws
source ./devel/setup.bash
roslaunch rslidar_sdk start.launch

当相机雷达全部启动后,显示接受到时间同步消息
相机时间同步,相机-雷达联合标定,c++

4.1录制时间同步后的rosbag

lidar_camera_syn_time 是保存的rosbag名称
/sync/img 和 /sync/lidar 是录制的话题名

rosbag record -O lidar_camera_syn_time /sync/img /sync/lidar
# 查看录制好的rosbag
rosbag info lidar_camera_syn_time.bag

相机时间同步,相机-雷达联合标定,c++

4.2rviz可视化rosbag

配置文件详细步骤见:Robosense激光雷达录制rosbag

1)打开rviz

rviz

2)导入配置文件 file–open cofig
相机时间同步,相机-雷达联合标定,c++

3)添加相机话题
相机时间同步,相机-雷达联合标定,c++

相机时间同步,相机-雷达联合标定,c++

4)播放rosbag

rosbag play lidar_camera_syn_time.bag

相机时间同步,相机-雷达联合标定,c++文章来源地址https://www.toymoban.com/news/detail-551155.html


⭐⭐⭐ 嘟嘟崽 ⭐⭐⭐
⭐⭐⭐ 祝你成功 ⭐⭐⭐

到了这里,关于相机雷达时间同步(基于ROS)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Autoware实现相机和激光雷达联合标定

    1-编译 2-修改代码 打开CMakeLIsts.txt 将三处该行 if (\\\"${ROS_VERSION}\\\" MATCHES \\\"(indigo|jade|kinetic)\\\") 改为 if (\\\"${ROS_VERSION}\\\" MATCHES \\\"(indigo|jade|kinetic|melodic)\\\") 重新编译: 3-测试启动 输入命令,显示如下,则证明正常: 启动激光雷达: /velodyne_points /rslidar_points 启动相机: /camera/color/image_raw 设

    2024年01月19日
    浏览(33)
  • 【Ubuntu18.04】激光雷达与相机联合标定(Livox+HIKROBOT)(一)相机内参标定

    Livox Lidar + HIKROBOT Camera 联合标定 参考链接:相机雷达标定文档 安装ROS环境,参考笔者的博客:【ROS】Ubuntu18.04安装Ros 参考链接:海康Camera MVS Linux SDK二次开发封装ROS packge过程记录(c++) 海康的相机没有ros驱动,且对linux开发不太友好(但支持windows),因此需要重写了sdk接口

    2024年02月04日
    浏览(35)
  • 相机雷达联合标定cam_lidar_calibration

    ubuntu18.04.6 melodic opencv 3.4.16 python 2.7.17 (ros自带) usb-cam 速腾robosense 16 官方Github: https://github.com/acfr/cam_lidar_calibration rs_to_velodyne :https://github.com/HViktorTsoi/rs_to_velodyne 1)工作空间创建和编译 2)官方数据集测试环境 ①开始标定 标定好的文件保存在 cam_lidar_calibration/data/vlp/路径下 ②

    2024年02月11日
    浏览(32)
  • 虚拟机(Ubuntu1804)相机与激光雷达联合标定实现过程记录

    在智能小车录制的点云数据在rviz打开一定要修改Fixed Frame为laser_link,这样才能看到点云,注意此时用的是雷神激光雷达,话题名是lslidar_,可采用rostopic list查看具体名称 1、新建一个终端打开roscore 2、在文件夹libratia中新建一个终端 【注意】这里的--pause可以暂停,当后面需要

    2024年02月16日
    浏览(39)
  • autoware标定工具进行固态激光雷达与相机的联合标定并运用标定结果进行投影(C++)

    本文主要介绍速腾聚创的RS-LIDAR-M1固态雷达激光与小觅相机左眼的联合标定过程,并介绍标定过程中的一些技巧与避雷,加快标定效率。最后给出运用标定结果进行投影的关键代码。 一、安装autoware(为了标定完成后的可视化,可选,本文并未用到) 参考https://blog.csdn.net/qq

    2024年02月08日
    浏览(34)
  • MATLAB - 激光雷达 - 相机联合标定(Lidar-Camera Calibration)

          激光雷达 - 相机标定建立了三维激光雷达点和二维相机数据之间的对应关系,从而将激光雷达和相机输出融合在一起。 激光雷达传感器和相机被广泛用于自动驾驶、机器人和导航等应用中的三维场景重建。激光雷达传感器捕捉环境的三维结构信息,而相机则捕捉色彩、

    2024年02月20日
    浏览(34)
  • ICRA 2023 | 最新激光雷达-相机联合内外参标定,一步到位!

    点击下方 卡片 ,关注“ 自动驾驶之心 ”公众号 ADAS巨卷干货,即可获取 今天自动驾驶之心很荣幸邀请到石头,为大家分享ICRA 2023最新的激光雷达-相机的联合标定方法,可同时标定内参和外参。如果您有相关工作需要分享,请在文末联系我们! 点击进入→ 自动驾驶之心【多

    2024年02月12日
    浏览(28)
  • 激光雷达和相机数据时间同步的几种方法

    图1图2为数据时间未校准,使用Matlab 2022b相机和激光雷达联合标定工具箱进行的联合标定(图1为使用4对jpg和pcd文件时的联合标定效果,图2为使用15对jpg和pcd文件时的联合标定效果);图3图4为数据时间已校准后,使用Matlab 2022b相机和激光雷达联合标定工具箱进行的联合标定(

    2024年02月03日
    浏览(68)
  • 【文献分享】基于线特征的激光雷达和相机外参自动标定

    论文题目: Line-based Automatic Extrinsic Calibration of LiDAR and Camera 中文题目: 基于线特征的激光雷达和相机外参自动标定 作者:Xinyu Zhang, Shifan Zhu, Shichun Guo, Jun Li, and Huaping Liu 作者机构:清华大学汽车安全与能源国家重点实验室 论文链接:https://www.researchgate.net/publication/354877994_

    2024年02月06日
    浏览(31)
  • 基于虚拟机安装Ubuntu18.04+ROS的2D相机或电脑自带摄像头的在线标定方法

    硬件 :笔记本电脑自带摄像头或者通过usb接口连接的相机 软件 :虚拟机+ubuntu18.04+ROS1 melodic(针对ubuntu18.04对应的ROS版本) 首先确保在主目录下,创建ROS工程 克隆代码 编译代码 这个地方我报错了 – No package ‘libv4l2’ found CMake Error at /usr/share/cmake-3.10/Modules/FindPkgConfig.cmake:419

    2024年02月02日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包