rosのpublisherで複数のメッセージを配信する
概要
オライリーのros本の3章トピック通信までを読んだので、理解の定着化のためにも rosで動く電卓ツールを作ってみた
プログラミングROS ―Pythonによるロボットアプリケーション開発 (オライリー・ジャパン)
- 作者: Morgan Quigley,Brian Gerkey,William D. Smart,河田卓志,松田晃一,福地正樹,由谷哲夫
- 出版社/メーカー: オライリージャパン
- 発売日: 2017/12/13
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
環境
ubuntu 16.04
ROS KineticのUbuntu16.04 へのインストール
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
sudo apt-get update
sudo apt-get install ros-kinetic-desktop-full python-rosinstall
sudo rosdep init
rosdep update
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
ワークスペースの初期化
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
プロジェクトの作成
cd ~/catkin_ws/src
catkin_create_pkg "new_pkg" rospy
cd ~/catkin_ws
catkin_make
source ~/catkin_ws/devel/setup.bash
新しくプロジェクトを作成した直後の~/catkin_ws/のディレクトリ構成をtreeコマンドにて確認する
.
├── CMakeLists.txt -> /opt/ros/kinetic/share/catkin/cmake/toplevel.cmake
└── ros_calc
├── CMakeLists.txt
├── package.xml
└── src
電卓ツールの作成
作成した電卓ツールはrqt_graphを用いて以下のように表せる。
inputノードにて計算させたい四則演算を入力する。
入力例は"3 + 22", "432 - 12", "2 * 3", "12 / 2"
。
それらの入力を数値と演算子に分割し、定義した独自メッセージ型にてCalcElementトピックに配信する。calculationノードにてCalcElementトピックを購読し四則演算を行う。
計算結果をInt32でCalcAnserトピックに配信する。outputノードにてCalcAnserトピックを購読し、その内容を表示する。
また最終的に~/catkin_ws/のディレクトリ構成は以下のようになる
.
├── CMakeLists.txt -> /opt/ros/kinetic/share/catkin/cmake/toplevel.cmake
└── ros_calc
├── CMakeLists.txt
├── launch
│ └── calculator.launch
├── msg
│ └── CalcElement.msg
├── package.xml
└── src
├── calculation.py
├── input.py
└── output.py
独自メッセージ型を用いるためros_calcディレクトリのCMakeLists.txtとpackage.xmlを変更する必要がある。
CMakeLists.txtを4箇所変更する
find_package(catkin REQUIRED COMPONENTS
rospy
)
↓
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
)
## Generate messages in the 'msg' folder
# add_message_files(
# FILES
# Message1.msg
# Message2.msg
# )
↓
## Generate messages in the 'msg' folder
add_message_files(
FILES
CalcElement.msg
# Message2.msg
)
## Generate added messages and services with any dependencies listed here
# generate_messages(
# DEPENDENCIES
# std_msgs # Or other packages containing msgs
# )
↓
## Generate added messages and services with any dependencies listed here
generate_messages(
DEPENDENCIES
std_msgs # Or other packages containing msgs
)
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES calc
# CATKIN_DEPENDS rospy
# DEPENDS system_lib
)
↓
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES calculator
CATKIN_DEPENDS message_runtime
# DEPENDS system_lib
)
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
- srcディレクトリ内の各プログラムを以下に示す。
- CalcElement.msgを以下に示す。
- calculation.launchを以下に示す。launchを実行することで一度に複数のプログラムをrosrunできる
まとめ
電卓ツールの作成を通してrosのトピック通信の概念がわかった