3.3. MIPI图像采集

功能介绍

为实现环境感知能力,机器人产品中通常会搭载摄像头、ToF等类型的传感器。为降低用户传感器适配和使用成本,TogetherROS会对多种常用传感器进行封装,并抽象成Sensor Hub模块,支持ROS标准图像消息以及自定义图像消息输出。用户只需要修改配置参数,即可实现传感器节点的创建和使用,目前已支持的传感器类型如下所示:

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

代码仓库:https://c-gitlab.horizon.ai/HHP/box/hobot_sensors

准备工作

  1. 确认摄像头正确接入旭日X3派,例如 F37 摄像头的接入方式如下图:

    image-X3-PI-Camera

  2. 旭日X3派已烧录好地平线提供的Ubuntu20.0.4或Linux系统镜像。

  3. 旭日X3派已成功安装TogetherROS。

使用方式

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

  1. 通过 SSH 登录旭日X3派,打开/opt/tros/share/mipi_cam/launch/mipi_cam.launch.py,修改video_device字段为F37或者GC4663,配置摄像头型号,这里设置摄像头型号为F37

    from launch import LaunchDescription
    from launch_ros.actions import Node
    
    
    def generate_launch_description():
        return LaunchDescription([
            # 启动图片发布pkg
            Node(
                package='mipi_cam',
                executable='mipi_cam',
                output='screen',
                parameters=[
                    {"out_format": "nv12"},
                    {"image_width": 960},
                    {"image_height": 544},
                    {"io_method": "shared_mem"},
                    {"video_device": "F37"}
                ],
                arguments=['--ros-args', '--log-level', 'error']
            )
        ])
    
  2. 并通过下述命令启动 Sensor Hub 节点

    Ubuntu

    # 配置 TogetherROS 环境:
    source /opt/tros/local_setup.bash
    # launch 方式启动
    ros2 launch mipi_cam mipi_cam.launch.py
    

    Linux

    # 配置 TogetherROS 环境:
    export LD_LIBRARY_PATH=/opt/tros/lib:${LD_LIBRARY_PATH}
    # 参数设置:
    /opt/tros/lib/mipi_cam/mipi_cam --ros-args -p video_device:=F37 -p image_width:=960 -p image_height:=544
    
  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发布

    Ubuntu

    # 一个终端编码
    source /opt/tros/local_setup.bash
    ros2 run hobot_codec hobot_codec_republish --ros-args -p channel:=1 -p in_mode:=shared_mem -p in_format:=nv12 -p out_mode:=ros -p out_format:=jpeg -p sub_topic:=/hbmem_img -p pub_topic:=/image_jpeg
    
    # 再起一个终端
    source /opt/tros/local_setup.bash
    # 启动nginx,nginx只需启动一次,如前面已启动过nginx,则无需再次启动
    cd /opt/tros/lib/websocket/webservice && chmod +x ./sbin/nginx &&./sbin/nginx -p .
    # 启动websocket
    ros2 run websocket websocket --ros-args -p image_topic:=/image_jpeg -p image_type:=mjpeg -p only_show_image:=true
    

    Linux

    # 配置TogetherROS环境:
    # 一个终端编码
    export LD_LIBRARY_PATH=/opt/tros/lib:${LD_LIBRARY_PATH}
    /opt/tros/lib/hobot_codec/hobot_codec_republish --ros-args -p channel:=1 -p in_mode:=shared_mem -p in_format:=nv12 -p out_mode:=ros -p out_format:=jpeg -p sub_topic:=/hbmem_img -p pub_topic:=/image_jpeg
    
    # 再起一个终端
    export LD_LIBRARY_PATH=/opt/tros/lib:${LD_LIBRARY_PATH}
    # 启动nginx,nginx只需启动一次,如前面已启动过nginx,则无需再次启动
    cd /opt/tros/lib/websocket/webservice && chmod +x ./sbin/nginx &&./sbin/nginx -p .
    # 启动websocket
    /opt/tros/lib/websocket/websocket  --ros-args -p image_topic:=/image_jpeg -p image_type:=mjpeg -p only_show_image:=true
    
  5. PC打开浏览器(chrome/firefox/edge)输入旭日X3派IP地址,点击左上方web端展示即可看是 F37 摄像头编码为MJPEG实时画面 web-f37-codec

注意事项

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

  1. 检查硬件连接

  2. 是否设置 TogetherROS 环境

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