Carla实战 | Carla中6种Camera摄像头传感器的使用方法

图片

大家好呀,我是李慢慢。

本周开始学习一些关于图像识别的东西。

Carla仿真模拟器中提供了很多种传感器,其中摄像头(camera)就有6种,它们分别是:

1、rgb:红绿蓝

2、semantic segmentation:语义分割

3、instance segmentation:实例分割

4、depth:深度

5、dvs:动态视觉

6、optical_flow:光流

各种传感器的效果如下:

图片

其实摄像头传感器本质上只有一个,摄像头拍摄到的RGB图像,经过各种图像识别算法,就能转换成语义分割、实例分割、深度图等。但是Carla比较人性化,直接将各种图像识别的算法做成了不同种类的摄像头传感器模型,方便开发人员调用,直接拿到各种算法结果的真值。

下面简单记录下Carla种创建这6种摄像头的过程:

第一步:在仿真世界中创建主车。
# 创建一个客户端,连接到服务器端口client = carla.Client('localhost', 2000)client.set_timeout(10.0)# 获取当前的仿真世界world = client.get_world()# 获取当前世界中的蓝图库blueprint_library = world.get_blueprint_library()# 从蓝图库中筛选出来特斯拉的‘model3’ 这个车车bp = blueprint_library.filter('model3')[0]print("the vehicle blueprint:", bp)# 从地图中获取生成点spawn_points = world.get_map().get_spawn_points()# 利用车辆蓝图和地图生成点,创建车辆vehicle_ego = world.spawn_actor(bp, spawn_points[1])# 设置车辆为自动驾驶模式vehicle_ego.set_autopilot(True)# 将车辆加入参与者列表,方便后期统一删除actor_list.append(vehicle_ego)
第二步:在主车上创建各种摄像头。
# 从蓝图库中筛选出来‘camera’蓝图,查看有哪些摄像头模型可以使用camera_bp_list = blueprint_library.filter('camera')for camera_bp_i in camera_bp_list:    print("found sensor, id:", camera_bp_i.id)
# 创建一个坐标位置sensor_location = carla.Transform(carla.Location(x=-4, z=2))image_size_x = 400image_size_y = 300# 创建一个rgb摄像头传感器到主车上bp_camera_rgb = blueprint_library.find('sensor.camera.rgb')bp_camera_rgb.set_attribute('image_size_x', str(image_size_x))bp_camera_rgb.set_attribute('image_size_y', str(image_size_y))my_camera_rgb = world.spawn_actor(bp_camera_rgb, sensor_location, attach_to=vehicle_ego)actor_list.append(my_camera_rgb)
# 创建一个semantic摄像头传感器到主车上bp_camera_sem = blueprint_library.find('sensor.camera.semantic_segmentation')bp_camera_sem.set_attribute('image_size_x', str(image_size_x))bp_camera_sem.set_attribute('image_size_y', str(image_size_y))my_camera_sem = world.spawn_actor(bp_camera_sem, sensor_location, attach_to=vehicle_ego)actor_list.append(my_camera_sem)
# 创建一个instance摄像头传感器到主车上bp_camera_ins = blueprint_library.find('sensor.camera.instance_segmentation')bp_camera_ins.set_attribute('image_size_x', str(image_size_x))bp_camera_ins.set_attribute('image_size_y', str(image_size_y))my_camera_ins = world.spawn_actor(bp_camera_ins, sensor_location, attach_to=vehicle_ego)actor_list.append(my_camera_ins)
# 创建一个depth摄像头传感器到主车上bp_camera_dep = blueprint_library.find('sensor.camera.depth')bp_camera_dep.set_attribute('image_size_x', str(image_size_x))bp_camera_dep.set_attribute('image_size_y', str(image_size_y))my_camera_dep = world.spawn_actor(bp_camera_dep, sensor_location, attach_to=vehicle_ego)actor_list.append(my_camera_dep)
# 创建一个dvs摄像头传感器到主车上bp_camera_dvs = blueprint_library.find('sensor.camera.dvs')bp_camera_dvs.set_attribute('image_size_x', str(image_size_x))bp_camera_dvs.set_attribute('image_size_y', str(image_size_y))my_camera_dvs = world.spawn_actor(bp_camera_dvs, sensor_location, attach_to=vehicle_ego)actor_list.append(my_camera_dvs)
# 创建一个optical_flow摄像头传感器到主车上bp_camera_opt = blueprint_library.find('sensor.camera.optical_flow')bp_camera_opt.set_attribute('image_size_x', str(image_size_x))bp_camera_opt.set_attribute('image_size_y', str(image_size_y))my_camera_opt = world.spawn_actor(bp_camera_opt, sensor_location, attach_to=vehicle_ego)actor_list.append(my_camera_opt)
第三步:获取各种摄像头的仿真结果。
image_w = bp_camera_rgb.get_attribute("image_size_x").as_int()image_h = bp_camera_rgb.get_attribute("image_size_y").as_int()image_size = (image_h, image_w, 4)sensor_data = {"image_rgb": np.zeros(image_size),               "image_sem": np.zeros(image_size),               "image_ins": np.zeros(image_size),               "image_dep": np.zeros(image_size),               "image_dvs": np.zeros(image_size),               "image_opt": np.zeros(image_size)}  # initmy_camera_rgb.listen(lambda image: callback_camera_rgb(image, sensor_data))my_camera_sem.listen(lambda image: callback_camera_sem(image, sensor_data))my_camera_ins.listen(lambda image: callback_camera_ins(image, sensor_data))my_camera_dep.listen(lambda image: callback_camera_dep(image, sensor_data))my_camera_dvs.listen(lambda image: callback_camera_dvs(image, sensor_data))my_camera_opt.listen(lambda image: callback_camera_opt(image, sensor_data))
第四步:创建opencv窗口,显示各种传感器数据。
window_name = "li-man-man: Camera Image Display"cv2.namedWindow(window_name, cv2.WINDOW_AUTOSIZE)# 初始化顯示窗口:黑色# combine all camera data as one.top_row = np.concatenate((sensor_data["image_rgb"],sensor_data["image_sem"],sensor_data["image_ins"]), axis=1)low_row = np.concatenate((sensor_data["image_dep"],sensor_data["image_dvs"],sensor_data["image_opt"]), axis=1)tiled = np.concatenate((top_row, low_row), axis=0)cv2.imshow(window_name, tiled)cv2.waitKey(1)
while True:    # sensor_data 在被listen不断更新,因此窗口在持续更新    top_row = np.concatenate((sensor_data["image_rgb"], sensor_data["image_sem"], sensor_data["image_ins"]), axis=1)    low_row = np.concatenate((sensor_data["image_dep"], sensor_data["image_dvs"], sensor_data["image_opt"]), axis=1)    tiled = np.concatenate((top_row, low_row), axis=0)    cv2.imshow(window_name, tiled)    # cv2.imshow(window_name, sensor_data["image_rgb"])    # print("tiled.shape:", tiled.shape)    if cv2.waitKey(1) == ord("q"):  # 按‘q’退出窗口        breakcv2.destroyAllWindows()

深信科创:致力于自动驾驶工业软件

深信科创是一家专注于提供自动驾驶仿真及智慧交通解决方案的国家高新技术企业。公司基于人工智能、软件测试、数字孪生与大数据等技术,一直致力于自动驾驶领域的研发和探索,拥有一支高素质的研发团队,自主研发了自动驾驶仿真及数据闭环工具链SYNKROTRON®  Oasis产品系列,能够提供高精度传感器模型、动力学模型及感知级交通环境仿真解决方案等,客户可以在仿真平台上对自动驾驶系统开展大规模的仿真测试和模型训练,提前识别自动驾驶系统缺陷、降低实车测试成本、消除场景端落地的安全隐患,加速自动驾驶技术在场景端的安全落地。

更多学习资料、产品试用和社群交流请联系微信:synkrotron1

预约产品试用/技术交流:

手机端: https://synkrotron.ai/vue3/dist/index.html#/appoint_mobile

电脑端: https://synkrotron.ai/vue3/dist/index.html#/appoint_desktop

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值