$search
00001 00002 00003 /*************************************************************************** 00004 * multi_publisher.cpp - Example: publish multiple "nodes" 00005 * 00006 * Created: Fri Apr 08 12:16:30 2011 00007 * Copyright 2011 Tim Niemueller [www.niemueller.de] 00008 * 2011 SRI International 00009 * 2011 Carnegie Mellon University 00010 * 2011 Intel Labs Pittsburgh 00011 * 2011 Columbia University in the City of New York 00012 * 00013 ****************************************************************************/ 00014 00015 /* This program is free software; you can redistribute it and/or modify 00016 * it under the terms of the 3-clase BSD License. 00017 * 00018 * This program is distributed in the hope that it will be useful, 00019 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00020 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00021 * GNU Library General Public License for more details. 00022 * 00023 * Read the full text in the LICENSE file in the root directory. 00024 */ 00025 00026 #include <ros/ros.h> 00027 #include <nodemon/state_publisher.h> 00028 00029 00030 ros::Publisher g_pub; 00031 std::map<std::string, nodemon_msgs::NodeState> g_nodes; 00032 00033 unsigned int msgnum = 0; 00034 00035 void timer_cb(const ros::WallTimerEvent& event) 00036 { 00037 std::map<std::string, nodemon_msgs::NodeState>::iterator p; 00038 for (p = g_nodes.begin(); p != g_nodes.end(); ++p) { 00039 nodemon_msgs::NodeState &msg = p->second; 00040 //if (msg.state == nodemon_msgs::NodeState::RUNNING) { 00041 msg.time = ros::Time(event.current_real.sec, event.current_real.nsec); 00042 //} 00043 msg.machine_message = msg.human_message = ""; 00044 00045 if (msg.state == nodemon_msgs::NodeState::FATAL) { 00046 msg.machine_message = msg.human_message = "FATAL"; 00047 } else if (msg.state == nodemon_msgs::NodeState::ERROR) { 00048 msg.machine_message = msg.human_message = "ERROR"; 00049 } else if (msg.state == nodemon_msgs::NodeState::RECOVERING) { 00050 msg.machine_message = msg.human_message = "RECOVERING"; 00051 } else if (msg.state == nodemon_msgs::NodeState::WARNING) { 00052 msg.machine_message = msg.human_message = "WARNING"; 00053 } 00054 00055 g_pub.publish(msg); 00056 } 00057 } 00058 00059 00060 void 00061 add_fake_node(std::string nodename, uint8_t state) 00062 { 00063 nodemon_msgs::NodeState msg; 00064 msg.nodename = nodename; 00065 msg.package = "nodemon_cpp"; 00066 msg.nodetype = "example_multi_publisher"; 00067 msg.state = state; 00068 msg.time = ros::Time::now(); 00069 00070 g_nodes[nodename] = msg; 00071 } 00072 00073 int 00074 main(int argc, char **argv) 00075 { 00076 ros::init(argc, argv, "nodemon_pubex"); 00077 ros::NodeHandle n; 00078 00079 g_pub = n.advertise<nodemon_msgs::NodeState>("/nodemon/state", 10); 00080 00081 ros::WallTimer t = n.createWallTimer(ros::WallDuration(1.0), timer_cb); 00082 00083 add_fake_node("/test1", nodemon_msgs::NodeState::STARTING); 00084 add_fake_node("/test2", nodemon_msgs::NodeState::RUNNING); 00085 add_fake_node("/test3", nodemon_msgs::NodeState::RECOVERING); 00086 add_fake_node("/test4", nodemon_msgs::NodeState::ERROR); 00087 add_fake_node("/test5", nodemon_msgs::NodeState::FATAL); 00088 add_fake_node("/test6", nodemon_msgs::NodeState::RUNNING); 00089 add_fake_node("/test7", nodemon_msgs::NodeState::RUNNING); 00090 add_fake_node("/test8", nodemon_msgs::NodeState::RUNNING); 00091 add_fake_node("/test8", nodemon_msgs::NodeState::WARNING); 00092 add_fake_node("/test9", nodemon_msgs::NodeState::STOPPING); 00093 00094 ros::spin(); 00095 }