ros 初始化和关闭
来源:互联网 发布:Python For Finance 编辑:程序博客网 时间:2024/04/30 22:13
http://wiki.ros.org/roscpp/Overview/Initialization%20and%20Shutdown
在调用任何roscpp函数之前首先要调用ros::init()函数有一下两种形式:
ros::init(argc,argv,"my_node_name");
或者
ros::init(argc,argv,"my_node_name",ros::init_options::AnonymousName);
一般ros::init()的格式如下:
voidros::init(<commandlineorremappingarguments>,std::stringnode_name,uint32_toptions);
argc 和 argv ROS使用者两个参数来解析命令行的重映射参数,ROS也会修改他们,使得他们不再包含任何重映射参数,所以如果在处理命令行之前调用ros::init(),你就不用自己略过这些参数了。
node_name 在被重映射参数覆盖之前,这个名字会用来命名节点名。节点名字在ROS系统中必须唯一。如果有第二个同名的节点启动,则第一个会自动被关闭。有时你需要运行多个同样的节点,则可以通过下面描述的init_options::AnonymousName来解决。
options 这个可选的参数可以使你指定一些操作来改变roscpp的行为。 。。。略。。。
初始化选项
ros::init_options::NoSigintHandler
· 不安装 SIGINT 句柄.这种情况下你需要自己安装SIGINT句柄来保证节点在退出时候会正确的关闭 . SIGINT的默认操作是终结一个进行,所以如果你想自己处理 SIGTERM 你需要使用跟这个选项.
ros::init_options::AnonymousName
· 匿名节点名称,增加一个随机数在节点名的后面,使得节点名唯一。
ros::init_options::NoRosout
· 不向/rosout 话题广播 rosconsole
·
关闭节点
当调用ros::shutdown()函数来关闭节点是,会终结所有开放的订阅,发布,服务,调用。
默认的roscpp也会安装SIGINT句柄用来检测Ctrl-C,并自动为你关闭节点。
关闭节点测试
有两种方法来检查关闭的状态。最常见的是ros::ok().当ros::ok()返回false时节点已经关闭,通常这样使用
while(ros::ok())
{.......}
另外一种方法是使用ros::isShuttingDown()方法。这种方法会在调用而不是执行完ros::shutdown()时立即返回true,一般不鼓励使用这种方法,但在有些情况下很有用,例如要测试一个长久运行的服务回调节点是否被要求关闭并且回调是否需要退出,就需要使用ros::isShuttingDown(),ros::ok()在这里不起作用,因为回调在运行的时候节点不能关闭。
自定义SIGINT 处理
你可以安装自定义SIGINT处理,如下:
#include <ros/ros.h>
#include <signal.h>
void mySigintHandler(int sig)
{
// Do some custom action.
// For example, publish a stop message to some other nodes.
// All the default sigint handler does is call shutdown()
ros::shutdown();
}
int main(int argc, char** argv)
{
ros::init(argc, argv, "my_node_name", ros::init_options::NoSigintHandler);
ros::NodeHandle nh;
// Override the default ros sigint handler.
// This must be set after the first NodeHandle is created.
signal(SIGINT, mySigintHandler);
//...
ros::spin();
return 0;
}
- ros 初始化和关闭
- ros 初始化和关闭 (ros::init(); ros::shutdown())
- ROS源代码阅读(4):ROS程序的初始化——file_log::init()和param::init()
- 窗口的初始化和关闭顺序
- Linux 启动过程, 初始化和关闭
- (7)初始化和关闭roscpp节点
- curator源码(一) 初始化、启动和关闭。
- Spark Streaming初始化和关闭源码图解(第23课)
- 第23课:Spark Streaming初始化和关闭源码图解
- (1)C语言图形模式的初始化和关闭
- ROS源代码阅读(2):ROS程序的初始化——从ros:init()出发
- ROS源代码阅读(5):ROS程序的初始化——对ros:init()的总结
- ROS Learning-009 beginner_Tutorials ROS服务 和 ROS参数
- ROS入门_1.13 创建ROS消息和ROS服务
- ROS总结——ROS消息和ROS服务
- ROS教程(十):创建ROS消息和ROS服务
- ROS-ros::spin() 和 ros::spinOnce() 区别及使用
- ROS笔记:(7)创建ROS消息和ROS服务
- 磁盘阵列RAID
- MTLRenderPassDescriptor
- 数据仓库和数据集市的区别
- 三言两语说shader(五)轮廓描边
- MFC-WM_CTLCOLOR消息绘制控件颜色
- ros 初始化和关闭
- nasm汇编语言小程序:计算多个指定位置的Fibonacci值
- MAC 如何修改host
- html <a>标签属性总结
- 包贝尔婚礼事件中,有哪些嘈可以吐?
- 一道dfs题目
- C# : 读取简单的XML文件
- C#+一般处理程序+jquery.uploadify 上传XML文件并插入数据库中
- wordpress 移动客户端(安卓,ios)