需要用python读取yaml文件,在这里记录一下:
安装并导入pyyaml模块
pip install pyyaml
import yaml
yaml文件格式如下:
#Default imu sensor yaml file
sensor_type: imu
comment: VI-Sensor IMU (ADIS16448)
# Sensor extrinsics wrt. the body-frame.
T_BS:
cols: 4
rows: 4
data: [1.0, 0.0, 0.0, 0.0,
0.0, 1.0, 0.0, 0.0,
0.0, 0.0, 1.0, 0.0,
0.0, 0.0, 0.0, 1.0]
rate_hz: 200
# inertial sensor noise model parameters (static)
gyroscope_noise_density: 1.6968e-04 # [ rad / s / sqrt(Hz) ] ( gyro "white noise" )
gyroscope_random_walk: 1.9393e-05 # [ rad / s^2 / sqrt(Hz) ] ( gyro bias diffusion )
accelerometer_noise_density: 2.0000e-3 # [ m / s^2 / sqrt(Hz) ] ( accel "white noise" )
accelerometer_random_walk: 3.0000e-3 # [ m / s^3 / sqrt(Hz) ]. ( accel bias diffusion )
指令很简单,只需要加入yaml读取:
def yaml_read(yaml_file):
with open(yaml_file) as f:
yaml_reader = yaml.load(f.read(), Loader=yaml.FullLoader)
return yaml_reader
最后打印出结果,可以看出结果按照关键字检索,#注释内容不会读取,同时对于多行矩阵,按照括号范围进行读取
{'sensor_type': 'imu',
'comment': 'VI-Sensor IMU (ADIS16448)',
'T_BS': {'cols': 4, 'rows': 4, 'data': [1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]},
'rate_hz': 200,
'gyroscope_noise_density': 0.00016968,
'gyroscope_random_walk': 1.9393e-05,
'accelerometer_noise_density': 0.002,
'accelerometer_random_walk': 0.003}
注意!!!
一开始未加入Loader=yaml.FullLoader会报错TypeError: load() missing 1 required positional argument: ‘Loader’
yaml.load(f.read())
查阅资料发现YAML 5.1版本后弃用了yaml.load(file),必须指定Loader
d1=yaml.load(file,Loader=yaml.FullLoader) #禁止执行任意函数
d1=yaml.safe_load(file)
d1 = yaml.load(file, Loader=yaml.CLoader)