kakepro’s blog

プログラムとかPC周りのことを書いていきます

【ROS入門】ROSプログラミング:ROSでHello World

はじめに

・環境
Windows 10 Home 21H2
WSL2
Intel(R) Core(TM) i5-4200U CPU @ 1.60GHz

・ROS melodicのインストール
下記記事を参照のこと
kakepro.hatenablog.com

・ここでやること
ROSでプログラムを作成する際のワークフローを理解する
PythonHello Worldする

ワークフロー

ROSの基本的なワークフローは
1.作業ディレクトリ(ワークスペース)の作成
2.ワークスペースの初期化
3.パッケージの作成
4.ビルド
である、と思う

まず、作業用ディレクトリ(ワークスペース、ws)を用意する

$ mkdir -p ~/hello_ws/src

続いてワークスペースの初期化を行う

$ cd ~/hello_ws
$ catkin init

続いてパッケージを作成する
作成方法は下記の書式の通り
$ cd catkin_create_pkg <パッケージ名> [依存パッケージ1] [依存パッケージ2]

ここではhelloというパッケージを作成してみる
$ cd src/
$ catkin_create_pkg hello rospy

f:id:kakepro:20220410163020p:plain
catkin_create_pkg

これでhelloという自作パッケージを作成できた
上で生成されたCMakeLIsts.txtはビルドシステムcatkinの設定ファイル、 package.xmlがパッケージの依存関係などを記述したファイルである

$ catkin build

ビルドしたhello_wsを有効化するため、設定ファイルの読み込みを行う
これは毎回必要

$ source ~/hello_ws/devel/setup.bash

先ほど自作したhelloパッケージで動かすソースコードをscriptディレクトリに記述する

$ mkdir ~/hello_ws/src/hello/scripts
$ vim ~/hello_ws/src/hello/scripts/hello_node.py

#Pythonのインタープリタを使用するためのシバン
#!/usr/bin/env python                                                            
#ROSでPythonを使うためのモジュールをインポート
import rospy
#ノードに"hello_node"という名前を付けて初期化
#ノードの名前は他のノードと重複してはいけない
rospy.init_node('hello_node') 
#loginfo()は引数の文字列を標準出力および/rosoutトピックとして送信する
rospy.loginfo('Hello World')  
#spin()は無限ループ(Ctrl-cで終了できる)
#これを書いておかないと/rosoutに文字列を送信する前にノードが終了してしまう
rospy.spin()

上のソースコードに実行権限を付与する

$ chmod +x ~/hello_ws/src/hello/scripts/hello_node.py

ここまで出来たら、もう一度ビルドして設定ファイルを読み込む

$ cd ~/hello_ws
$ catkin build

最後に、作成したソースコードを実行してみる
ノードの実行方法はrosrun パッケージ名 実行ファイル名である

新しいターミナルでroscoreを実行

$ roscore

さらに別のターミナルで下記を実行

$ cd ~/hello_ws
$ source ~/hello_ws/devel/setup.bash
$ rosrun hello hello_node.py

f:id:kakepro:20220410163743p:plain
HelloWorld

おしまい