ROS节点与运行

首先,先明确一下与节点相关术语的含义:

Nodes:节点,一个节点即为一个可执行程序,它可以通过ROS与其他节点通信,另外,一个catkin程序包里可以有很多节点。

Messages:消息,消息是一种ROS数据类型,用于订阅或发布到一个话题,是一个载体。

Topics:话题,节点可以向话题发布消息或可以向话题订阅消息,像通信中转站一样。

Master:节点管理器,ROS名称服务。

rosout:相当于std::cout

roscore:是在运行所有ROS程序前首先要运行的命令。

运行ros节点的方法:

一般有两种:

第一种:使用rosrun,在设置完环境变量后,可以使用包名来直接运行一个包内的节点。

用法:

$rosrun  [package_name]  [node_name]

注意:这种方法需要新打开一个终端 运行

$roscore

第二种:使用roslaunch

用法:

$roslaunch  [package]  [fliename.launch]

launch是个文件,用launch文件来运行程序相对于rosrun的优点有两个

<1>可以向程序传参

<2>可以同时运行多个节点

launch文件结构

<launch>
 <!--第1个节点-->
 	<node pkg="包名" type="包内可执行程序名字" name="节点名">
   	<!--注释内容-->
    		<para name="程序中的数值或布尔参数" value="" />
		<para name="程序中的字符串参数" value=" " type="str" />
		...
 	<node>
	...
 <!--第n个节点-->
	<node pkg="包名" type="包内可执行程序名字" name="节点名">
  	 <!--注释内容-->
    		...
	 <node>
</launch>

注意:

<1>包内可执行程序名由包内CMakeLists.txt控制生成。

<2>在每个可执行程序的main里都会有定义节点的语句,这里的节点名字只是用于代码编译,和launch文件的节点名不是一回事。

比如:

int main (int argc, char **argv)

{

 ros::init(argc,argv,"节点名字");

}


原文地址:https://www.cnblogs.com/zhubaohua-bupt/p/7182808.html