接上一条博客,完成了内参标定后,接下来就是要进行外参标定。我使用的方法是港大mars实验室的不需要标定板的标定方法。
github地址在此:
https://github.com/hku-mars/livox_camera_calib
要安装这个工具包需要安装livox_ros_driver(livox激光雷达ros驱动)和livox_SDK(livox开发工具),因为我之前跑过fast-livo的算法,所以不需要重复安装,大家想看安装ros驱动和livox_sdk的教程的话可以移步这里:
安装livox_camera_calib时要注意
这里遇到的问题一般都能在网上找到答案,不再进行赘述,报错的时候注意看报错信息,根据报错信息上网找答案,提示的一个点是安装各种包的时候最好不要装太新的,这个开源算法已经有一段时间了,如果装最新的包有可能会不适配,希望大家都能顺利跑通作者给的示例数据。
跑通示例数据之后接下来就可以跑自己的数据。
首先使用
rosbag record /livox/lidar /自己的相机的话题名称
录制约20秒自己的激光雷达和相机图像的包
然后使用
roslaunch livox_camera_calib bag_to_pcd.launch
把bag内的激光点云信息处理出来,这里注意不能用一般的方法将bag变成很多个pcd文件,这样是不行的,每个pcd只有一帧激光点云信息,我的建议是使用这个作者已经写好的bag_to_pcd,这样才能够进行后续的标定工作。
然后在录制的bag的同级目录下新建一个py文件,复制以下代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Copyright 2016 Massachusetts Institute of Technology
# Extract images from a rosbag.
import os
import argparse
import cv2
import rosbag
from sensor_msgs.msg import Image
from cv_bridge import CvBridge
def main():
"""Extract a folder of images from a rosbag.
"""
parser = argparse.ArgumentParser(description="Extract images from a ROS bag.")
parser.add_argument("bag_file", help="Input ROS bag.")
parser.add_argument("output_dir", help="Output directory.")
parser.add_argument("image_topic", help="Image topic.")
args = parser.parse_args()
print "Extract images from %s on topic %s into %s" % (args.bag_file,
args.image_topic, args.output_dir)
bag = rosbag.Bag(args.bag_file, "r")
bridge = CvBridge()
count = 0
for topic, msg, t in bag.read_messages(topics=[args.image_topic]):
cv_img = bridge.imgmsg_to_cv2(msg, desired_encoding="passthrough")
cv2.imwrite(os.path.join(args.output_dir, "frame%06i.png" % count), cv_img)
print "Wrote image %i" % count
count += 1
bag.close()
return
if __name__ == '__main__':
main()
这个py文件可以将bag里面的图像解出来。
运行
rosbag info xxx_1.bag
# bag topic name info (查看bag中topic的信息)
python bag_to_image.py xxx_1.bag xxx_2 /topic_name
# xxx_1.bag: bag name(包的名字), xxx_2: floder name(提取图片放置的文件夹名字), topic_name: bag tpoic name(话题名字)
# example
python bag_to_image.py image_1.bag image /camera/color/image_raw
把图像从bag中解出来之后就可以开始标定了,在config文件夹里面找到相应的yaml文件,把自己的文件路径改好。
roslaunch livox_camera_calib calib.launch
标定的过程会比较长,(也有可能是我的电脑太辣鸡)。