---
# System prepended metadata

title: RustでROS2
tags: [presentation, Rust, ROS 2]

---

---
title: RustでROS2
tags: presentation,Rust,ROS 2 
slideOptions:
    theme: white
    slideNumber: 'c/t'
    center: false
    transition: 'none'
    keyboard: true
    width: '93%'
    height: '100%'

---

<style>
/* basic design */
.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6,
.reveal section, .reveal table, .reveal li, .reveal blockquote, .reveal th, .reveal td, .reveal p {
    font-family: 'Meiryo UI', 'Source Sans Pro', Helvetica, sans-serif, 'Helvetica Neue', 'Helvetica', 'Arial', 'Hiragino Sans', 'ヒラギノ角ゴシック', YuGothic, 'Yu Gothic';
    text-align: left;
    line-height: 1.6;
    letter-spacing: normal;
    text-shadow: none;
    word-wrap: break-word;
    color: #444;
}
.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {font-weight: bold;}
.reveal h1, .reveal h2, .reveal h3 {color: #2980b9;}
.reveal th {background: #DDD;}
.reveal section img {background:none; border:none; box-shadow:none; max-width: 95%; max-height: 95%;}
.reveal blockquote {width: 90%; padding: 0.5vw 3.0vw;}
.reveal table {margin: 1.0vw auto;}
.reveal code {line-height: 1.2;}
.reveal p, .reveal li {padding: 0vw; margin: 0vw;}
.reveal .box {margin: -0.5vw 1.5vw 2.0vw -1.5vw; padding: 0.5vw 1.5vw 0.5vw 1.5vw; background: #EEE; border-radius: 1.5vw;}
/* table design */
.reveal table {background: #f5f5f5;}
.reveal th {background: #444; color: #fff;}
.reveal td {position: relative; transition: all 300ms;}
.reveal tbody:hover td { color: transparent; text-shadow: 0 0 3px #aaa;}
.reveal tbody:hover tr:hover td {color: #444; text-shadow: 0 1px 0 #fff;}
/* blockquote design */
.reveal blockquote {
    width: 90%;
    padding: 0.5vw 0 0.5vw 6.0vw;
    font-style: italic;
    background: #f5f5f5;
}
.reveal blockquote:before{
    position: absolute;
    top: 0.1vw;
    left: 1vw;
    content: "\f10d";
    font-family: FontAwesome;
    color: #2980b9;
    font-size: 3.0vw;
}
/* font size */
.reveal h1 {font-size: 5.0vw;}
.reveal h2 {font-size: 4.0vw;}
.reveal h3 {font-size: 2.8vw;}
.reveal h4 {font-size: 2.6vw;}
.reveal h5 {font-size: 2.4vw;}
.reveal h6 {font-size: 2.2vw;}
.reveal section, .reveal table, .reveal li, .reveal blockquote, .reveal th, .reveal td, .reveal p {font-size: 2.2vw;}
.reveal code {font-size: 1.6vw;}
/* new color */
.red {color: #EE6557;}
.blue {color: #16A6B6;}
/* split slide */
#right {left: -18.33%; text-align: left; float: left; width: 50%; z-index: -10;}
#left  {left:  31.25%; text-align: left; float: left; width: 50%; z-index: -10;}
</style>

<style>
/* specific design */
.reveal h2 {
    padding: 0 1.5vw;
    margin: 0.0vw 0 2.0vw -2.0vw;
    border-left: solid 1.2vw #2980b9;
    border-bottom: solid 0.8vw #d7d7d7;
}
</style>

<!-- --------------------------------------------------------------------------------------- -->

<br/>

# RustでROS2

<br/>
<br/>

#### 2020.10.26 
### 岡本拓海

---
<br/>
<br/>

ros2-rustを動かしてみた報告と理解ができていない部分のまとめです。

---
## 環境

- OS Ubuntu 20.04
- ROS **FoxyFitzroy**
    - (Dashingでは何個かヘッダが見つからずビルドエラー)
- rustc 1.46.0
- cargo 1.46.0


---

## Rustのインストール 

下記コマンドでインストールできます。

```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```

インストール時に以下の画面出ますが1を選んでください。

```
1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
>
```

スクリプトがPATHを勝手に通してくれるのですが、一旦ログアウトしないと適用されないので、ログアウト&ログインしてください。


---


## 使用ツールのインストール

下記のコマンドでvcstool他必要なツールをインストールします。

```bash
$ sudo apt install python3-vcstool libclang-dev clang
```

---



## ソースコードのインポート

下記のコマンドでros2 rustのソースコードをインポートします

```bash
$ mkdir -p ros2_rust_ws/src
$ cd ros2_rust_ws
$ wget https://raw.githubusercontent.com/ros2-rust/ros2_rust/master/ros2_rust.repos
$ vcs import src < ros2_rust.repos # .repoファイル内のリポジトリを探してきてsrcにインポート
```

---



## ビルド

あとは、いつものようにros2のビルドをすれば良いだけ。

```bash
source /opt/ros/foxy/setup.sh
colcon build
```

---

## 実行

### Publisher端末

```bash
source ./install/setup.sh
ros2 run rclrs_examples rclrs_publisher
```

### Subscriber端末

```bash
source ./install/setup.sh
ros2 run rclrs_examples rclrs_subscriber
```

---

## 実行結果

![コメント 2020-08-30 113634.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6898/c6d6180d-8b1c-59c8-c581-3ad4164355ac.png)


---

## この辺分からん

サンプル動かしてみただけなので、まだちゃんと読んでませんが、以下の部分理解してなかったり、知識不足です。。知ってる方いたら教えてください。。。。

- ros2/common_interfaces, ros2/rcl_interfaces, ros2/rosidl_defaultsの3つのリポジトリの役割
    - おそらくidlの生成とかrclを自前で作るのに必要なリポジトリっぽい。あとで調べる
    - この辺の資料知ってる人居たら、コメント貰えると嬉しいです
- rcls_examplesのCargo.tomlにrclrsについての記述が無い(なぜ？)
    - cmakeがcargoを叩いているのでこうなっているそうです

---

## 参考
ros2-rustのリポジトリ　https://github.com/ros2-rust/ros2_rust


