MIPI图像采集

功能介绍

为实现环境感知能力,机器人产品中通常会搭载摄像头、ToF等类型的传感器。为降低用户传感器适配和使用成本,TogetheROS.Bot会对多种常用传感器进行封装,并抽象成hobot_sensor模块,支持ROS标准图像消息。当配置的传感器参数与接入的摄像头不符时,程序会自动适应正确的传感器类型。目前已支持的MIPI传感器类型如下所示:

类型 型号 规格
摄像头 F37 200W
摄像头 GC4663 400W
摄像头 IMX219 200W
摄像头 IMX477 200W
摄像头 OV5647 200W

代码仓库:https://github.com/HorizonRDK/hobot_sensors

支持平台

平台 运行方式 示例功能
地平线RDK Ubuntu 20.04 启动MIPI摄像头,并通过Web展示图像

准备工作

地平线RDK平台

  1. 确认摄像头正确接入地平线RDK,例如 F37 摄像头的接入RDK X3方式如下图:

    image-X3-PI-Camera

  2. 地平线RDK已烧录好地平线提供的Ubuntu 20.04系统镜像

  3. 地平线RDK已成功安装tros.b

  4. 确认PC机能够通过网络访问地平线RDK

使用方式

地平线RDK平台

下面以 F37 为例,介绍摄像头数据获取和预览的方法:

  1. 通过 SSH 登录地平线RDK,确定摄像头型号,这里以F37为例,确定相机标定文件的读取路径,这里以/opt/tros/lib/mipi_cam/config/F37_calibration.yaml为例

  2. 并通过下述命令启动 hobot_sensor 节点

    # 配置 tros.b 环境:
    source /opt/tros/local_setup.bash
    # launch 方式启动
    ros2 launch mipi_cam mipi_cam.launch.py mipi_video_device:=F37 mipi_camera_calibration_file_path:=/opt/tros/lib/mipi_cam/config/F37_calibration.yaml
    
  3. 如程序输出如下信息,说明节点已成功启动

    [INFO] [launch]: All log files can be found below /root/.ros/log/2022-06-11-15-16-13-641715-ubuntu-8852
    [INFO] [launch]: Default logging verbosity is set to INFO
    [INFO] [mipi_cam-1]: process started with pid [8854]
    ...
    
  4. Web端查看 F37 摄像头图像,由于发布原始数据,需要编码JPEG图像,另起两个终端:一个进行订阅 MIPI 数据编码为JPEG,一个用webservice发布

    # 一个终端编码
    source /opt/tros/local_setup.bash
    # 启动编码
    ros2 launch hobot_codec hobot_codec_encode.launch.py
    
    # 再起一个终端
    source /opt/tros/local_setup.bash
    # 启动websocket
    ros2 launch websocket websocket.launch.py websocket_image_topic:=/image_jpeg websocket_only_show_image:=true
    
  5. PC打开浏览器(chrome/firefox/edge)输入http://IP:8000(IP为地平线RDK IP地址),点击左上方Web端展示即可看到F37输出的实时画面 web-f37-codec

  6. 在PC机上查询相机内参(具体数据以读取的相机标定文件为准),命令及结果如下:

    root@ubuntu:~# source /opt/ros/foxy/local_setup.bash
    root@ubuntu:~# ros2 topic echo /camera_info
        header:
    stamp:
        sec: 1662013622
        nanosec: 672922214
    frame_id: default_cam
    height: 1080
    width: 1920
    distortion_model: plumb_bob
    d:
    - 0.169978
    - -0.697303
    - -0.002944
    - -0.004961
    - 0.0
    k:
    - 1726.597634
    - 0.0
    - 904.979671
    - 0.0
    - 1737.359551
    - 529.123375
    - 0.0
    - 0.0
    - 1.0
    r:
    - 1.0
    - 0.0
    - 0.0
    - 0.0
    - 1.0
    - 0.0
    - 0.0
    - 0.0
    - 1.0
    p:
    - 1685.497559
    - 0.0
    - 881.6396
    - 0.0
    - 0.0
    - 1756.460205
    - 526.781147
    - 0.0
    - 0.0
    - 0.0
    - 1.0
    - 0.0
    binning_x: 0
    binning_y: 0
    roi:
    x_offset: 0
    y_offset: 0
    height: 0
    width: 0
    do_rectify: false
    

注意事项

  1. mipi_cam提供F37以及GC4663两种摄像头的标定文件,默认读取F37的标定文件F37_calibration.yaml,如使用GC4663,请更改相机标定文件的读取路径,具体步骤如下:

    # 配置 tros.b 环境:
    source /opt/tros/local_setup.bash
    # launch 方式启动
    ros2 launch mipi_cam mipi_cam.launch.py mipi_video_device:=GC4663 mipi_camera_calibration_file_path:=/opt/tros/lib/mipi_cam/config/GC4663_calibration.yaml
    
  2. 摄像头插拔注意事项

    严禁在开发板未断电的情况下插拔摄像头,否则非常容易烧坏摄像头模组。

  3. 如遇到hobot_sensor节点启动异常,可通过下述步骤进行问题排查:

    • 检查硬件连接

    • 是否设置 tros.b 环境

    • 参数是否正确,具体参考 Hobot_Sensors README.md