ROS学习记录3——创建一个节点

1.创建一个功能包

首先,创建一个文件夹作为我们的“工作空间”,然后在工作空间内新建一个src文件夹:
在这里插入图片描述
接着我们在我们的工作空间的目录下,运行以下代码:

catkin_make

然后在工作空间里会出现:builddevel.catkin_workspace这三个文件。/src里会出现CMakeLists.txt这个文件。
以下是一段题外话:
我不知道为什么很多博客都将/src作为工作空间,并且在运行catkin_make之前会在/src里运行catkin_init_workspace,实际上,运行catkin_make的时候,会默认多执行一句等同于catkin_init_workspace的代码,而且.catkin_workspace无论是那种方法,都是生成在/src里,所以我不知道到底/src是工作空间,还是其父文件夹是工作空间,反正我的理解是后者。
直接使用catkin_make
在这里插入图片描述initmake
在这里插入图片描述
我又去Wiki上看了看,根目录的确是工作空间,那个src是资源空间:
在这里插入图片描述
题外话结束
接下来就是在/src运行代码,创建一个功能包:
看看代码结构:catkin_create_pkg 包名 依赖包1 依赖包2 依赖包…
我们使用ROS就可以极大地利用其提供的依赖包。

catkin_create_pkg test std_msgs roscpp rospy

然后我们得到以下结果:
在这里插入图片描述它提示我们修改package.xml里的值,但是这个文件是维护者标签,相当于包的说明,开源类型等等等,我们调试的时候可以不用修改,最后再修改即可。至于如何修改标签,我们可以在这篇文章中查到详细的方法:ROS入门教程-1.1.3 创建ROS程序包—8.自定义 package.xml

2.编写一个节点

然后我们在/src/test/src里编写我们的代码,比如:hello.cpp:

#include"ros/ros.h"

int main(int argc,char **argv)
{
   ros::init(argc,argv,"hello");
   ros::NodeHandle n;
   ros::Rate loop_rate(10);
   while(ros::ok())
   {
      ROS_INFO("Hello World!");
      ros::spinOnce();
      loop_rate.sleep();
   }
   return 0;
}

为了我们能够让包找到hello这个节点,我们需要编辑其信息:

修改包内的CMakeLists.txt
在这里插入图片描述我们可以添加以下两句话:

add_executable(hello src/hello.cpp)
target_link_libraries(hello ${catkin_LIBRARIES})

具体它们是看嘛的,可以看文件里的注释:
在这里插入图片描述
在这里插入图片描述
添加到任意非括号内部的位置即可:
在这里插入图片描述

保存后,我推荐将我们这个工作空间添加到我们系统环境里,不然每次我们编译或运行都要额外写一句代码,让它能找到我们的工作空间:
在主目录下编辑.bashrc文件:sudo gedit .bashrc,在文件末尾添加我们devel/setup.bash这个文件:
在这里插入图片描述
保存后 ,新打开一个终端 source一下:

我们去工作空间编译:catkin_make
这样就编译好了:
在这里插入图片描述试试效果:
emmm,我ROS环境出了点问题,等我重新弄弄再写,理论上到这一步就ok了
好了,成功!

发布了63 篇原创文章 · 获赞 38 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/u011017694/article/details/105110317