失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > ROS基本操作(一):发布与订阅

ROS基本操作(一):发布与订阅

时间:2020-04-05 00:03:17

相关推荐

ROS基本操作(一):发布与订阅

ROS官网教程

文章目录

1 创建ROS工作空间2 创建ROS软件包3 一个发布/订阅示例4 构建节点5 运行示例

1 创建ROS工作空间

创建ROS工作空间:

$ mkdir -p ~/your_dir/src$ cd ~/your_dir/$ catkin_make

创建成功:

$ /work/ros$ ls -a. .. build .catkin_workspace devel src

将当前工作空间设置在环境的最顶层:

echo "source /home/you/your_dir/devel/setup.bash" >> ~/.bashrcsource ~/.bashrc

查看ROS_PACKAGE_PATH环境变量是否包含你当前的工作空间目录:

echo $ROS_PACKAGE_PATH

显示如下,路径用:隔开

/home/you/your_dir/src:/opt/ros/melodic/share

2 创建ROS软件包

创建ROS软件包

命令:catkin_create_pkg <package_name> [depend1] [depend2] [depend3]...

#切换至工作空间中的源文件空间目录cd /home/you/your_dir/src#创建软件包catkin_create_pkg pub_sub_eg roscpp std_msgs

正确的目录结构如下:

your_dir/ -- 工作空间build/.catkin_workspacedevel/src/ -- 源文件空间CMakeLists.txt -- catkin自动创建的CMake 文件pub_sub_eg/ -- 软件包CMakeLists.txt-- pub_sub_eg的CMakeLists.txtpackage.xml -- pub_sub_eg的文件、依赖清单...其他包/CMakeLists.txtpackage.xml

3 一个发布/订阅示例

发布者

//pub_eg.cpp#include "ros/ros.h"#include "std_msgs/String.h"#include <sstream>int main(int argc, char **argv){ros::init(argc, argv, "talker");ros::NodeHandle n;ros::Publisher chatter_pub = n.advertise<std_msgs::String>("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;}

订阅

//sub_eg.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

将以下内容添加到/home/you/your_dir/src/pub_sub_eg/CMakeLists.txt文件的最后

add_executable(talker src/pub_eg.cpp)target_link_libraries(talker ${catkin_LIBRARIES})add_executable(listener src/sub_eg.cpp)target_link_libraries(listener ${catkin_LIBRARIES})

4 构建节点

指令:

cd /home/you/your_dircatkin_make

成功:

如下图所示,并在/home/you/your_dir/devel/lib/pub_sub_eg目录下生成两个可执行文件listenertalker

5 运行示例

运行roscore

新开终端,执行roscore,成功界面如下图,不是卡住了,这个终端被它占用了

运行发布者(talker)节点

命令:rosrun <package_name> <node_name>

:~$ rosrun pub_sub_eg talker[ INFO] [1632380887.305613762]: hello world 0[ INFO] [1632380887.406156027]: hello world 1[ INFO] [1632380887.506550027]: hello world 2[ INFO] [1632380887.605821851]: hello world 3[ INFO] [1632380887.705849630]: hello world 4[ INFO] [1632380887.806313501]: hello world 5[ INFO] [1632380887.906271487]: hello world 6[ INFO] [1632380888.006119049]: hello world 7

运行订阅者(listener)节点

:~$ rosrun pub_sub_eg listener[ INFO] [1632381058.295723795]: I heard: [hello world 3][ INFO] [1632381058.395464944]: I heard: [hello world 4][ INFO] [1632381058.494946567]: I heard: [hello world 5][ INFO] [1632381058.595786883]: I heard: [hello world 6][ INFO] [1632381058.695049193]: I heard: [hello world 7]

如果觉得《ROS基本操作(一):发布与订阅》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。