如何通过FIROS将ROS系统中的传感器数据发送至CrateDB
ROS传感器数据通过FIROS写入CrateDB实现流程
前置准备
- 先确认你的ROS环境运行正常,所有需要转发的传感器topic可以正常发布:用
rostopic list确认目标topic存在,rostopic echo <topic名称>验证topic输出的数值符合预期 - 完成FIROS安装:根据你使用的ROS版本选择对应版本的FIROS,源码编译或者二进制安装后,执行
rosdep install firos补全所有依赖 - 部署CrateDB实例:目标CrateDB实例需要开放4200(HTTP访问端口)和5432(PostgreSQL兼容端口),确保车辆端运行FIROS的设备可以正常访问这两个端口
FIROS核心配置
进入FIROS的配置目录,编辑config.json文件,完成三个核心模块的配置:
rosbridge模块:填写你的ROS Master的IP和端口,本地运行的话默认值为"rosbridge_url": "http://localhost:11311"topics模块:列出所有需要转发的传感器topic,指定每个topic对应的ROS消息类型,比如GPS的sensor_msgs/NavSatFix、IMU的sensor_msgs/Imu,同时配置每个topic对应的FIWARE NGSI实体的实体类型和属性映射规则- QuantumLeap对接配置:指定FIROS输出的NGSI v2消息推送地址为QuantumLeap的服务地址,QuantumLeap作为中间件负责承接FIWARE时序数据写入CrateDB
QuantumLeap配置
修改QuantumLeap的启动环境变量:
CRATE_HOST设置为你的CrateDB实例的IP地址CRATE_PORT默认值为4200- 可选配置
QL_DEFAULT_DB指定存储数据的默认库名,不配置默认使用mtopeniot
自定义消息适配(可选)
如果你使用的ROS传感器消息是自定义类型,需要在FIROS的types目录下添加自定义消息的结构映射,把ROS消息字段对应到NGSI属性的对应类型,数值类字段对应Number,地理位置对应geo:json,字符串对应Text即可。
全链路启动与验证
- 先启动ROS核心和所有传感器发布节点
- 启动FIROS节点,执行
rosrun firos firos - 启动QuantumLeap服务
- 验证数据写入:进入CrateDB的Web管理界面(默认访问地址为
http://<CrateDB IP>:4200,查看是否自动生成了对应NGSI实体类型的数据表,执行SQL查询SELECT * FROM "mtopeniot"."et<你的实体类型名称>"即可看到实时写入的传感器时序数据。
常见问题排查
- 数据未写入CrateDB:先查FIROS运行日志确认是否正常订阅到传感器topic数据,再查QuantumLeap日志确认是否正常收到NGSI消息,最后验证CrateDB的访问权限和端口是否正常开放
- 字段缺失或数值错误:检查FIROS的
topics配置中的消息字段名是否和ROS消息的字段完全一致,类型映射是否正确
内容的提问来源于stack exchange,提问作者snkly
相关产品推荐
相关产品推荐

