moveit2
The MoveIt Motion Planning Framework for ROS 2.
Loading...
Searching...
No Matches
boring_string_publisher.cpp
Go to the documentation of this file.
1/*********************************************************************
2 * Software License Agreement (BSD License)
3 *
4 * Copyright (c) 2021, PickNik Robotics
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 * * Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * * Redistributions in binary form must reproduce the above
14 * copyright notice, this list of conditions and the following
15 * disclaimer in the documentation and/or other materials provided
16 * with the distribution.
17 * * Neither the name of PickNik Robotics nor the names of its
18 * contributors may be used to endorse or promote products derived
19 * from this software without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32 * POSSIBILITY OF SUCH DAMAGE.
33 *********************************************************************/
34
35/* Author: David V. Lu!! */
36
37#include <rclcpp/rclcpp.hpp>
38#include <std_msgs/msg/string.hpp>
39#include <fstream>
40#include <sstream>
41#include <sys/stat.h>
42
43int main(int argc, char** argv)
44{
45 rclcpp::init(argc, argv);
46 auto node = std::make_shared<rclcpp::Node>("boring_string_publisher");
47
48 // Get Two String Parameters
49 std::string topic, content_path;
50 node->declare_parameter("topic", rclcpp::ParameterType::PARAMETER_STRING);
51 node->get_parameter("topic", topic);
52 node->declare_parameter("content_path", rclcpp::ParameterType::PARAMETER_STRING);
53 node->get_parameter("content_path", content_path);
54
55 if (content_path.empty())
56 {
57 RCLCPP_FATAL(node->get_logger(), "content_path parameter was not specified or is empty");
58 return -1;
59 }
60
61 // Check if content exists
62 struct stat statistics;
63 if (stat(content_path.c_str(), &statistics) != 0)
64 {
65 RCLCPP_FATAL(node->get_logger(), "%s does not exist!", content_path.c_str());
66 return -1;
67 }
68
69 // Set Up Publisher
70 rclcpp::Publisher<std_msgs::msg::String>::SharedPtr string_publisher =
71 node->create_publisher<std_msgs::msg::String>(topic, rclcpp::QoS(1).transient_local());
72
73 // Read in Content
74 std::ifstream content_stream(content_path.c_str());
75 std::stringstream buffer;
76 buffer << content_stream.rdbuf();
77
78 // Publish Content
79 std_msgs::msg::String msg;
80 msg.data = buffer.str();
81 string_publisher->publish(msg);
82
83 rclcpp::spin(node);
84 rclcpp::shutdown();
85 return 0;
86}
int main(int argc, char **argv)