这个系列竟然真能写到二我是出乎意料的。上回说到搭建软件环境,下一步是装驱动,当时手头只到了一个电脑,相机和激光雷达都没到,导致只能先整到那,这回把驱动部分续上。
驱动安装
驱动安装主要参考https://www.scan2.world/blog/3,参考https://gitee.com/gwmunan/ros2/wikis/pages?sort_id=13639391&doc_id=4855084#%E4%BD%BF%E7%94%A8%E8%AE%BE%E5%A4%87进行mid360对应配置文件修改。相机驱动直接从官网下了一个MVS的deb,按官网提供的readme文件执行,没有什么问题。执行以下代码运行MVS,可以打开MVS软件,预览相机采集画面,对相机进行触发类型设置。
cd /opt/MVS/bin
export LD_LIBRARY_PATH=/opt/MVS/bin/:$LD_LIBRARY_PATH
./MVS
./MVS.sh # 或者
激光雷达因为使用的是MID360,对应需要安装 LIVOX-SDK2,按readme执行。随后gitclone https://github.com/xuankuzcr/LIV_handhold,将其中提供的livox_ros_driver2、mvs_ros_driver移动到/catkin_ws/src目录下之后进行编译,同样因为使用的是mid360,需要手动指定livox_ros_driver2的ROS版本。
catkin_make -DROS_EDITION=ROS1
然后需要修改catkin_ws/src/livox_ros_driver2/config/MID360_config.json文件,主要修改ip,雷达默认的hostIP是192.168.1.50,lidar_configs中的ip是雷达自身的ip,ip末尾两位是雷达序列号的后两位。我的雷达序列号是XXXXXX91,所以我的雷达自身ip就是192.168.1.191,此处参照自己手头雷达情况修改。
{
"lidar_summary_info" : {
"lidar_type": 8
},
"MID360": {
"lidar_net_info" : {
"cmd_data_port": 56100,
"push_msg_port": 56200,
"point_data_port": 56300,
"imu_data_port": 56400,
"log_data_port": 56500
},
"host_net_info" : {
"cmd_data_ip" : "192.168.1.50",
"cmd_data_port": 56101,
"push_msg_ip": "192.168.1.50",
"push_msg_port": 56201,
"point_data_ip": "192.168.1.50",
"point_data_port": 56301,
"imu_data_ip" : "192.168.1.50",
"imu_data_port": 56401,
"log_data_ip" : "",
"log_data_port": 56501
}
},
"lidar_configs" : [
{
"ip" : "192.168.1.191",
"pcl_data_type" : 1,
"pattern_mode" : 0,
"extrinsic_parameter" : {
"roll": 0.0,
"pitch": 0.0,
"yaw": 0.0,
"x": 0,
"y": 0,
"z": 0
}
}
]
}
然后修改相机配置文件,位置catkin_ws/src/mvs_ros_driver/config/left_camera_trigger.yaml,因为我使用的相机是MV-CU013-A0UC,PixelFormat改为4。
PixelFormat: 4 # 0: RGB8, 1: BayerRG8, 2: BayerRG12Packed, 3: BayerGB12Packed, 4: BayerGB8
然后记得将电脑ip配置为192.168.1.50,执行roslaunch mvs_ros_driver mvs_camera_trigger.launch 即可在弹出的rviz窗口中看到相机画面。执行roslaunch livox_ros_driver2 rviz_MID360.launch即可看到激光雷达采集内容。
更新:上次更新后换了个电脑重新部署了一遍,第二次部署的时候遇到点问题,记录一下解决过程。
执行roslaunch livox_ros_driver2 rviz_MID360.launch后出现以下报错,”[console] [error] Query livox lidar Fw type failed, the status:-4 [general_command_handler.cpp] [QueryFwTypeCallback] [438]”,同时在控制台信息中能看到已经读取到了正确的激光雷达序列号。在我这里是在系统里添加了ip为192.168.1.50,但是没有添加正确的子网掩码导致的,报错时子网掩码为0.0.0.0,修正为255.255.255.0后该报错解决。如果还有其他报错的话,尝试参照https://blog.csdn.net/Hahalim/article/details/129414327将launch文件中的广播序列号改为自己雷达的序列号。
但是这时候我一跑roslaunch fast_livo mapping_mid360.launch就会报进程崩溃错误,我猜测是代码中可能有一些激光雷达相关参数没有改称适配mid360的,这个问题还在研究,暂且搁置。
更新:使用了钞能力,发现了问题,是海康相机库运行的时候顶掉了系统自己的libusb库导致的,手动重新指定一下库路径就能正常运行了,但是需要每次运行都指定一次,持久化解决方案还未研究。
内参标定
然后是相机内参标定,参考了https://gitee.com/gwmunan/ros2/wikis/pages?sort_id=10649664&doc_id=4855084,这里有详细说明整个内参标定过程,但是没有说启动标定节点的时候要输入的参数是什么意思,(其实隐含在文中了只是没有明确说出来,第一次看的时候我没看懂)此处结合另一篇教程来理解,https://www.scan2.world/blog/4,第二篇教程很明确的指明了棋盘格校准角点的数法,理解一下我没有相关背景,没理解这玩意是怎么数的,看了教程才明白……还有标定节点的其他参数含义。
https://calib.io/zh/pages/camera-calibration-pattern-generator该网站提供了一个校准用棋盘格生成器,根据自己需要可以生成指定参数的棋盘格pdf以供打印。注意这里生成时填入的行列数是格子数,不是标定节点启动时输入的角点数。打印生成的pdf时注意保持原始大小,不要缩放,可以印出来之后用尺子量一下尺寸是否准确。补充:用a4纸打出来的似乎校准效果不太好,打算用a3重新打一个试试。大佬说内参标定很重要,内参标的不准外参也会标不好。有条件的买个标定板当然最好,但是我打算走经济路线,先继续研究自制方案了……
相机内参标定节点运行完成后会输出一些校准参数,但是格式和相机的config文件格式不一样,其实观察一下数字就能看出来该怎么填写,不过还是说明一下具体是怎么对应的。此处参考https://gitee.com/gwmunan/ros2/wikis/pages?sort_id=10649788&doc_id=4855084
下图中cam_width 和 cam_height改为自己相机的宽和高,scale应和校准节点运行时设置的scale一样。前文校准时建议设置为1,此处最好也设成1。

