LoginSignup
0
0

シェル芸で遊ぶROS 2

Last updated at Posted at 2023-12-02

はじめに

シェル芸とROS 2を組み合わせておもしろいことができないか挑戦してみようと思います。今回はシェル芸でturtlesimを動かして遊んでみます。

シェル芸のトップページ

シェル芸の情報はこちらです。

ROS 2 Humbleの公式ドキュメント

ROS 2 Humbleの情報はこちらです。

参考記事 : ROS コマンドラインツール シェル芸

ROS 1のコマンドでシェル芸を行っている方の記事があります。

やりたいこと

シェル芸でturtlesimを綺麗に動かしたいです。

ROS 2のインストール

Tiryohさんのros2_setup_scripts_ubuntuを使えばROS 2を簡単にインストールができます(ありがとうございます!)。

1. 螺旋を描く

それではさっそくシェル芸でturtlesimを遊んでみます。

端末1で次のコマンドを実行して、turtlesimノードを起動します。

ros2 run turtlesim turtlesim_node

端末2で次のコマンドを実行して、螺旋を描くように亀を動かします。

awk 'BEGIN{for(i=1.0;i<10.0;i+=0.1){print i}}' | xargs -I@ ros2 topic pub --once /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: @, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 2.0}}"

実行結果は以下の画像の通りです。

turtlesim螺旋.png

綺麗なグルグルが描けました。

2. 複数の亀の出し方

turtlesim/spawnサービスをcallすれば複数の亀を出すことができます。下記のコマンドを実行すると、中央に亀が出現します。xyが亀の位置、thetaが亀の姿勢です。

ros2 service call /spawn turtlesim/srv/Spawn "{x: 5.5, y: 5.5, theta: 0.0}"

image.png

3. 複数の亀を出して動かす

それでは複数の亀を出して、いい感じに動かしてみます。

端末1で次のコマンドを実行して、turtlesimノードを起動します。

ros2 run turtlesim turtlesim_node

端末2で次のコマンドを実行して、14匹の亀を角度をずらして出現させます。

awk 'BEGIN{for(i=0.0; i<6.28; i+=0.5){print i}}' | xargs -I@ ros2 service call /spawn turtlesim/srv/Spawn "{x: 5.5, y: 5.5, theta: @}"

端末3で次のコマンドを実行して、それぞれの亀が螺旋を描くように動かします。

awk 'BEGIN{for(j=1;j<=14;j++){for(i=0;i<=10;i++){print j,i}}}' | xargs -n2 bash -c 'ros2 topic pub --once /turtle$0/cmd_vel geometry_msgs/msg/Twist "{linear: {x: $1, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.0}}"'

実行結果は以下の画像の通りです。

image.png

あまり綺麗ではないですが、螺旋は描けました。

4. ジグザグに動かす

螺旋以外の動きもやってみます。

端末1で次のコマンドを実行して、turtlesimノードを起動します。

ros2 run turtlesim turtlesim_node

端末2で次のコマンドを実行して、14匹の亀を角度をずらして出現させます。

awk 'BEGIN{for(i=0.0; i<6.28; i+=0.5){print i}}' | xargs -I@ ros2 service call /spawn turtlesim/srv/Spawn "{x: 5.5, y: 5.5, theta: @}"

端末3で次のコマンドを実行して、亀をジグザグに動かします。

awk 'BEGIN{for(j=1;j<=14;j++){for(i=0;i<20;i++){if(i%2==0){print j,0.0,1.0}else{print j,0.0,-1.0}print j,1.0,0.0}}}' | xargs -n3 bash -c 'ros2 topic pub --once /turtle$0/cmd_vel geometry_msgs/msg/Twist "{linear: {x: $1, y: $2, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}"'

実行結果は以下の画像の通りです。

image.png

またしてもあまり綺麗ではありませんが、ジグザグを描くことができました。

おわりに

シェル芸でROS 2のturtlesimを遊びました。もっと綺麗な模様を描きたかったのですが、意外と難しいようです。またいつか挑戦したいですね。

参考記事

xargsで引数を二つ以上取る方法はこちらの記事を参考にさせていただきました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0