61 #include <rclcpp/rclcpp.hpp>
62 #include <sensor_msgs/msg/point_cloud2.hpp>
64 #include <sick_scan_xd/msg/radar_scan.hpp>
65 #include <sick_scan_xd/msg/encoder.hpp>
66 #include <sick_scan_xd/msg/li_doutputstate_msg.hpp>
67 #include <sick_scan_xd/msg/lf_erec_msg.hpp>
68 #include <sick_scan_xd/srv/cola_msg_srv.hpp>
70 #define RCLCPP_LOGGER rclcpp::get_logger("sick_scan_ros2_example")
71 #define ROS_INFO_STREAM(...) RCLCPP_INFO_STREAM(RCLCPP_LOGGER,__VA_ARGS__)
72 #define ROS_ERROR_STREAM(...) RCLCPP_ERROR_STREAM(RCLCPP_LOGGER,__VA_ARGS__)
81 SickScanMessageReceiver(rclcpp::Node::SharedPtr
node = 0,
const std::string& cloud_topic =
"cloud",
const std::string& lferec_topic =
"lferec",
const std::string& lidoutputstate_topic =
"lidoutputstate")
95 ROS_INFO_STREAM(
"sick_scan_ros2_example: pointcloud message received, size " <<
msg-> width <<
" x " <<
msg->height);
101 ROS_INFO_STREAM(
"sick_scan_ros2_example: lferec message received, " <<
msg->fields_number <<
" fields");
107 ROS_INFO_STREAM(
"sick_scan_ros2_example: lidoutputstate message received, " <<
msg->output_state.size() <<
" output states, " <<
msg->output_count.size() <<
" output counter");
117 bool sendSickScanServiceRequest(rclcpp::Node::SharedPtr
node, rclcpp::Client<sick_scan_xd::srv::ColaMsgSrv>::SharedPtr sick_scan_srv_colamsg_client,
const std::string& cola_msg)
119 std::shared_ptr<sick_scan_xd::srv::ColaMsgSrv::Request> sick_scan_srv_request = std::make_shared<sick_scan_xd::srv::ColaMsgSrv::Request>();
120 sick_scan_srv_request->request = cola_msg;
121 ROS_INFO_STREAM(
"sick_scan_ros2_example: sick_scan service request: \"" << sick_scan_srv_request->request <<
"\"");
122 std::shared_future<std::shared_ptr<sick_scan_xd::srv::ColaMsgSrv::Response>> sick_scan_srv_result = sick_scan_srv_colamsg_client->async_send_request(sick_scan_srv_request);
123 if (rclcpp::spin_until_future_complete(
node, sick_scan_srv_result) == rclcpp::FutureReturnCode::SUCCESS)
125 ROS_INFO_STREAM(
"sick_scan_ros2_example: sick_scan service response: \"" << sick_scan_srv_result.get()->response <<
"\"");
130 ROS_ERROR_STREAM(
"## ERROR sick_scan_ros2_example: sick_scan service request failed");
138 int main(
int argc,
char** argv)
142 rclcpp::NodeOptions node_options;
143 node_options.allow_undeclared_parameters(
true);
144 rclcpp::Node::SharedPtr
node = rclcpp::Node::make_shared(
"sick_scan_ros2_example",
"", node_options);
145 std::string sick_scan_msg_topic =
"/sick_tim_7xx";
146 for (
int i = 0; i < argc; i++)
148 if (strncmp(argv[i],
"topics:=", 8) == 0)
150 sick_scan_msg_topic = std::string(
"/") + std::string(argv[i] + 8);
156 SickScanMessageReceiver sickscan_message_receiver(
node,
"/cloud", sick_scan_msg_topic +
"/lferec", sick_scan_msg_topic +
"/lidoutputstate");
159 rclcpp::Client<sick_scan_xd::srv::ColaMsgSrv>::SharedPtr sick_scan_srv_colamsg_client =
node->create_client<sick_scan_xd::srv::ColaMsgSrv>(
"ColaMsg");
162 ROS_INFO_STREAM(
"sick_scan_ros2_example: Waiting for sick_scan service...");
166 if (sick_scan_srv_colamsg_client->wait_for_service(std::chrono::milliseconds(1)))
167 ROS_INFO_STREAM(
"sick_scan_ros2_example: sick_scan service available");
169 ROS_ERROR_STREAM(
"## ERROR sick_scan_ros2_example: sick_scan service not available");
174 rclcpp::Time sick_scan_srv_request_timestamp = rclcpp::Clock().now();
177 rclcpp::spin_some(
node);
178 rclcpp::sleep_for(std::chrono::milliseconds(1));
183 sick_scan_srv_request_timestamp = rclcpp::Clock().now();