Common
common packages for kyubic
 
Loading...
Searching...
No Matches
qr_planner.hpp
Go to the documentation of this file.
1
10#ifndef _QR_PLANNER_HPP
11#define _QR_PLANNER_HPP
12
13#include <driver_msgs/msg/bool_stamped.hpp>
14#include <localization_msgs/msg/odometry.hpp>
15#include <mutex>
16#include <planner_msgs/action/qr.hpp>
17#include <planner_msgs/msg/wrench_plan.hpp>
18#include <rclcpp/rclcpp.hpp>
19#include <rclcpp_action/rclcpp_action.hpp>
20
22{
23
24using QRAction = planner_msgs::action::QR;
25using GoalHandleQR = rclcpp_action::ServerGoalHandle<QRAction>;
26
28{
29 // 制御指令値 (Python: ctrl_*)
30 float x;
31 float y;
32 float z;
33 float roll;
34 float yaw;
35 uint8_t z_mode;
38 bool is_error = false;
39 float det_x; // 画像上のX座標
40 float det_y; // 画像上のY座標
41 float det_z; // 距離 (dist)
42 float det_conf; // 信頼度
43};
44
46{
47 float x;
48 float y;
49 float z;
50 float roll;
51 float yaw;
52};
53
54class QRPlanner : public rclcpp::Node
55{
56public:
57 explicit QRPlanner(const rclcpp::NodeOptions & options);
58 ~QRPlanner();
59
60private:
61 // Callback
62 void odometryCallback(const localization_msgs::msg::Odometry::SharedPtr msg);
63
64 rclcpp_action::GoalResponse handle_goal(
65 const rclcpp_action::GoalUUID & uuid, std::shared_ptr<const QRAction::Goal> goal);
66
67 rclcpp_action::CancelResponse handle_cancel(const std::shared_ptr<GoalHandleQR> goal_handle);
68
69 void handle_accepted(const std::shared_ptr<GoalHandleQR> goal_handle);
70
71 // Logic
72 void _runPlannerLogic(const std::shared_ptr<GoalHandleQR> & goal_handle);
73 bool _checkReached(const PoseData & target, const Tolerance & tolerance);
74
75 // UDP
76 void udpReceiveThread();
77 void sendStartSignal();
78 bool parse_signal_to_pose(const std::string & data_str, PoseData & pose);
79
80 // Valiables
81 rclcpp::CallbackGroup::SharedPtr callback_group_;
82 rclcpp::Publisher<planner_msgs::msg::WrenchPlan>::SharedPtr pub_;
83 rclcpp::Publisher<driver_msgs::msg::BoolStamped>::SharedPtr zed_power_pub_;
84 rclcpp::Subscription<localization_msgs::msg::Odometry>::SharedPtr sub_;
85 rclcpp_action::Server<QRAction>::SharedPtr action_server_;
86
87 std::shared_ptr<GoalHandleQR> active_goal_handle_;
88 localization_msgs::msg::Odometry::SharedPtr current_odom_;
89
90 //計算ロジックを分離するための関数
91 std::unique_ptr<planner_msgs::msg::WrenchPlan> computeControlCommand(
92 const std::shared_ptr<localization_msgs::msg::Odometry> & odom, const PoseData & target);
93
94 // 関数宣言も忘れずに
95 void computeSearchMotion(
96 const std::shared_ptr<localization_msgs::msg::Odometry> & odom,
97 std::unique_ptr<planner_msgs::msg::WrenchPlan> & msg);
98
99 PoseData target_pose_;
100 Tolerance reach_tolerance;
101
102 std::mutex odom_mutex_;
103 std::mutex pose_mutex_;
104 std::mutex goal_mutex_;
105
106 // UDP config
107 std::string remote_ip_;
108 int remote_port_;
109 uint16_t udp_port;
110 int sock_fd_;
111 std::thread udp_thread_;
112 bool stop_thread_;
113};
114
115} // namespace planner::qr_planner
116
117#endif
Definition: qr_planner.hpp:55
~QRPlanner()
Definition: qr_planner.cpp:74
Definition: qr_planner.hpp:22
planner_msgs::action::QR QRAction
Definition: qr_planner.hpp:24
rclcpp_action::ServerGoalHandle< QRAction > GoalHandleQR
Definition: qr_planner.hpp:25
Definition: qr_planner.hpp:28
bool is_finished
Definition: qr_planner.hpp:36
uint8_t z_mode
Definition: qr_planner.hpp:35
float z
Definition: qr_planner.hpp:32
float roll
Definition: qr_planner.hpp:33
float det_conf
Definition: qr_planner.hpp:42
bool is_searching
Definition: qr_planner.hpp:37
bool is_error
Definition: qr_planner.hpp:38
float det_y
Definition: qr_planner.hpp:40
float x
Definition: qr_planner.hpp:30
float yaw
Definition: qr_planner.hpp:34
float det_x
Definition: qr_planner.hpp:39
float y
Definition: qr_planner.hpp:31
float det_z
Definition: qr_planner.hpp:41
Definition: qr_planner.hpp:46
float z
Definition: qr_planner.hpp:49
float x
Definition: qr_planner.hpp:47
float y
Definition: qr_planner.hpp:48
float roll
Definition: qr_planner.hpp:50
float yaw
Definition: qr_planner.hpp:51