【ROS学习-10】用C++编写一个简单的Publisher和S
1.创建Publisher Node
roscd beginner_tutorials
创建src/talker.cpp文件,内容如下(可从https://raw.github.com/ros/ros_tutorials/kinetic-devel/roscpp_tutorials/talker/talker.cpp获取源码):
#include "ros/ros.h"
#include "std_msgs/String.h"
#include
int main(int argc, char **argv)
{
ros::init(argc, argv, "talker");
ros::NodeHandle n;
ros::Publisher chatter_pub = n.advertise("chatter", 1000);
ros::Rate loop_rate(10);
int count = 0;
while(ros::ok())
{
std_msgs::String msg;
std::stringstream ss;
ss << "hello world " << count;
msg.data = ss.str();
ROS_INFO("%s", msg.data.c_str());
chatter_pub.publish(msg);
ros::spinOnce();
loop_rate.sleep();
++count;
}
return 0;
}
2.创建一个Subscriber Node
接下来再创建一个订阅者程序src/listener.cpp,源码如下(https://raw.github.com/ros/ros_tutorials/kinetic-devel/roscpp_tutorials/listener/listener.cpp):
#include "ros/ros.h"
#include "std_msgs/String.h"
void chatterCallback(const std_msgs::String::ConstPtr& msg)
{
ROS_INFO("I heard: [%s]", msg->data.c_str());
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "listener");
ros::NodeHandle n;
ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);
ros::spin();
return 0;
}
接下来在CMakeLists.txt文件最后添加如下内容:
add_executable(talker src/talker.cpp)
target_link_libraries(talker ${catkin_LIBRARIES})
add_dependencies(talker beginner_tutorials_generate_messages_cpp)
add_executable(listener src/listener.cpp)
target_link_libraries(listener ${catkin_LIBRARIES})
add_dependencies(listener beginner_tutorials_generate_messages_cpp)
3.编译执行
cd ~/ros/catkin_ws
catkin_make
编译完后,使用如下命令执行(分别在两个Terminal):
rosrun beginner_tutorials talker
执行后会有如下打印输出:
[ INFO] [1497787911.592887183]: hello world 0
[ INFO] [1497787911.692986744]: hello world 1
[ INFO] [1497787911.792978718]: hello world 2
[ INFO] [1497787911.892973684]: hello world 3
[ INFO] [1497787911.992973354]: hello world 4
[ INFO] [1497787912.092982118]: hello world 5
[ INFO] [1497787912.192957919]: hello world 6
[ INFO] [1497787912.292959869]: hello world 7
而下面命令:
rosrun beginner_tutorials listener
执行后有如下输出:
[ INFO] [1497787976.316714360]: I heard: [hello world 275]
[ INFO] [1497787976.416562016]: I heard: [hello world 276]
[ INFO] [1497787976.516452913]: I heard: [hello world 277]
[ INFO] [1497787976.616635718]: I heard: [hello world 278]
[ INFO] [1497787976.716403373]: I heard: [hello world 279]
[ INFO] [1497787976.816449993]: I heard: [hello world 280]
[ INFO] [1497787976.916431239]: I heard: [hello world 281]
4.参考网址
http://wiki.ros.org/ROS/Tutorials/WritingPublisherSubscriber%28c%2B%2B%29