rosrun kalibr kalibr_calibrate_imu_camera
--bag '/home/bydcv/huangwenhua4/IMU_Camer/bag/IMU_cam_bag/bag'
--target '/home/bydcv/huangwenhua4/IMU_Camer/a4.yaml'
--cam '/home/bydcv/huangwenhua4/IMU_Camer/cam-camchain.yaml'
--imu '/home/bydcv/huangwenhua4/IMU_Camer/imu.yaml' --show-extraction
运行kalibr中相机-IMU标定节点kalibr_calibrate_imu_camera 报错。kalibr_calibrate_imu_camera是一个python ROS节点。python ROS节点运行时需要在开头指定对应的python解释器。
#!//home/bydcv/.pyenv/shims/python
**上面这行代码是指定运行ros节点的python解释器**
# -*- coding: utf-8 -*-
# generated from catkin/cmake/template/script.py.in
# creates a relay to a python script source file, acting as that file.
# The purpose is that of a symlink
python_script = '/home/bydcv/huangwenhua4/catkin_kalibr_/src/kalibr-master/aslam_offline_calibration/kalibr/python/kalibr_calibrate_imu_camera'
with open(python_script, 'r') as fh:
context = {
'__builtins__': __builtins__,
'__doc__': None,
'__file__': python_script,
'__name__': __name__,
'__package__': None,
}
exec(compile(fh.read(), python_script, 'exec'), context)
ImportError: /lib/x86_64-linux-gnu/libboost_python38.so.1.71.0: undefined symbol: _Py_fopenhz
出现undefined symbol的问题,首先要排查动态链接库中是否包含目标动态库的路径,一般有两种设置方案
一种是在~/.bashrc文件中设置LD_LIBRARY_PATH环境变量,另一种是在/etc/ld.so.conf.d/ 和/etc/ld.so.conf中添加动态库的路径。但是后面检查发现/lib/x86_64-linux-gnu/ 是包含的,所以问题不在这里。
那么问题可能是python boost库版本冲突的问题,根据库名的后缀,链接的动态链接库应该对应的是python3.8, 但是后面检查节点默认使用的python解释器为系统默认的Python解释器,这个Python解释器版本为3.10.1。所以与python boost库冲突。将ros节点运行的python解释器更改为anaconda中安装环境中python 3.8即可。
#!/home/bydcv/anaconda3/envs/py38/bin/python
# -*- coding: utf-8 -*-
# generated from catkin/cmake/template/script.py.in
# creates a relay to a python script source file, acting as that file.
# The purpose is that of a symlink
python_script = '/home/bydcv/huangwenhua4/catkin_kalibr_/src/kalibr-master/aslam_offline_calibration/kalibr/python/kalibr_calibrate_imu_camera'
with open(python_script, 'r') as fh:
context = {
'__builtins__': __builtins__,
'__doc__': None,
'__file__': python_script,
'__name__': __name__,
'__package__': None,
}
exec(compile(fh.read(), python_script, 'exec'), context)