- 启动文件Launch Files
ROS架构鼓励工程师使用“节点”作为系统中组织的基本单位,并且应用程序可以快速增长以要求许多节点进行操作。 打开新终端并快速运行每个节点变得不可行。 最好有一个工具可以同时启动多组节点。 ROS的“启动launch”文件就是这样一种工具。通过launch文件能一次启动多个节点。 同时也会启动roscore。
我们通常使用两个主要的启动文件来配置系统。 “环境节点environment nodes”和“应用程序application”节点。
“环境”启动文件-驱动/计划节点,配置数据等。
“应用程序”启动文件-为特定应用程序执行一系列操作。
示例
在您的工作区中,创建一个依赖于myworkcell_core的新软件包myworkcell_support。 重建并提供工作空间,以便ROS可以找到新的程序包:
cd ~/catkin_ws/src
catkin create pkg myworkcell_support --catkin-deps myworkcell_core
catkin build
source ~/catkin_ws/devel/setup.bash
创建启动文件的目录(在新的myworkcell_support程序包内部):
roscd myworkcell_support
mkdir launch
使用以下XML框架创建一个新文件workcell.launch(在启动目录内):
<launch>
</launch>
插入行以调出问题陈述中概述的节点。 有关更多信息,请参见参考文档:
<node name="fake_ar_publisher" pkg="fake_ar_publisher" type="fake_ar_publisher_node" />
<node name="vision_node" pkg="myworkcell_core" type="vision_node" />
切记:所有启动文件的内容必须在<launch> ... </ launch>标记对之间。
测试启动文件:
roslaunch myworkcell_support workcell.launch
请注意,没有任何通常的消息被打印到控制台窗口。 默认情况下,启动文件将抑制控制台输出低于ERROR严重级别。 要恢复正常的文本输出,请将output =“ screen”属性添加到启动文件中的每个节点:
<node name="fake_ar_publisher" pkg="fake_ar_publisher" type="fake_ar_publisher_node" output="screen"/>
<node name="vision_node" pkg="myworkcell_core" type="vision_node" output="screen" />
- 参数Parameters
main的参数是命令行参数。
类似的,roscore会启动参数服务器将配置参数分别传递给节点。
到目前为止,我们还没有使用request字段base_frame进行任何操作。 接下来,我们将使用ROS参数设置此字段。 步骤如下:
除了普通节点句柄外,还向myworkcell_node的main方法中添加一个专用节点句柄。
ros::NodeHandle private_node_handle ("~");
使用私有节点句柄加载参数base_frame并将其存储在本地字符串对象中。如果未提供任何参数,则默认为“ world”。
std::string base_frame;
private_node_handle.param<std::string>("base_frame", base_frame, "world"); // parameter name, string object reference, default value
在对vision_node进行服务调用时,请使用此参数填写request :: base_frame字段。
void start(const std::string& base_frame)
{
...
srv.request.base_frame = base_frame;
ROS_INFO_STREAM("Requesting pose in base frame: " << base_frame);
...
}
int main(...)
{
...
app.start(base_frame);
...
}
在启动文件中添加一个<param>标记以初始化新值。
<node name="myworkcell_node" pkg="myworkcell_core" type="myworkcell_node" output="screen">
<param name="base_frame" value="world"/>
</node>
build & launch
catkin build
roslaunch myworkcell_support workcell.launch