ros节点(node)与包(package)是ros系统的重要基本组成部分,依照官网说明做一个简单的整理,详细的参考官网教程
官网网址:https://wiki.ros.org/cn/ROS/Tutorials
简单理解一下节点与包的区别,节点是功能单元,包是文件单元。实现具体功能的是节点,包含节点文件,及launch等文件的一个文件整体叫一个包。而且,一个包里面可以包含多个节点或插件。
在一个包里,CMakeList.txt可以简单理解为节点的编译文件,package.xml可以简单理解为包的描述文件
ros工作目录与文件系统
c++下,ros使用catkin_make指令进行编译,可认为是结合了 cmake 与make指令,官方教程里建议我们把工作空间命名为catkin_ws,ws指的就是工作空间(workspace)。
工作空间文件夹里包含devel 和 build和src三个文件夹,src是我们的源码,在工作空间下运行catkin_make编译命令后,编译出devel和build文件夹,工程才可以执行。
包
创建
创建包的时候,可以自己根据需要建立文件夹,添加文件,也可以利用catkin_create_pkg指令自动创建
管理
编译 catkin_make
使用前需要source工作空间下的devel/setup.bash(或zsh)文件,在此之前还需要source一下ros自身的setup文件,如source /opt/ros/melodic/setup.zsh,但使用者一般会把这一步设置成开机自动运行
rospack 为包的管理指令,rospack list可以查看系统中现有的包的名称,除此之外还有很多功能,可自行探索
节点
创建
在创建包的过程中,就可以把节点搭建起来了
管理
rosrun为启动节点的命令,此外还可以编写launch文件,使用roslaunch命令启动节点
rosnode为节点的管理指令, rosnode list 可以查看现有节点名称,rosnode还可以使用list之外的很多命令,可以自己探索
roscore 故名思义,roscore是ros的核心,节点正常工作的前提是roscore正常运行
简单介绍一下ros节点编程中一些常用语句
ros::init
顾名思义,初始话用的
ros::NodeHandle
顾名思义,节点句柄,它也可以执行节点初始话,也可以对节点进行销毁等操作,是个很重要的工具
ros::rate
循环工具,循环在ros中很常用,这可以帮你定义一个指定频率的ros循环
ros::ok
很好理解,只要没出啥意外,这玩意就是true,一般在while循环中使用
ros::spin
启动自循环
ros::spinOnce
字面理解,启动单次自循环
ros::shutdown
这家伙被调用的时候,就意味着你的节点要关闭了,
roslaunch
启动文件,可用于启动ros节点
CMakeList.txt
如上文所说,这东西其实是用来编译节点的,想深入理解它的话,可以尝试系统的学习一下cmake和CMakeList的使用方法,
package.xml
顾名思义,这才是描述节点的文件,这个文件标签化的管理了ros软件包的元信息