跳到主要内容

5.2.3 图像编解码

功能介绍

图像编解码功能与ROS image_transport package类似,RDK采用硬件单元加速MJPEG/H264/H265与BGR8/RGB8/NV12格式之间转换,可以大幅降低CPU占用的同时提升格式转换效率,X86平台仅支持MJPEG与BGR8/RGB8/NV12格式之间的转换。

代码仓库:(https://github.com/D-Robotics/hobot_codec)

支持平台

平台运行方式示例功能
RDK X3, RDK X3 ModuleUbuntu 20.04 (Foxy), Ubuntu 22.04 (Humble)启动MIPI摄像头获取图像,然后进行图像编码,最后通过Web展示
RDK X5, RDK X5 ModuleUbuntu 22.04 (Humble)启动MIPI摄像头获取图像,然后进行图像编码,最后通过Web展示
RDK UltraUbuntu 20.04 (Foxy)启动MIPI摄像头获取图像,然后进行图像编码,最后通过Web展示
X86Ubuntu 20.04 (Foxy)使用图像发布工具发布YUV图像,然后进行图像编码,最后通过Web展示

RDK Ultra不支持H.264视频编码格式。

准备工作

RDK平台

  1. RDK已烧录好Ubuntu 20.04/Ubuntu 22.04系统镜像。

  2. RDK已成功安装TogetheROS.Bot。

  3. RDK已连接摄像头F37或其他MIPI摄像头。

X86平台

  1. X86环境已配置Ubuntu 20.04系统镜像。

  2. X86环境已安装X86版本tros.b。

使用方式

下面以 JPEG 编码为例,介绍从摄像头或图像发布工具获取NV12格式图片数据,经过JPEG压缩编码后,实现在PC的Web端预览图片。

RDK平台

  1. 获取YUV数据,并启动JPGE编码:

    通过SSH登录RDK,使用mipi_cam作为数据来源,配置hobot_codec输入为NV12格式,输出为JPEG格式,可修改mipi_cam为实际使用的sensor型号。

    a. 启动mipi_cam

    # 配置tros.b环境
    source /opt/tros/setup.bash
    ros2 launch mipi_cam mipi_cam.launch.py mipi_video_device:=F37

    b. 启动hobot_codec编码

    # 配置tros.b环境
    source /opt/tros/setup.bash
    ros2 launch hobot_codec hobot_codec.launch.py codec_in_mode:=shared_mem codec_in_format:=nv12 codec_out_mode:=ros codec_out_format:=jpeg codec_sub_topic:=/hbmem_img codec_pub_topic:=/image_jpeg
  2. Web端查看JPEG编码图像,另起一个终端:

    # 配置tros.b环境
    source /opt/tros/setup.bash
    ros2 launch websocket websocket.launch.py websocket_image_topic:=/image_jpeg websocket_only_show_image:=true
  3. PC打开浏览器(chrome/firefox/edge)输入 http://IP:8000,IP为RDK/X86设备IP地址,点击左上方Web端展示即可查看JPEG编码的实时画面

    web-f37-codec

X86平台

  1. 获取YUV数据,并启动JPGE编码:

    a. 启动图像发布节点

    # 配置tros.b环境
    source /opt/tros/setup.bash
    //从tros.b的安装路径中拷贝出运行示例需要的图片文件
    cp -r /opt/tros/${TROS_DISTRO}/lib/hobot_image_publisher/config/ .

    // 启动图像发布节点

    ros2 launch hobot_image_publisher hobot_image_publisher.launch.py publish_output_image_w:=960 publish_output_image_h:=544 publish_message_topic_name:=/hbmem_img publish_fps:=20

    b. 启动JPEG图片编码&发布pkg

    # 配置tros.b环境
    source /opt/tros/setup.bash
    ros2 launch hobot_codec hobot_codec.launch.py codec_in_mode:=shared_mem codec_in_format:=nv12 codec_out_mode:=ros codec_out_format:=jpeg codec_sub_topic:=/hbmem_img codec_pub_topic:=/image_jpeg
  2. Web端查看JPEG编码图像,另起一个终端:

    # 配置tros.b环境
    source /opt/tros/setup.bash
    ros2 launch websocket websocket.launch.py websocket_image_topic:=/image_jpeg websocket_only_show_image:=true
  3. PC打开浏览器(chrome/firefox/edge)输入 http://IP:8000,IP为RDK/X86设备IP地址,点击左上方Web端展示即可查看JPEG编码的实时画面。

注意事项

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

  1. 是否设置 tros.b 环境
  2. 参数是否正确,具体参考Hobot_codec README.md