1. はじめに
UbuntuにROSを入れたけど,その次の一手がわからなかったのでその備忘録
環境は以下の通り
項目 | 内容 |
---|---|
OS | Ubuntu 18.04 LTS |
ROS | Melodic |
2. Visual Studio Codeのインストール
以下ページから.debをダウンロードしインストール
https://code.visualstudio.com/download
インテリセンスを活用するためVScodeの拡張機能で以下をインストール
- ROS
- CMakeLanguage
3. ワークスペース作成
ROSではワークスペースというフォルダ内にsrcというフォルダを作りそこにソースコードを置くのが主流らしい。今回はros_wsという名前を付けた。
mkdir -p ~/ros_ws/src
-pのオプションでは必要に応じて親ディレクトリも作られる
catkin init
catkin build
4. パッケージ作成
catkin_create_pkgでパッケージを作成
catkin_create_pkg utm_lx_30 roscpp rospy std_msgs tf
1つ目の引数がパッケージ名でなんでもよい。ここでは,utm_lx_30
2つ目以降は依存するパッケージ。この4つはよく使うらしい。
5. publisher.cpp作成
パッケージを作成するとutm_lx_30/srcというディレクトリができている。ここにpublisher.cppを新規追加
#include <ros/ros.h>
#include <std_msgs/String.h>
int main(int argc, char** argv)
{
int bufsize = 10;
int loopHz = 10;
ros::init(argc, argv, "basic_simple_talker");
ros::NodeHandle nh;
ros::Publisher chatter_pub = nh.advertise<std_msgs::String>("chatter", bufsize);
ros::Rate loop_rate(loopHz);
while (ros::ok())
{
std_msgs::String msg;
msg.data = "hello world!";
ROS_INFO("publish: %s", msg.data.c_str());
chatter_pub.publish(msg);
ros::spinOnce();
loop_rate.sleep();
}
return 0;
}
bufsizeはなるべく小さくした方がリアルタイム性が担保されるらしい。loopHzは通信周期をHz単位で変更可能。spinOnceは1回コールバック関数にアクセスする処理。
5. subscriber.cpp作成
#include <ros/ros.h>
#include <std_msgs/String.h>
void chatterCallback(const std_msgs::String& msg)
{
ROS_INFO("subscribe: %s", msg.data.c_str());
}
int main(int argc, char** argv)
{
int bufsize = 10;
ros::init(argc, argv, "basic_simple_listener");
ros::NodeHandle nh;
ros::Subscriber sub = nh.subscribe("chatter", bufsize, chatterCallback);
ros::spin();
return 0;
}
spinはメッセージがパブリッシュされるたびにコールバック関数にアクセスする処理。
6. CmakeList編集
CmakeList.txtを開き編集。もともと書いてあったりコメントアウトされていたりする。以下の情報を追加する。
project(utm_lx_30)
find_package(catkin REQUIRED COMPONENTS
roscpp
std_msgs
)
include_directories(
${catkin_INCLUDE_DIRS}
)
add_executable(publisher src/publisher.cpp)
add_executable(subscriber src/subscriber.cpp)
target_link_libraries(publisher
${catkin_LIBRARIES}
)
target_link_libraries(subscriber
${catkin_LIBRARIES}
)
7. ビルド
catkin build
8. 実行
roscore
rosrun utm_lx_30 publisher
rosrun utm_lx_30 subscriber
hello worldがsubscriberに表示されれば成功
参考文献
https://qiita.com/srs/items/e0e0a9dc3f94c2d3348e
https://qiita.com/srs/items/26ca826802d07a9e3d4e
https://lilaboc.work/archives/16182817.html
https://qiita.com/gupitasoftbank/items/bed437c7d747cb78f9a3