base on # ROS-Ethereum
By Shenhui Zhang, Boyi Liu
HNU, RobAI-Lab🤖 & HKUST, Hong Kong.
## NOTIFICATION
**Now ROS-Ethereum only support the messages of 'Odometry' type. ROS-Ethereum will support more types of messages, such as pictures. **
## ❓What is ROS-Ethereum
ROS-Ethereum serves as a kind of interaction scheme for ROS and Ethereum in a secure and convenient way. ROS-Ethereum is built on SM algorithm family which includes SM2, SM3 and SM4, TCP/IP transport protocol, Ethereum and, of course, ROS. As a user, what you need to do to get ROS-Ethereum works is just to input some key information(Like names and types of topics etc.).
ROS-Ethereum presents a user-friendly framework that blocks the complicated implementation process of detailed interaction scheme along with a **unified Ethereum Blockchain network** reserving for interaction. Our goal is to present a kind of **Critical Information storage and sharing media with security and flexibility** to facilitate the information communication in **all ROS systems** within the world.
Thanks for the key-exchange scheme based on SM algorithm family, ROS-Ethereum is equipped with a complete secure encryption mechanism in the cost of a slight loss in time-consuming performance. Every user has a unique identity and related interactive permissions like authority granting, information check and messages storage in the Ethereum network. Through this, every user having registered in the network can not only do the job of **persistent, tamper proof storage of critical information**, but also can conduct trusted information exchange communication with the other authorized party, out of the intervention of third party.
## 🛠️ How to use
#### Step 1️⃣: Prepare ROS and run envs
ROS-Ethereum is used for robots build upon `ROS Melodic` and related codes are run in `Anaconda3` envs along with `redis`. To prepare envs, you should prepare two virtual python envs, one in `pthon2.7` and the other in `python3.8`. And for the redis setup, please refer to [this](https://redis.io/download).
```
conda activate -n py2 python=2.7
conda activate -n py3 python=3.8
```
Then, you should set up `redis` module in the two virtual envs.
```
conda activate py2
conda install redis redis-py
conda activate py3
conda install redis redis-py
```
#### Step 2️⃣: compile your workspace
Cloning the codes and move the folder`listen_node` to your `src` of your workspace and run the following commands:
```
catkin_make
```
And export the path of your workspace to the `~/.bashrc`:
```
sudo vim ~/.bashrc
:i
export CATKIN_WS=/...
:wq
source ~/.bashrc
```
#### Step 3️⃣: Registration
To register the identity, please run the following codes ($catkin_ws is the location of your workspace):
```
cd $catkin_ws/src/listen_node/scripts/Ultimate
conda activate py3
python register.py
```
And follow the instructions.
#### Step 4️⃣: Assign the topics and start monitoring
Run the following codes to initialize the variables:
```
cd $catkin_ws/src/listen_node/scripts/Utlimate
conda activate py2
python console
```
When you enter the topics and message types, you can run the following codes to start monitoring. But, before you start monitoring, please make sure that **the `redis` module runs normally**.
```
cd $catkin_ws/src/listen_node/scripts/v2/Utlimate
conda activate py2
python Monitor.py
```
## 📑Release Plan
ROS-Ethereum will support more message types in the future and will be equipment with the decryption module to facilitate the decryption of messages obtained from the Ethereum.
## 📧Contact Us
If you have any concerns here, please post as Github issues, or send an e-mail to Shenhui Zhang by [
[email protected]](mailto:
[email protected]) or Boyi Liu by [
[email protected]](mailto:
[email protected]).
", Assign "at most 3 tags" to the expected json: {"id":"1693","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"