31 #include <QApplication> 39 QApplication::closeAllWindows();
43 QCoreApplication::quit();
49 struct sigaction sigIntHandler;
58 sigemptyset(&sigIntHandler.sa_mask);
59 sigIntHandler.sa_flags = 0;
60 sigaction(SIGINT, &sigIntHandler, NULL);
67 rclcpp::Node(
"find_object_2d"),
72 std::string objectsPath;
73 std::string sessionPath;
74 std::string
settingsPath = QDir::homePath().append(
"/.ros/find_object_2d.ini").toStdString();
75 bool subscribeDepth =
false;
77 gui_ = this->declare_parameter(
"gui",
gui_);
78 objectsPath = this->declare_parameter(
"objects_path", objectsPath);
79 sessionPath = this->declare_parameter(
"session_path", sessionPath);
80 settingsPath = this->declare_parameter(
"settings_path", settingsPath);
81 subscribeDepth = this->declare_parameter(
"subscribe_depth", subscribeDepth);
83 RCLCPP_INFO(this->get_logger(),
"gui=%d",
gui_?1:0);
84 RCLCPP_INFO(this->get_logger(),
"objects_path=%s", objectsPath.c_str());
85 RCLCPP_INFO(this->get_logger(),
"session_path=%s", sessionPath.c_str());
86 RCLCPP_INFO(this->get_logger(),
"settings_path=%s", settingsPath.c_str());
87 RCLCPP_INFO(this->get_logger(),
"subscribe_depth = %s", subscribeDepth?
"true":
"false");
89 if(settingsPath.empty())
91 settingsPath = QDir::homePath().append(
"/.ros/find_object_2d.ini").toStdString();
95 if(!sessionPath.empty())
97 RCLCPP_WARN(this->get_logger(),
"\"settings_path\" parameter is ignored when \"session_path\" is set.");
100 QString path = settingsPath.c_str();
101 if(path.contains(
'~'))
103 path.replace(
'~', QDir::homePath());
104 settingsPath = path.toStdString();
112 if(!sessionPath.empty())
114 if(!objectsPath.empty())
116 RCLCPP_WARN(this->get_logger(),
"\"objects_path\" parameter is ignored when \"session_path\" is set.");
118 if(!findObjectROS_->loadSession(sessionPath.c_str()))
120 RCLCPP_ERROR(this->get_logger(),
"Failed to load session \"%s\"", sessionPath.c_str());
123 else if(!objectsPath.empty())
125 QString path = objectsPath.c_str();
126 if(path.contains(
'~'))
128 path.replace(
'~', QDir::homePath());
130 if(!findObjectROS_->loadObjects(path))
132 RCLCPP_ERROR(this->get_logger(),
"No objects loaded from path \"%s\"", path.toStdString().c_str());
141 void exec(
int argc,
char ** argv, std::shared_ptr<rclcpp::Node> node)
146 QApplication
app(argc, argv);
156 if(topics.size() == 1)
159 "<qt>Find-Object subscribed to <b>%1</b> topic.<br/>" 160 "You can remap the topic when starting the node: <br/>\"rosrun find_object_2d find_object_2d image:=your/image/topic\".<br/>" 161 "</qt>").arg(topics.first()));
163 else if(topics.size() == 3)
166 "<qt>Find-Object subscribed to : <br/> <b>%1</b> <br/> <b>%2</b> <br/> <b>%3</b><br/>" 167 "</qt>").arg(topics.at(0)).arg(topics.at(1)).arg(topics.at(2)));
170 app.connect( &app, SIGNAL( lastWindowClosed() ), &app, SLOT( quit() ) );
183 QCoreApplication
app(argc, argv);
211 int main(
int argc,
char** argv)
213 rclcpp::init(argc, argv);
214 auto node = std::make_shared<FindObjectNode>();
215 node->exec(argc, argv, node);
int main(int argc, char **argv)
void setupExecutor(std::shared_ptr< rclcpp::Node > node)
FindObjectROS * findObjectROS_
void setupQuitSignal(bool gui)
QStringList subscribedTopics() const
void setSourceImageText(const QString &text)
virtual ~FindObjectNode()
void my_handler_gui(int s)
void exec(int argc, char **argv, std::shared_ptr< rclcpp::Node > node)
static ParametersMap init(const QString &fileName)
static void saveSettings(const QString &fileName=QString())