semvec/pypi-packages huggingface dataset:
spirems 0.7.5
Spire message system, a lightweight message publishing and subscription software package similar to ROS.
License: Apache-2.0
Requires Python: >=3.8
Keywords: message-system, lightweight, computer-vision, SpireMS

<img src="spirems/res/spirems_logo.jpg" alt="SpireMS logo" align="right" height="70" />

# SpireMS

## 介绍

**Spire消息系统，一个类似ROS的轻量化消息发布、订阅软件包，支持图像、雷达等传感器话题。**

1. 完美适配 Windows 和 Linux 系统，以及 C++、Python、Anaconda 的各类版本
2. 一键部署安装，轻量化
3. 可预先定义基础数据类型，也可以灵活适应新的类型
4. 有中心模式，内置防崩溃机制，通信稳定可靠，没有订阅者不占用带宽
5. Linux 系统下默认开启内存共享，图像传输超低延迟

    ![数据分发性能测试](spirems/res/5600G_test_cn.png "SpireMS-ShareMem为使用memory_msgs::RawImage类型共享内存传输")

**具体内容请参考：**[SpireMS使用手册](https://www.wolai.com/duBWkKUCYQJCVSGPwueCrx)

## 安装教程

### Python安装

1. 安装（命令行执行）

```Bash
pip install spirems
```

2. 引入（Python代码）

```Python
from spirems import Subscriber, Publisher, def_msg
```

### C++安装（Ubuntu系统）

1. 依赖项安装，如果已经安装cmake、opencv则可以忽略以下2行

```Bash
sudo apt update
sudo apt -y install cmake libopencv-dev
```

2. 源码安装

```Bash
git clone https://gitee.com/jario-jin/spirems.git
cd spirems/spirems_cpp
mkdir build && cd build
cmake ..
sudo make install
```

3. 在自己项目的CMakeLists.txt中引入SpireMS

```
find_package(SpireMS REQUIRED)
include_directories(${SpireMS_INCLUDE_DIRS})
target_link_libraries(YourAppName ${SpireMS_LIBS})
```

## 使用说明

### Python使用说明
1. 启动Core服务

```Bash
smscore
```

2.  发布话题
```Python
from spirems import Publisher, def_msg
import time
pub = Publisher('/topic/hello', 'std_msgs::String')
msg = def_msg('std_msgs::String')
while True:
    msg['data'] = 'hello world!'
    pub.publish(msg)
    time.sleep(1)
```

3.  订阅话题
```Python
from spirems import Subscriber

def callback_f(msg):
    print(msg['data'])

sub = Subscriber('/topic/hello', 'std_msgs::String', callback_f)
```

### C++使用说明

1. 启动Core服务（命令行方式，也可以用Python中的启动方式，启动一次即可）

```Bash
smscore
```

2. 发布话题
```C++
#include <sms_core.h>

int main(int argc, char *argv[])
{
    sms::Publisher pub("/topic/hello", "std_msgs::String");
    nlohmann::json msg = sms::def_msg("std_msgs::String");
    
    while (true)
    {
        msg["data"] = "hello world!";
        pub.publish(msg);
        sleep(1);
    }
}
```

3. 订阅话题
```C++
#include <sms_core.h>

void callback(nlohmann::json msg)
{
    std::cout << msg["data"] << std::endl;
}

int main(int argc, char *argv[])
{
    sms::Subscriber sub("/topic/hello", "std_msgs::String", callback);
    sub.join();
    return 0;
}
```

### 命令行控制

1. 显示所有话题

```Bash
sms list
```

2. 打印话题

```Bash
sms echo /topic/hello
```

3. 打印话题频率

```Bash
sms hz /topic/hello
```

4. 打印参数服务器所有参数

```Bash
smsparam list
```

5. 在线更新参数

```Bash
smsparam set param_key param_value
```

6. 导出所有参数

```Bash
smsparam export output.json
```

## 参与贡献

1.  Fork 本仓库
2.  新建 Feat_xxx 分支
3.  提交代码
4.  新建 Pull Request