1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ROS×PCL ROS Pub&Sub

Last updated at Posted at 2021-10-27

今回は簡単なPublishとSubscribeをするノードの作成をします

Requirement

Make Package

ここではすでにbeginner_tutorialsというパッケージができていると仮定します
環境変数の読み込み忘れずに

source /opt/ros/melodic/setup.bash

workspaceに移動しmakeします

cd ~/catkin_ws
catkin_make

これでbuild完了です
以下でできたファイルが確認できます

cd ~/catkin_ws/
ls

実行するとこんな感じです

build
devel
src

これ以降ターミナルを実行するたびに以下を実行すれば環境変数を読み込めます

source ~/catkin_ws/devel/setup.bash

毎回読み込むのがめんどくさかったら以下を実行しましょう!

echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc

プログラムはPCLをみこしてC++で書いていきます
まずはフォルダーに移動します。VSCode入ってる人はcode .でフォルダーを開けます

cd ~catkin_ws/src/beginner_tutorials
code .

ここからはコードです 
PCLをみこしてあえてC++の推奨に準拠して書いていきます

まずはメッセージをPublishするノードを書きます

beginner_tutorials/include/beginner_tutorials/talker.h
# include<ros/ros.h>
# include<std_msgs/String.h>

namespace talker_node{
class Talker{
public:
    Talker();
    ~Talker();
    void talker_publish(std_msgs::String &msg);

private:
    ros::NodeHandle nh_;
    ros::Publisher std_pub_;
};
}

beginner_tutorials/src/talker.cpp
# include<beginner_tutorials/talker.h>
namespace talker_node{

Talker::Talker(){
    std_pub_=nh_.advertise<std_msgs::String>("talker_node/string", 10);
}

Talker::~Talker(){}

void Talker::talker_publish(std_msgs::String &msg){
    std_pub_.publish(msg);
}
}

beginner_tutorials/src/talker_main.cpp
# include <ros/ros.h>
# include <beginner_tutorials/talker.h>

int main(int argc, char **argv){
    ros::init(argc, argv, "talker_node");
    talker_node:Talker talker;
    ros::Rate loop_rate(10);

    while(ros::ok()){
        std_msgs::String msg;
        msg.data = "hello ros&pcl!!";
        talker.talker_publish(msg);
        ros::spinOnce();
        loop_rate.sleep();
    }   
}

次にPublishされたメッセージをSubscribeして表示するノードを書きます

beginner_tutorials/include/beginner_tutorials/listener.h
# include<ros/ros.h>
# include<std_msgs/String.h>

namespace listener_node{
class Listener{
public:
    Listener();
    ~Listener();
    void string_callback(const std_msgs::String &msg);

private:
    ros::NodeHandle nh_;
    ros::Subscriber std_sub_;
};
}

beginner_tutorials/src/listener.cpp
# include<beginner_tutorials/listener.h>
namespace listener_node{

Listener::Listener(){
    std_sub_ = nh_.subscribe("talker_node/string", 10, &Listener::string_callback, this);
}

Listener::~Listener(){}

void Listener::string_callback(const std_msgs::String &msg){
    ROS_INFO("get msg is ~%s~", msg.data.c_str());
}
}

beginner_tutorials/src/listener_main.cpp
# include <ros/ros.h>
# include <beginner_tutorials/listener.h>

int main(int argc, char **argv){
    ros::init(argc, argv, "listener_node");
    listener_node::Listener listener;
    ros::spin();
}

以上でコードは完成です
最後にCMakeファイルを編集します

beginner_tutorials/CMakeLists.txt
cmake_minimum_required(VERSION 3.0.2)
  project(beginner_tutorials)

  ## Find catkin and any catkin packages
  find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs)

  ## Declare a catkin package
  catkin_package()

  ## Build talker and listener
  include_directories(include ${catkin_INCLUDE_DIRS})
  ## Declare C++ library
  add_library(${PROJECT_NAME} 
    src/talker.cpp
    src/listener.cpp
  )

  add_executable(talker_node src/talker.cpp src/talker_main.cpp)
  target_link_libraries(talker_node ${catkin_LIBRARIES})

  add_executable(listener_node src/listener.cpp src/listener_main.cpp)
  target_link_libraries(listener_node ${catkin_LIBRARIES})

もうちょいです
最後にmakeしましょう

cd ~/catkin_ws
catkin_make

これで完成!

実行してみます

その前にターミナルをいくつも開くと面倒なのでteminatorをインストールしましょう

sudo apt install terminator

これでCtrl+Shift+eでターミナルが横分割にでき、Ctrl+Shift+oで縦分割にできます

では新しくターミナルを開き以下を実行します
sourceを自動で読み込むようにしてない人はsourceを忘れずに

1つめ roscore

roscore

2つ目

rosrun beginner_tutorials talker_node

3つ目

rosrun beginner_tutorials listener_node 

うごきましたか??

おつした!

next

previous

references

1
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?