Skip to content

Commit

Permalink
update 12/01
Browse files Browse the repository at this point in the history
  • Loading branch information
YusukeKato committed Dec 6, 2024
1 parent d4d47df commit e3b0479
Showing 1 changed file with 28 additions and 0 deletions.
28 changes: 28 additions & 0 deletions markdown/2024/1201.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@
- tag=ros2

## はじめに

### アドベントカレンダーについて

この記事はQiitaのROS 2 Advent Calendar 2024の18日目の記事です。
12月1日から12月25日まで毎日ROS 2に関係した記事が投稿されるはずなので、そのほかの記事については下記のリンクからカレンダーをご確認ください。

Expand All @@ -16,6 +18,7 @@ https://qiita.com/advent-calendar/2024/ros2
ROS 2 Advent Calendar 2024

### 記事の概要

この記事ではURDFを置換してRVizで表示して遊ぶシェル芸を紹介します。
やはりROS 2においてURDFは必要不可欠な要素ではありますが、
イマイチどうやっていじっていいのかよく分からないことも多々あります。
Expand All @@ -26,6 +29,7 @@ ROS 2 Advent Calendar 2024
とはいえ本題に入る前に、まずはあらゆる読者を想定してそれぞれのキーワードを簡単に説明しておきます。

### ROS 2とは何か

ROSはRobot Operating Systemの略称で、ロボットを動かすためのミドルウェアです。
豊富なライブラリやツール、コミュニティなどが備わっていてとても便利だと思います。
詳しくは下記の公式ドキュメントをご覧ください。
Expand All @@ -35,6 +39,7 @@ https://docs.ros.org/en/jazzy/
ROS 2 Documentation

### シェル芸とは何か

シェルのワンライナーで様々なタスクをこなすことを指します。
詳しい定義や情報については下記のページをご覧ください。

Expand All @@ -43,13 +48,15 @@ https://b.ueda.tech/?page=01434
シェル芸のトップページ

### URDFとは何か

URDFはUnified Robot Description Formatの略称で、ロボットの情報を記述するためのXML形式のフォーマットのことです。主にROSで使われています。

https://wiki.ros.org/urdf

URDFのwikiページ

### 参考資料

下記が参考資料です。

https://qiita.com/yami_buta/items/2b514dc469f364be36ba
Expand All @@ -65,11 +72,14 @@ https://qiita.com/ykpages/items/fd99751f176f3e3b5c27
Qiita - シェル芸で遊ぶROS 2

## URDFを置換してRVizで表示する

それではさっそく始めていこうと思います。

### 最低限のURDFを作成

まずは下記の内容をコピペしてcube.urdfを作成します。
不完全なURDFかもしれませんが、とりあえずはこれで遊べます。

```
<robot name="cube">
<link name="cube_link">
Expand All @@ -83,15 +93,18 @@ Qiita - シェル芸で遊ぶROS 2
```

### RVizでURDFを表示

作成したcube.urdfをRVizで表示してみます。
robot_state_publisherにcube.urdfを渡すことで、robot_descriptionトピックとtfトピックを配信してくれます。

端末1で実行

```
ros2 run robot_state_publisher robot_state_publisher --ros-args -p robot_description:="$(cat cube.urdf)"
```

端末2で実行

```
rviz2
```
Expand All @@ -105,15 +118,18 @@ RVizが起動したら`Add`ボタンをクリックして`By display type`から
RVizの様子

### 立方体をちょっと伸ばす

それでは本題のシェル芸によるURDFの置換です。
ここでは下記のコマンドを実行して立方体のX軸方向のサイズを1から2に置換します。

端末3で実行

```
ros2 topic echo --once /robot_description | sed 's/"/\\"/g' | awk 'NR==1' | sed "s/1/2/" | xargs -I@ ros2 topic pub --once /robot_description std_msgs/msg/String "@" --qos-durability transient_local
```

下記がコマンドの簡単な解説です。

- ros2 topic echo --once /robot_description: robot_descriptionトピックを一度だけ出力
- sed 's/"/\\"/g': URDFを正しくパースできるように、ダブルクウォートをエスケープして消えないようにする
- awk 'NR==1': 一行目だけを出力
Expand All @@ -128,10 +144,12 @@ ros2 topic echo --once /robot_description | sed 's/"/\\"/g' | awk 'NR==1' | sed
ちょっと伸びる様子

### 立方体をもっと伸ばす

次に応用として立方体をもっと伸ばしてみます。
先ほどの置換の処理を少し書き換えた下記のコマンドを実行します。

端末3で実行

```
ros2 topic echo --once /robot_description | sed 's/"/\\"/g' | awk 'NR==1' | awk '{for(i=1;i<=9;i++){sub(1,i);print $0;sub(i,1)}}' | xargs -I@ ros2 topic pub --once /robot_description std_msgs/msg/String "@" --qos-durability transient_local
```
Expand All @@ -150,12 +168,15 @@ awk '{for(i=1;i<=9;i++){sub(1,i);print $0;sub(i,1)}}'
RVizでもっと伸ばした様子

## 色の置換にも挑戦

最後に、立方体の色を置換することにも挑戦してみます。
しかしros2 topic pubだとうまくいかなかったので、
ros2 param setを使用します。

### URDFを作成

まずは下記のようなcube2.urdfを作成します。

```
<robot name="cube">
<link name="base_link"/>
Expand All @@ -178,15 +199,18 @@ ros2 param setを使用します。
```

### RVizでURDFを表示

作成したcube2.urdfをRVizで表示します。
方法は先ほどの立方体を伸ばした時と同じです。

端末1で実行

```
ros2 run robot_state_publisher robot_state_publisher --ros-args -p robot_description:="$(cat cube2.urdf)"
```

端末2で実行

```
rviz2
```
Expand All @@ -199,12 +223,15 @@ rviz2
RVizの様子

### 色を置換

ros2 param setの使い方は下記の通りです。

```
ros2 param set /robot_state_publisher robot_description "$(cat cube2.urdf)"
```

下記のコマンドを実行すると色の値が置換されます(シェル芸ではないかもです)。

```
for i in {9..0};do sed -i "s/rgba=\"[0-9]*.[0-9]*/rgba=\"0.$i/" cube2.urdf;ros2 param set /robot_state_publisher robot_description "$(cat cube2.urdf)";done
```
Expand All @@ -218,6 +245,7 @@ for i in {9..0};do sed -i "s/rgba=\"[0-9]*.[0-9]*/rgba=\"0.$i/" cube2.urdf;ros2
色置換の様子

## おわりに

以上、URDFを置換してRVizで表示するシェル芸の紹介でした。
正しい行いかはさておき、URDFを書き換えたい際には何かしら参考になると嬉しい限りです。
まだまだURDFに限らずROS 2は分からないことだらけではありますが、
Expand Down

0 comments on commit e3b0479

Please sign in to comment.