惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Webroot Blog
Webroot Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
SecWiki News
SecWiki News
S
Secure Thoughts
V2EX - 技术
V2EX - 技术
T
Tor Project blog
H
Hacker News: Front Page
P
Privacy International News Feed
Google DeepMind News
Google DeepMind News
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
V
Vulnerabilities – Threatpost
C
CERT Recently Published Vulnerability Notes
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
C
Cyber Attacks, Cyber Crime and Cyber Security
Help Net Security
Help Net Security
D
Darknet – Hacking Tools, Hacker News & Cyber Security
H
Heimdal Security Blog
AI
AI
PCI Perspectives
PCI Perspectives
Cyberwarzone
Cyberwarzone
P
Privacy & Cybersecurity Law Blog
AWS News Blog
AWS News Blog
Attack and Defense Labs
Attack and Defense Labs
The Last Watchdog
The Last Watchdog
K
Kaspersky official blog
T
The Exploit Database - CXSecurity.com
C
CXSECURITY Database RSS Feed - CXSecurity.com
Security Latest
Security Latest
Schneier on Security
Schneier on Security
Scott Helme
Scott Helme
L
Lohrmann on Cybersecurity
Cisco Talos Blog
Cisco Talos Blog
The Hacker News
The Hacker News
N
News and Events Feed by Topic
S
Schneier on Security
Simon Willison's Weblog
Simon Willison's Weblog
F
Fortinet All Blogs
T
Threatpost
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
V
V2EX
博客园 - 三生石上(FineUI控件)
WordPress大学
WordPress大学
Apple Machine Learning Research
Apple Machine Learning Research
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
云风的 BLOG
云风的 BLOG
博客园_首页
Recent Announcements
Recent Announcements
G
Google Developers Blog
Martin Fowler
Martin Fowler

Nemo

再见,2025 Complete ORB-SLAM3 Setup Guide for Jetson Xavier NX with RealSense D455 20250723 再见,2024 Using CertBot for Automatic Secure EMQX Broker Create Your Own GPS Data Publisher Support SSL AGV Dispatching System Technical Documentation Finding Nemo No title 香港賽馬會呈獻系列:黑白——攝影敘事 再见,2023 团团是只猫 Design an FSM for Robot State Machines – Basics of Computer Science 数据驱动的机器人寿命:收集、诊断、预测 Exploring the design space of binary search trees 特首来了 Large language models, explained with a minimum of math and jargon 设计有缓存异步逻辑的监控脚本并测试其资源占用 使用loguru记录串口数据并使用Docker搭建ARM开发环境 在vscode的Dev Container中构建.NET开发环境及使用doxygen和graphviz绘制函数调用图 State or Status? A*算法两种时间复杂度 /A* Algorithm: Two Types of Time Complexity 使用KD-Tree快速收敛到最近坐标点/Fast convergence to the nearest coordinate point using KD-Tree 翻译 || 总结 - Go语言中的空结构体(The empty struct) 再见,2022 从PE工作报告中能读出什么 Give me miles, give me truth AMR调度系统性能优化/AMR Dispatch System Performance Optimization 条件触发AMR避让流程/Conditionally triggered AMR avoidance process Docker实现调度系统整体部署/Docker implementation of dispatching system overall deployment 调度系统中加密算法的使用/增加SM4补0方法/Use of encryption algorithms in scheduling systems/add SM4 complementary 0 method 一篇关于北京四天三夜的攻略 2022 藏疆自驾 策划/招募书 AMR仿真模型/AMR Simulation Model 东东有鱼2022年会分享 使用perf-FlameGraph监控系统性能 Beyond Compare 4删除试用 你的灵魂有香气 Pyinstaller打包Python项目 [转载]Python中的单例模式的几种实现方式的及优化 - Nemo 再见! 2020 1024 UML软件建模 入职优必选一个月 写论文时 那些让你开心的软件 - Nemo 分享一个记录刷题次数的模版 LeetCode-查找表类算法题精析 PyCharm 调用vs 2010 C++库导致提示报错R6034解决方法 MySQL基础教程 多种数据结构的Python实现形式 字节跳动-挑战字符串 选择排序 二分查找和大O表示法 算法中的动态规划问题 高高手课程-青山裕企人像摄影 笔记(内含福利)
Data-driven robot lifespan: Collection
Nemo · 2023-09-25 · via Nemo

Overview

Robotic Data Cloud Structure

System Design Goals

The Robotic Data Cloud is designed to get info from Robotic , send to server, store data, analyse data, alarm display and job statistics.

Widely used in AGV, automatic forklift, follow me robot and other robots. The following is an example of building Data Cloud system with AGVs.

The program in AGV called agvMonitor, it is designed to work small, fast and stable, It has the function of disconnecting local storage and resuming automatic uploading.

The system is included in the server:

  • MQTTClient: Subscribe topics and get message from MQTT broker, figure the message and put it in the message queue.
  • RedisChannel: Play the role as MQ, the goal for it is to make sure to give the message to another program.
  • DataProcessor: The main program to process data from different topics, including data serivalise, message classification, database write, information display, etc.

Structure of the system

TSR Watermark - 6.jpg

Information obtained from AGV

agvMonitor topics list

MQTT Topic Format

Message from AGV:

The formation of the message from AGV or sent to AGV like this format:

# Topic agv should to publish
agv/state/{agv_id} # Data got from state machine
agv/system/{agv_id} # Data got from system on Pi
agv/serial/{agv_id} # Data got from Serial Data

# Topic agv shoule to subscribe
dispatch/command/{agv_id} # some commands like reboot, deleate logs ...

The reason is that it does not need to subscribe to many MQTT topics, just use AGV to find out which AGV has published and to receive it.

MQTT Topics

agv/state/{agv_id}

These topics mean that the massages in the topic are received from the state machine, it displays the state of the AGV, like IDLE or BUSY, the status of a motivation, SUCCESS or FAILED, the battery info like percentage, voltage…, It can also recode the QR code changes from top and bottom, finally it can calculate the running time from app_shutdown_request. Also we can get the mileage.

Content of the topic:

“subtopic”:“state”

About the current state of the AGV, the sending strategy is that

TSR Watermark - 7.jpg

{
    "agvid": "XXXXXXXXX", 
    "timestamp": 1692861317.338879, 
    "boot_count": 5,
    "subtopic":"state",
    "data": 
    {
        ...
    }
}
“subtopic”:“action”

About AGV`s action content, like which one, what it is. Attention! this topic is not sent often, if action_result is in [SUCCESS, FAILED], it will be sent with result to server.

TSR Watermark - 4.jpg

{
    "agvid": "XXXXXXXXX", 
    "timestamp": 1692861317.338879, 
    "boot_count": 5,
    "subtopic":"action",
    "data": 
    {
        ...
    }
}
“subtopic”:“action_result”

About AGV’s action result, contains the action result and result message.

{
    "agvid": "XXXXXXXXX", 
    "timestamp": 1692861317.338879, 
    "boot_count": 5,
    "subtopic":"action_result",
    "data": 
    {
        ...
    }
}
“subtopic”:“battery”

Through AGV’s battery hardware info, we can get the percentage and temperature or voltage of the battery. It will be sent every time AGV starts once, and if the percentage is less than 15%, it will also be sent.

TSR Watermark - 5.jpg

{
    "agvid": "XXXXXXXXX", 
    "timestamp": 1692861317.338879, 
    "boot_count": 5,
    "subtopic":"battery",
    "data": 
    {
        ...
    }
}
“subtopic”:“cam_bottom”

About AGV’s camera info, from this topic we can find out which point AGV is on or which shelf AGV is lifting, it is sent to server only when it changes.

TSR Watermark - 8.jpg

{
    "agvid": "XXXXXXXXX", 
    "timestamp": 1692861317.338879,
    "boot_count": 5,
    "subtopic":"cam_bottom",
    "data": 
    {
         ...
    }
}
“subtopic”:“cam_top”
{
    "agvid": "XXXXXXXXX", 
    "timestamp": 1692861317.338879, 
    "boot_count": 5,
    "subtopic":"cam_top",
    "data": 
    {
         ...
    }
}
“subtopic”:“app_shutdown_request”

Regarding the AGV’s application shutdown signal, when the power button is pressed, the monitor receives the topic and calculates the runtime of the current session.

TSR Watermark - 9.jpg

{
    "agvid": "XXXXXXXXX", 
    "timestamp": 1692861317.338879, 
    "boot_count": 5,
    "subtopic":"app_shutdown_request",
    "data": 
    {
         ...
    }
}

agv/system/{agv_id}

These topics mean that the messages received from the computer in AGV, we can know the usage of the system to avoid the full used in space or memory, also include the CPU`s temperature to make sure the stabilised of the system.

“subtopic”:“system_usage”

This topic contains the system usage such as disk space, memory, cpu. It would be sent when the system starts or the temperature is over 70℃, we can find the top 5 program by cpu usage.

TSR Watermark - 9.jpg

{
    "agvid": "XXXXXXXXX", 
    "timestamp": 1692861317.338879, 
    "boot_count": 5,
    "subtopic":"system_usage",
    "data": 
    {
        ...
    }
}

agv/serial/{agv_id}

These topics mean that got from serial port, contain the underlying hardware data, plays a very important role in the diagnosis and prediction of equipment failures.

“subtopic”:“serial_error”

If the error string is found in serial messages, the agvSerialData will send it to the monitor, then to the server.

TSR Watermark - 1.jpg

{
    "agvid": "XXXXXXXXX", 
    "timestamp": 1692861317.338879, 
    "boot_count": 5,
    "subtopic":"serial_error",
    "data": 
    {
       ...
    }
}

Annotation

boot_count

boot_count is the number of times Ubuntu is booted on Pi. Then we can find out which topics belong to which runtimes in InfluxDB. It is very easy to discuss the AGV working situation in one time.

"boot_count": 1~+, # normal
"boot_count": -1, # file read error

Structure of the Database

agvMonitor Datebase

Select database

As for the kinds of data from AGV include : State Machine data, Hardware health date, the content of these date MQTT structure like that:

"topic":"state"

“subtopic”:“state”

{
    "agvid": "XXXXXXXXX", 
    "timestamp": 1692861317.338879, 
    "boot_count": 5,
    "subtopic":"state",
    "data": 
    {
        ...
    }
}

It contains the ID of AGV, timestamp of the message send, boot_count means the PI starts times, subtopic means the more info to find out which topic.

It is easy to find out that these messages are time serial data just like generating by running of AGV. For store it easier and fast find or polymerize, we need the database can store these message by timestamp.

InfluxDB can meet all of these needs.

Structure of the Database

Because of the nature of InfluxDB:

Database
|
|--- Measurement (such as Table)
      |
      |--- Tags (such as Indexed Columns)
      |
      |--- Fields (such as Non-indexed Columns)
      |
      |--- Time

To track the entire lifecycle of an AGV, we set the ID of the AGV as the measurement, set tags include:

  • level:
    • normal
    • error
    • fatal
  • topic:
    • state
  • subtopic:
    • state
  • boot_count:
    • 2

Then the structure of the AGV Data Cloud is :

AGV Data Cloud
|
|--- Measurement: AGV_ID_1
|     |
|     |--- Tags 
|     |     |
|     |     |--- level
|     |     |
|     |     |--- topic
|     |     |
|     |     |--- subtopic
|     |     |
|     |     |--- boot_count
|     |
|     |--- Fields 
|     |     |
|     |     |--- [data fields here]
|     |
|     |--- Time
|
|--- Measurement: AGV_ID_2
|     |
|     |--- Tags 
|     |     |
|     |     |--- level
|     |     |
|     |     |--- topic
|     |     |
|     |     |--- subtopic
|     |     |
|     |     |--- boot_count
|     |
|     |--- Fields 
|     |     |
|     |     |--- [data fields here]
|     |
|     |--- Time
|
... (and so on for each AGV)

Over time, the data points are inserted on the database in the following way as illustrated in the figure below, if the connection between the robot and the server is interrupted during the data sending of DP2,DP3 and the data cannot be sent, when the connection is restored, these two data points will still be inserted between DP1 and DP4 instead of the nearest place.

Time (timeline): T1 -----> T2 -----> T3 -----> T4 -----> T5 -----> ... -----> Tn
Data points   :  DP1      DP2       DP3       DP4       DP5                DPn

Programme resource usage

agvMonitor

TSR Watermark - 3.jpg