ROS学习笔记 | 您所在的位置:网站首页 › 节点服务例程 › ROS学习笔记 |
一个简单的ROS包,一个发布者,一个订阅者
刚开始学习ROS,参考网上的资料完成了测试节点的编写,记录一下。 个人习惯在home/Develop目录中做开发,于是在Develop目录下面创建了一个ROS目录,专门用作ROS开发 1,创建工作空间在自己的ROS目录(随便一个目录即可)下面新建一个工程目录demo,在demo目录下面创建一个工作空间 创建相关目录 cd /home/Develop/ROS mkdir demo cd demo mkdir src 初始化工作空间 cd ~/Develop/ROS/demo/src/ catkin_init_workspace cd ~/Develop/ROS/demo/ catkin_make 完成之后会在demo目录下面新增两个目录,一个是build目录(编译目录),另外一个是devel目录(开发目录) 接下来需要将我们的工作空间添加到环境变量,以便让ros可以在我们的工作空间下找ros包 source ~/Develop/ROS/demo/devel/setup.bash 2,创建功能包上面创建的工作空间是没有功能包的,我们可以使用catkin_create_pkg创建自己的功能包 cd ~/Develop/ROS/demo/src catkin_create_pkg mytest std_msgs roscpp 上面的命令在src目录下面创建了一个依赖于std::msgs和 roscpp的mytest功能包,创建包完成后,我们的目录下面多出了一些文件和目录。 通过命令可以查看功能包的依赖项 rospack depends mytest cd ~/Develop/ROS/demo catkin_make 此时因为我们未编写任何节点,因此不会编译出可执行程序 4,创建节点在mytest包中添加两个节点,一个发布者node_publisher,一个订阅者node_subscriber 在我们的mytest包目录下的src文件夹下面创建两个cpp源文件,作为两个节点的源文件 cd ~/Develop/ROS/demo/src/mytest/src touch node_publisher.cpp touch node_subscriber.cpp 两个文件内容如下 发布者节点 node_publisher.cpp #include #include #include int main(int argc, char** argv) { ros::init(argc, argv,"node_publisher"); ros::NodeHandle nd; /*publish string msg, 100 is the catch queue*/ ros::Publisher pub = nd.advertise("mytest_msg", 100); /*10 Hz*/ ros::Rate loop_rate(10); int cnt = 0; while(ros::ok()) { std_msgs::String msg; std::stringstream ss; ss ros::init(argc, argv,"node_subscriber"); ros::NodeHandle nd; /*publish string msg, 100 is the catch queue*/ ros::Subscriber sub = nd.subscribe("mytest_msg", 100, msgCallBack); ros::spin(); return 0; } 5,修改CMakeLists文件,并编译节点修该mytest包的CMakeLists.txt文件,将cpp文件编译成节点 gedit ~/Develop/ROS/demo/mytest/CMakeLists.txt 在文件末尾添加如下语句 add_executable(node_publisher src/node_publisher.cpp) add_executable(node_subscriber src/node_subscriber.cpp) target_link_libraries(node_publisher ${catkin_LIBRARIES}) target_link_libraries(node_subscriber ${catkin_LIBRARIES}) 编译节点 cd ~/Develop/ROS/demo catkin_make 6,运行测试节点打开一个终端,运行如下命令,打开rosmaster主节点 roscore 打开另一个终端,运行如下命令,打开node_publisher节点,开始发布字符串类型的消息 rosrun mytest node_publisher 打开另一个终端,运行如下命令,打开node_subscriber节点,开始接收并打印字符串消息 rosrun mytest node_subcriber 使用如下命令查看结点之间的关系 上面编写的发布者节点node_publisher和订阅者节点node_subscriber之间的关系 rosrun rqt_graph rqt_graph 古月大神 ROS节点订阅与发布 ros学习笔记–如何看可视化的话题与节点 |
CopyRight 2018-2019 实验室设备网 版权所有 |