1.工作空间的创建
打开命令行终端Ctrl+Alt+T
1)先回到主目录
cd ~/
2)新建工作空间文件夹
mkdir catkin_ws
3)在catkin_ws目录下新建src文件夹
cd catkin_ws
mkdir src
4)初始化src目录,生成的CMakeLists.txt为功能包编译配置
cd src
catkin_init_workspace
5)返回catkin_ws目录,对该工作空间执行一次编译
cd ~/catkin_ws
catkin_make
6)环境变量配置,使新建的catkin_ws工作空间可用
source devel/setup.bash
这时,便已经创建好了一个ROS的工作空间了,接下来就是在catkin_ws工作空间下的src目录下新建功能包并进行功能包程序编写了
2.创建功能包
1)在catkin_ws/src/下创建取名为hello_world的功能包
2)ROS功能包命名规范:只允许使用小写字母、数字和下划线,
3)且首字符必须为一个小写字母。
cd ~/catkin_ws/src/
catkin_create_pkg hello_world
注:可以在创建功能包时直接添加依赖包,也可后续对功能包目录下的CMakeLists.txt文件进行修改添加
这时候在~/catkin_ws/src/目录下能看到一个叫hello_world的文件夹,文件夹名称就是功能包的名称以及功能包的唯一标识符,这个说明功能包创建成功
3.编写代码
在hello_world目录下新建一个my_hello_world_node.cpp文件。
touch my_hello_world_node.cpp
用文本编辑器gedit打开my_hello_world_node.cpp文件,并输入如下内容。
gedit my_hello_world_node.cpp
#include "ros/ros.h"
int main(int argc,char **argv)
{
ros::init(argc,argv,"hello_node");
ros::NodeHandle nh;
ROS_INFO_STREAM("hello world!!!");
}
注:
- #include “ros/ros.h”这一句是包含头文件ros/ros.h,这是ROS提供的C++客户端库,是必须包含的头文件,在后面的编译配置中要添加相应的依赖库roscpp。
- ros::init(argc,argv,"hello_node");这一句是初始化ros节点并指明节点的名称,这里给节点取名为hello_node,一旦程序运行后就可以在ros的计算图中被注册为hello_node名称标识的节点。
- ros::NodeHandle nh;这一句是声明一个ros节点的句柄,初始化ros节点必须的。
- ROS_INFO_STREAM("hello world!!!");这一句是调用了roscpp库提供的方法ROS_INFO_STREAM来打印信息,这里打印字符串"hello world!!!"。
4.编译配置
由于创建功能包时没有添加依赖包,而my_hello_world_node.cpp程序中又包含了<ros/ros.h>这个库,因此我们需要添加名为roscpp的依赖库。
1)打开功能包目录下的CMakeLists.txt文件
在find_package(catkin REQUIRED ...)字段中添加roscpp,添加后的字段如下:
find_package(catkin REQUIRED COMPONENTS roscpp)
2)找到include_directories(...)字段,去掉${catkin_INCLUDE_DIRS}前面的注释,如下:
include_directories(
# include
${catkin_INCLUDE_DIRS}
)
3)打开功能包目录下的package.xml文件,找到这样一句话<buildtool_depend>catkin</buildtool_depend>,
在这句话的下面添加如下内容:
<build_depend>roscpp</build_depend>
<build_export_depend>roscpp</build_export_depend>
<exec_depend>roscpp</exec_depend>
4)在CMakeLists.txt文件最后一行添加
add_executable(my_hello_world_node ~/catkin_ws/src/hello_world/my_hello_world_node.cpp)
target_link_libraries(my_hello_world_node ${catkin_LIBRARIES})
注:
第一行声明了我们想要的可执行文件的文件名,以及生成此可执行文件所需的源文件列表。
如果你有多个源文件,把它们列在此处,并用空格将其区分开。
第二行告诉 Cmake 当链接此可执行文件时需要链接哪些库(在上面的 find_package 中定义)。
如果你的包中包括多个可执行文件,为每一个可执行文件复制和修改上述两行代码。
5)编译
cd ~/catkin_ws/
catkin_make
6.运行
1)启动ROS节点管理器,ROS节点管理器是所有节点运行的基础。
打开命令行终端:
roscore
2)用source devel/setup.bash激活catkin_ws工作空间
cd ~/catkin_ws/
source devel/setup.bash
3)用rosrun <package_name> <node_name>启动功能包中的节点。
rosrun hello_world my_hello_world_node