Skip to main content

A ROS-like system called tiny moss

Project description

TinyMoss

Supported Versions PyPI - License PyPI - Downloads

基于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()
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.17.tar.gz (16.0 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.17-py3-none-any.whl (14.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: tinymoss-0.0.17.tar.gz
  • Upload date:
  • Size: 16.0 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.17.tar.gz
Algorithm Hash digest
SHA256 fcda596c3280cbc08a3fd3c645f892ce07cfa004c5f1444454a12c194c6c91d8
MD5 7c25ff790596ed94ac65559720602a29
BLAKE2b-256 4b3ebc9bc56566065ced061ba07ecfffe610c8ad4786b92badf802757b353c2f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: tinymoss-0.0.17-py3-none-any.whl
  • Upload date:
  • Size: 14.6 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.17-py3-none-any.whl
Algorithm Hash digest
SHA256 677c10eb7eea11a05a1e39860f0946abaef850854a7ddbf2c109cd19685b62d3
MD5 53cc5b13b57290f54a0f9bcc6d893141
BLAKE2b-256 6b03d7d53689ba388d7bb08fc5e11362210642244951da8f3ede60b5265fa6e4

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