hello world的实现
ROS中的程序的实现流程大致如下:
- 先创建一个工作空间;
- 创建一个功能包;
- 编辑源文件;
- 编辑配置文件;
- 编译并执行。
创建工作空间并初始化
mkdir -p test/src //创建test工作空间
//cd test
catkin_make
上述命令中,首先会创建一个工作空间test以及一个src子目录,然后再进入工作空间调用catkin_make命令编译。
创建ROS功能包并添加依赖
cd src
catkin_create_pkg hello roscpp rospy std_msgs
上述命令会在工作空空间下生成一个功能包,该功能包依赖于roscpp、rospy、std_msgs。
进入ros包的src目录编辑源文件
cd hello_ros
创建源码文件hello.cpp
cd hello_ros
touch hell.cpp
sudo gedit hello.cpp
改写hello.c
C++源码实现
#include "ros/ros.h"
int main(int argc, char *argv[])
{
//执行 ros 节点初始化
ros::init(argc,argv,"hello");
//创建 ros 节点句柄(非必须)
ros::NodeHandle n;
//控制台输出 hello world
ROS_INFO("hello world!");
return 0;
}
其中:
ros::init函数:初始化ROS客户端库。需要在程序起始处调用一次该函数,函数的最后一个参数是一个包含节点默认名的字符串。
ros::NodeHandle对象:是你的程序用于和ROS系统交互的主要机制,创建此对象将会把你的程序注册为节点管理器的节点。
ROS_INFO_STREAM宏: 将生成一条消息,且这条消息被发送的不同的位置,包括控制台。
编译hello程序
声明依赖库
sudo gedit CMakeLists.txt
//然后将以下内容复制到cmake文档中去
cmake_minimum_required(VERSION 2.8.3)
##cmake 的版本
project(hello_ros)
##工程的名称
find_package(catkin REQUIRED COMPONENTS roscpp)
##选择ros的包进行编译
include_directories( include ${catkin_INCLUDE_DIRS})
##对头文件进行添加
add_executable(hello hello.cpp)
##声明了我们想要的可执行文件的文件名,以及所需的源列表,如果需要多个源列表,使用空格将其分开
target_link_libraries(hello ${catkin_LIBRARIES})
##告诉CMake当连接此可执行文件时候需要链接哪些库。如果你的包里有多个可执行文件,为每个可执行文件复制和修改上述两行
编译工作区
一旦CMakeLists.txt文件设置好了,就可以编译工作区,在工作区根目录下使用一下指令:
cd test
catkin_make
执行
先执行命令行:
roscore
再执行
cd test
source ./devel/setup.bash
rosrun hello_ros hello
##rosrun 包名 C++节点名
ROS的文件系统级别
与其他操作系统类似,一个ROS程序的不同组件要放在不同的文件夹中,这些文件夹是根据功能不同来对文件进行组织的。
.功能包(Package):功能包构成了ROS中的原子级别。一个功能包具有用于创建ROS程序的最小结构和最小内容。它可以包含ROS运行时进程(节点)、配置文件等。
功能包下的功能包清单:功能包清单是提供关于功能包、许可证、依赖关系、编译标志等信息,清单由一个名为package.xml的文件管理。
元功能包,是几个具有某些功能的包组织在一起,那么你会使用一个元功能包。为了保持ROS简洁,功能包集被移除,在ROS中,存在大量用途的元功能包。
元功能包清单(package.xml)类似普通功能包但是有一个xml个是的导出标志,在结构上有一定的限制。
消息类型:消息是一个进程发送到其他进程的消息,ROS中有很多标准类型的消息。消息类型的说明存储在my_package/srv/MyMessageType.srv中
服务类型:服务类型的说明存储在my_package/srv/MyServiceType.srv中,为ROS中由每个进程提供的服务请求个和响应数据结构
工作空间
工作空间是一个文件夹,其中包含功能包,功能包有包含源文件和环境和或工作空间,从而提供编译这些功能包的一种方式。当你想要同时编译不同的功能包时,它非常有用,并且是集中化所有开发的一种好方式。
参考链接: ROS Hello World