Skip to main content

A ROS-like system called tiny moss

Project description

TinyMoss

基于RabbitMQ的轻量级分布式消息开发框架。

快速使用

安装 RabbitMQ

安装库

pip install tinymoss

项目结构

project --- 项目目录
  |--- app.py  主入口程序
  |--- moss.nodes.json 节点配置文件
  |--- nodes   自定义节点目录
         |--- node1 noed1节点
                 |--- __init__.py  初始化文件
                 |--- node1.py   node1节点的具体实现
         |--- node2 noed2节点
                 |--- __init__.py  初始化文件
                 |--- node2.py   node2节点的具体实现

定义节点

# node1.py

class HelloNode(MossNode):
  
  _should_shutup = False

  def on_running(self):
    print('Hello Node is running')
  
    while not self._should_shutup:
      time.sleep(5)
      self.pub_to_service('<Other Node Service Id>', 'Hi!')

    
  def on_messaged(self, route, body):
    data = str (body, 'utf-8')
    print(f'[Rx] {route}, {data}')
    if route == 'urn:node:id:5cf3ed19-571d-4631-9bb0-e62de70bedea:service:shutup':
      self._should_shutup = True

配置节点

{
  "amqp": "amqp://guest:guest@localhost:5672/%2F",
  "nodes": [
    {
      "id": "urn:node:id:5cf3ed19-571d-4631-9bb0-e62de70bedea",
      "pacakge": "nodes/node1",
      "name": "HelloNode",
      "nodeData": {},
      "services":[
        "urn:node:id:5cf3ed19-571d-4631-9bb0-e62de70bedea:service:shutup"
      ],
      "config": {}
    }
  ]
}

调起 TinyMoss

from tinymoss import TinyMoss

moss = TinyMoss()
try:
    moss.startup()
    while True:
        time.sleep(.1)
except KeyboardInterrupt:
    moss.shutdown()

TinyMoss

核心组件, 负责加载节点,并提供节点间通信的支持

moss = TinyMoss()
# or
moss = TinyMoss('<your node config file path>')

方法

名称 返回 说明
TinyMoss TinyMoss实例 TinyMoss的构造函数,默认使用 moss.nodes.json 作为节点配置
all_nodes list[dict] 返回已加载节点的配置列表
find_node MossNode 查找指定ID的节点实例
startup void 启动Moss
shutdown void 关闭Moss
reboot void 重启Moss,注意重启会在延迟5秒后执行

节点 MossNode

节点是TinyMoss中的核心组件,通常由一个派生自MossNode的类表示, 通过Moss与其他节点通信。与ROS中的概念相似,节点可以发布或订阅话题,也可以提供或使用服务。

例如,咱们有一个机器人,和一个遥控器,那么这个机器人和遥控器开始工作后,就是两个节点。遥控器起到了下达指令的作用;机器人负责监听遥控器下达的指令,完成相应动作。从这里我们可以看出,节点是一个能执行特定工作任务的工作单元,并且能够相互通信,从而实现一个机器人系统整体的功能。在这里我们把遥控器和机器人简单定义为两个节点,实际上在机器人中根据控制器、传感器、执行机构等不同组成模块,还可以将其进一步细分为更多的节点,这个是根据用户编写的程序来定义的。)

—— ROS2

属性

名称 类型 说明
nodeId str 节点ID
services list 节点支持的服务ID
config dict 节点自定义配置
nodeData dict 节点自定义数据

方法

名称 返回 说明
pub_to_node void 直接与指定的节点通信
pub_to_service void 与其他节点的服务通信

节点服务 Service

每个节点可以定义多个服务, 服务是一个全局唯一的字符串ID,通常我们使用 <节点Id>:service:<服务名称> 的格式来定义。 每个派生自MossNode的节点会自动订阅配置文件中给定的ID, 并通过 on_messaged 回调推送消息。

节点自定义配置 Config

通过节点配置项,设置每个节点独有的选项, Moss会将这些选项透传给节点。

节点自定义数据 NodeData

与节点配置相似,Moss会将这些数据透传给节点。

组件

MqttConnection

TinyMoss提供了一个MqttConnection用于广播通信。示例如下:

# coding: utf-8

from json import loads, dumps
import sys


from tinymoss.connections import MqttConnection

if __name__ =='__main__':
  
  mqttc = MqttConnection('mqtt.eclipseprojects.io', 1883)
      
  def _on_connected (client, userdata, connect_flags, reason_code, properties):
    print('_on_connected')

    # mqttc.publish('/sensors/123456/pull', dumps({}))
    mqttc.subscribe('/sensors/+/push')
    
    
  def _on_messaged(client, userdata, topic, payload): 
    print(topic, payload)
    
  mqttc.on_connected = _on_connected
  mqttc.on_messaged = _on_messaged
  mqttc.connect()
  
  
  try:
    mqttc.loop()
  except KeyboardInterrupt:
    sys.exit(0)
  

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tinymoss-0.0.15.tar.gz (15.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tinymoss-0.0.15-py3-none-any.whl (14.2 kB view details)

Uploaded Python 3

File details

Details for the file tinymoss-0.0.15.tar.gz.

File metadata

  • Download URL: tinymoss-0.0.15.tar.gz
  • Upload date:
  • Size: 15.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.12

File hashes

Hashes for tinymoss-0.0.15.tar.gz
Algorithm Hash digest
SHA256 0470ba843aee1fb067ec681d817037be475846037c503277fce370a5bd12c427
MD5 6fca8ebd7ab4166787407b56f536b78d
BLAKE2b-256 460a61d2bd1691f8ae58c58cdef967d12730a9625ce641d13aa69404ba1f95b3

See more details on using hashes here.

File details

Details for the file tinymoss-0.0.15-py3-none-any.whl.

File metadata

  • Download URL: tinymoss-0.0.15-py3-none-any.whl
  • Upload date:
  • Size: 14.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.12

File hashes

Hashes for tinymoss-0.0.15-py3-none-any.whl
Algorithm Hash digest
SHA256 8fda9e8f454a56eae2dba8d5dc38c62d8c977a7828c5fecf032572cb41ab7eef
MD5 765fb4edd1cdd398a2ba2f387f49c2fb
BLAKE2b-256 17b5f647ec1eff94a836267200201a74c42f4b48e76852fc8346c3c52e6b8d32

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page