美文网首页Ros
ROS学习(二)简单ROS系统的建立

ROS学习(二)简单ROS系统的建立

作者: ZitroneFisch | 来源:发表于2020-05-31 19:05 被阅读0次

1. ROS系统的基本结构

ROS 系统简单的说是一个多进程管理系统,其中结点Node是最小的功能执行单元,它可以是一个main函数,当一个node被启动时,其相应的功能便被执行。Package是ROS里最小的编译单元,其包含多个node以及相关结构性文件。当需要执行某个node时,需要表明此node所在package。Workspace是ROS最小的环境配置单元,package需要放置在workspace才能被编译。

2. 构建简单ROS系统

了解ROS系统的基本结构后,我们来自己构建一个简单的ROS系统。

首先我们新建文件夹HalloRos作为我们的workspace,在此文件夹下再新建次级文件夹src,在terminal中cd到src文件下执行以下命令:

catkin_init_workspace

用来初始化workspace,可以看到在此src下自动生成一个CMakeLists.txt文件(不用编辑)用来生成此workspace的相关信息。然后cd回到HalloRos文件夹下,执行:

catkin_make

用来真正生成此工作空间,同时build和devel文件夹自动生成(不用编辑)。此时我们需要执行命令:

echo 'source ~/HalloRos/devel/setup.bash' >> ~/.bashrc

向Linux系统也就是我们的工作环境报备我们生成了一个ROS系统,以便使系统知道此ROS系统及其命令的存在。此刻workspace成功创建,接下来我们需要cd到src文件夹下,然后创建我们自己的包package,命令如下:

catkin_create_pkg printHelloRosPK std_msgs rospy roscpp

第一个参数printHelloRosPK是包名,后面的参数是依赖库,例如如果需要使用c++,则需要依赖库roscpp。至此,包printHelloRosPK建立成功,在此包下自动生成include、src文件夹以及CMakelists、package.xml文件。在此workspace下可以用相同的命令建立多个包。

3. 节点建立

在包printHelloRosPK下我们可以建立多个结点node。cd到printHelloRosPK下的src文件夹,新建一个printHelloRosPK.cpp文件作为我们的第一个节点node。

#include <ros/ros.h>

int main(int argc, char **argv)

{

    ros::init(argc,argv,"printHelloRosPK");//初始化ros系统,注意这里的printHelloRosPK是节点的名称

    ros::NodeHandle n;//创建一个ros节点

    ROS_INFO("Hello ROS");//打印信息

    ros::spinOnce();//消息回调处理函数,也就是系统等在这里,直到有回调消息进入

}

然后我们在包printHelloRosPK下的CMakeLists.txt文件里添加:

add_executable(printHelloRosPK src/printHelloRosPK.cpp)

target_link_libraries(printHelloRosPK ${catkin_LIBRARIES})

告诉系统此node的存在。然后回到工作空间HalloRos文件夹下,再次编译:

catkin_make

则拥有节点printHelloRosPK的ROS系统建立成功。

在一个新terminal中输入:

roscore

再在另一个terminal中输入:

rosrun printHelloRosPK printHelloRosPK

(其中第一个参数是包名,第二个参数是节点名),节点功能便被执行,输出:

至此,一个简单的ROS系统建立成功,下一篇将介绍ROS系统节点间通信机制。如有问题欢迎讨论。

参考文档:ROS系统学习2---ROS最小系统的制作_python_weixinhum-CSDN博客

下一篇:ROS学习(三)节点通信机制 - 简书

相关文章

网友评论

    本文标题:ROS学习(二)简单ROS系统的建立

    本文链接:https://www.haomeiwen.com/subject/iiuszhtx.html