最新版本的API和老版本有很多不同,学起来不太方便,有必要装个新版本了。。
给小车安装了三个传感器,碰撞传感器、RGB相机和Lidar。目前利用官方给的方法获取可以获取小车行使过程中的相关数据,仅仅是简单的将传感器监听到的数据一个一个记录下来。后续如果要对这些数据进行处理,比如利用深度学习,需要车辆行驶过程的数据,如何将他们之间的关系对应起来并且自动打包成数据集目前还不会。。后面根据需要再学,看学姐以前用的ROS,话说ROS是个什么东东??0.0
传感器也属于Actor类,在生成传感器时需要传入transform参数。对于相机和雷达来说,他们都是attach_to小车,所以传入的是相对于小车的相对坐标。碰撞传感器的transform直接使用默认值就可以。
# 设置RGN相机相对依附对象位置
transform_RGB = carla.Transform(carla.Location(x=0.8, z=1.7))
# 设置Lidar的transform
transform_lidar = carla.Transform()
# 设置collision的transform
transform_collision = carla.Transform()
为了方便观察小车的生成位置,可以引入观察者视角:
# 观察者视角
spectator = world.get_spectator()
spectator.set_transform(transform_vehicle)
利用传感器的listen()函数获取数据,简单的将RGB图像或者点云文件存入磁盘:
# 设置传感器监听函数
my_camera.listen(lambda image: image.save_to_disk('output/%06d.png' % image.frame_number))
my_collision.listen(lambda collision_event: print("warning!A collision!"))
my_lidar.listen(lambda lidar_measurement: lidar_measurement.save_to_disk('output/%06d.ply' % lidar_measurement.frame_number))
这里listen返回的数据不仅仅是raw_data,例如Lidar的listen获取的对象包含:
channels (int)
Number of lasers shot.
horizontal_angle (float – radians)
Horizontal angle the LIDAR is rotated at the time of the measurement.
raw_data (bytes)
Received list of 4D points. Each point consists of [x,y,z] coordiantes plus the intensity computed for that point.
这里的save_to_disk是官方写好的函数,自己写注意一下。