前言
作者也是刚开始学习这方面的内容,如果想看比较全面和水平更高的文章,推荐去: 1.知乎的叶小飞先生:https://www.zhihu.com/column/c_1324712096148516864 2.Carla官网:https://carla.readthedocs.io/en/latest/
思路
1.首先我们应该明确我们需要收集那些数据:RGB-D相机数据(在Carla里面我们分别用RGB和深度相机来采集)、激光雷达数据、IMU数据 2.我们知道是我们通过程序生成小车、相机这些东西,我们得算世界坐标系和相机坐标系的转换、相机坐标系和像素坐标系的转换 3.怎么收集这些数据,要知道IMU数据的频率理论上比光学相机和激光雷达大很多,而且我们要规划出一条路线而不是让小车随便乱逛 4.收集完之后如何处理我们得把这些数据融合转换成bag格式
代码
这里给大家展示收集照片数据的.py文件
#找到carla包的路径
try:
sys.path.append(glob.glob('../carla/dist/carla-*%d.%d-%s.egg' % (
sys.version_info.major,
sys.version_info.minor,
'win-amd64' if os.name == 'nt' else 'linux-x86_64'))[0])
except IndexError:
pass
import carla
def callback(event):
#event就是时时刻刻采集的image,可以对图片进行各种处理,然后存储
......
event.save_to_disk('_out/%08d' % event.frame)
#存创建的actor
actor_list = []
try:
#创建client连接到Carla中
client = carla.Client('localhost', 2000)
#seconds,设置连接超时时间
client.set_timeout(2.0)
#方法一,得到当前世界
#world = client.get_world()
#方法二,得到想要的世界
world = client.load_world('Town05')
#通过world获取world中的Blueprint_Library
blueprint_library = world.get_blueprint_library()
#选择车辆模型,这里选择奔驰
my_vehicle_bp = blueprint_library.find('vehicle.mercedes-benz.coupe')
#选择相机模型,这里选择rgb相机
my_camera_bp = blueprint_library.find("sensor.camera.rgb")
#方法一,手动设置生成点
location = carla.Location(0, 10, 0)
rotation = carla.Rotation(0, 0, 0)
transform_vehicle = carla.Transform(location, rotation)
#方法二,自动选择生成点
#transform_vehicle = random.choice(world.get_map().get_spawn_points())
# 生成奔驰小车
my_vehicle = world.spawn_actor(my_vehicle_bp, transform_vehicle)
actor_list.append(my_vehicle)
# 设置获取的照片的宽和高
IM_WIDTH = 640
IM_HEIIGHT = 480
# 设置相机视角
my_camera_bp.set_attribute("image_size_x", "{}".format(IM_WIDTH))
my_camera_bp.set_attribute("image_size_y", "{}".format(IM_HEIIGHT))
my_camera_bp.set_attribute("fov", "90")
# 相机依附于车上,车辆坐标系下的位置
transform_camera = carla.Transform(carla.Location(x=2.5, z=0.7))
my_camera = world.spawn_actor(my_camera_bp, transform_camera, attach_to=my_vehicle)
actor_list.append(my_camera)
#方法一,自动驾驶模式
my_vehicle.set_autopilot(enabled=True)
#方法二,手动控制模式
#my_vehicle.apply_control(carla.VehicleControl(throttle=1.0, steer=0.0))
#方法一,这里直接使用lambda进行处理,将图像进行存储
my_camera.listen(lambda image: image.save_to_disk('output/%06d.png' % image.frame_number))
#方法二,
#my_camera.listen(callback)
time.sleep(1000)
finally:
for actor in actor_list:
actor.destroy()
print("All cleaned up!")
|