TROS的SDK提供了开发案例,会介绍中间件示例工程的功能、编译及运行方法,以帮助用户快速上手中间件开发。其中,camera4_sample示例位于1.2.3 SDK的TROS-SDK-1.2.3/samples/app_sample/samples_j5/sourcecode/camera4_sample目录,4camera示例对外展示如何将4路环视相机进行IPM转换以及stitch拼接,同时将原图和拼接图进行推理,将推理结果对外发布。通过本示例,可以快速构建基于环视相机的智能感知工作流。
camera4_sample的运行共分为三个阶段:
在开发机使用Bolepack工具将pack格式的数据回灌到开发板
在开发板执行应用程序
在开发机执行backend程序
使用BoleViz工具查看可视化结果
本教程作为用户手册的补充,会基于camera4_sample开发示例,重点介绍如何使用Bolepack的回灌(fillback)功能,并说明BoleViz和communication_tool工具的使用方法。
Bolepack
本教程使用1.2.3版本的bolepack工具,基于linux开发机运行。Bolepack的详细使用说明可以查看手册的TROS-SDK-1.3.4/docs/TROS.A用户使用指南/tools/datatools/bolepack/章节,这里主要针对camera4_sample涉及的内容做介绍。
获取工具
进入TROS SDK的TROS-SDK-1.2.3/tools/BolePack/bolepacklinux.tar.gz目录,解压bolepacklinux.tar.gz压缩文件,得到bolepacklinux文件夹,可以在这里运行bolepack工具。
下载camera_image
在bolepacklinux中,我们新建camera_image文件夹,并将camera4_sample使用到的image数据下载到camera_image文件夹内:
修改communication.json
在该配置文件中,需要分别对participants id为4、5、6、7的节点做修改,这里的participants id与fglobal.json中的target_options “participant” id一一对应。
由于camera4_sample是以pub-sub端方式建立开发机和开发板的通信,开发机作为pub端,开发板作为sub端,又因为pub和sub的ip都需要设置为pub端的,因此linkinfo的ip需要设置为本机地址(本教程中使用的开发机地址为10.101.12.23)或者0.0.0.0,这里0.0.0.0的含义为“本网络中的本机”,与设置本机真正的IP地址作用相同。port选择未被占用的端口即可,这里使用8871、8872、8873、8874。
linktype通常有connect和bind两种值可选,当linkinfo填写了本机ip,且本机作为pub端时,linktype默认值为bind。
linktype配置规则
linkinfo的ip是本机ip
· 本机作为pub端:不填 或 填bind
· 本机作为sub端:不填 或 填connect
· 本机作为client端:填 bind
· 本机作为service端:填 bind
linkinfo的ip不是本机ip(确保能和本机ping通)
· 本机作为pub端:填connect
· 本机作为sub端:不填 或 填connect
· 本机作为client端:填 connect
· 本机作为service端:填 connect
原则:无论哪种通信模式,linkinfo的ip为本机,则linktype填写bind,否则填写connect。
修改fglobal.json
data_type可以决定回灌的数据类型,该示例中使用了jepg数据做回灌,data_type填1,
filetype可以配置为files或dir,该示例中使用了jepg数据做回灌,因此建议配置为dir,此时filepaths就需要填写jepg文件夹目录的地址,可以使用相对于bolepack工具的相对地址或者绝对地址。
相应的,如果data_type为0,filetype为file,那么filepaths填写pack文件的相对路径或绝对路径即可。
在targetoptions中,prefix表示pack文件的前缀,participant设定的数字对应communication.json的participants id,channel与pack的数字后缀,domainid用0即可,type为msgs表示小消息数据,msgs为image表示指定消息的name为image,mode为0表示communication发送模式为pub-sub(为1表示client-service),tstype为0表示数据同步的时间戳类型为GenTS。(如果是pack包,participants id 4加载的pack包名称是ADAS*0.pack)
运行bolepack
运行bolepack时建议先退出TROS的docker环境,否则可能会因为端口原因通信失败。使用回灌方式运行bolepack的命令如下:
若运行成功,终端会打印如下信息:

开发板
本教程使用J5开发板,IP地址为10.101.12.251,并已确保能和开发机ping通。
j5配置ip
用户只需将TROS SDK的TROS-SDK-1.2.3/samples/appsample/samplesj5/samples/路径下的camera4sample.zip解压,并将camera4sample文件夹复制到J5开发板,并对config/sensorcenter/adapter/communication.json文件中participants id 4、5、6、7做修改即可,这里的配置与bolepack的communication.json中的participants相对应。
在linkinfo的配置中,10.101.12.251为运行Bolepack工具的开发机的ip地址,ip和port与开发机端communication.json的participants id 4、5、6、7相同。linktype配置为connect,因为linkinfo填写的ip地址不是本机的ip(本机是作为sub端的J5开发板)。
第一次执行需要执行route add -net 224.0.0.0 netmask 255.255.255.0 eth0,否则会提示一下报错。

若成功接收到bolepack的回灌数据且程序正常运行,终端会打印如下信息:

communication_tool
本教程使用1.6.4版本的communication_tool工具,基于J5开发板运行。communication_tool的详细使用说明可以查看手册的TROS-SDK-1.3.4/docs/TROS.A用户使用指南/developer_guide/communication/support_tools/章节。
获取工具
进入TROS SDK的TROS-SDK-1.3.4/tools/communicationtool/目录,解压communicationtoolj51.6.4.tar.gz压缩文件,得到communicationtoolj51.6.4文件夹,可以在这里运行communicationtool工具。
使用命令
communicationtool工具依赖libhlog.so库,使用之前需要配置libhlog.so路径。
配置libhlog.so的路径
查看topic list
正常打印结果如下:

./communication_tool info --topic --name=camera_image_1#0
正常打印结果如下,可以看到板端在正常的接收开发机pub的image数据,流程不同的时候可以通过communication_tool debug寻找问题。

Backend
用户只需在TROS SDK的/TROS-SDK-1.2.3/samples/app_sample/samples_ubuntu/samples/bole2_camera4_backend路径下执行init,sh脚本即可运行程序,无需做其他修改。
若成功接收到board的数据且程序正常运行,终端会打印如下信息:

BoleViz
本教程使用1.4.3版本的ubuntu BoleViz,并已确保上面流程都已正常跑通。
BoleViz 运行
新建图元
分为一下步骤:
点击add。
图元选择,image选择BoleImage2D。
配置IP地址和端口,以及topic name、channel_id、domain_id。
指定显示窗口。
点击OK,确认建立。
