Skip to content

Commit 6d276c4

Browse files
committed
remove imu feedback aquire path from topic
1 parent b5498eb commit 6d276c4

File tree

4 files changed

+25
-64
lines changed

4 files changed

+25
-64
lines changed

decomposition/meta_gimbal_controller/include/gimbal_controller/gimbal_position_controller.hpp

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ class GimbalPositionController : public controller_interface::ChainableControlle
6060
update_and_write_commands(const rclcpp::Time &time,
6161
const rclcpp::Duration &period) override;
6262

63-
using ControllerFeedbackMsg = sensor_msgs::msg::Imu;
6463
using ControllerReferenceMsg = behavior_interface::msg::Aim;
6564
using ControllerModeSrvType = std_srvs::srv::SetBool;
6665
using ControllerStateMsg = control_msgs::msg::MultiDOFStateStamped;
@@ -73,10 +72,6 @@ class GimbalPositionController : public controller_interface::ChainableControlle
7372
rclcpp::Subscription<ControllerReferenceMsg>::SharedPtr ref_subscriber_ = nullptr;
7473
realtime_tools::RealtimeBuffer<std::shared_ptr<ControllerReferenceMsg>> input_ref_;
7574

76-
// Feedback subscribers
77-
rclcpp::Subscription<ControllerFeedbackMsg>::SharedPtr feedback_subscriber_ = nullptr;
78-
realtime_tools::RealtimeBuffer<std::shared_ptr<ControllerFeedbackMsg>>
79-
input_feedback_;
8075

8176
std::shared_ptr<control_toolbox::PidROS> yaw_pos2vel_pid_;
8277

@@ -94,13 +89,9 @@ class GimbalPositionController : public controller_interface::ChainableControlle
9489

9590
private:
9691
void reference_callback(const std::shared_ptr<ControllerReferenceMsg> msg);
97-
void feedback_callback(const std::shared_ptr<ControllerFeedbackMsg> msg);
9892
void reset_controller_reference_msg(
9993
const std::shared_ptr<ControllerReferenceMsg> &msg,
10094
const std::shared_ptr<rclcpp_lifecycle::LifecycleNode> &);
101-
void reset_controller_feedback_msg(
102-
const std::shared_ptr<ControllerFeedbackMsg> &msg,
103-
const std::shared_ptr<rclcpp_lifecycle::LifecycleNode> &node);
10495
std::unique_ptr<semantic_components::IMUSensor> imu_sensor_;
10596
};
10697

decomposition/meta_gimbal_controller/src/gimbal_position_controller.cpp

Lines changed: 25 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
constexpr double NaN = std::numeric_limits<double>::quiet_NaN();
1818

1919
using ControllerReferenceMsg = gimbal_controller::GimbalPositionController::ControllerReferenceMsg;
20-
using ControllerFeedbackMsg = gimbal_controller::GimbalPositionController::ControllerFeedbackMsg;
2120

2221

2322
using hardware_interface::HW_IF_EFFORT;
@@ -26,7 +25,6 @@ using hardware_interface::HW_IF_VELOCITY;
2625

2726
namespace gimbal_controller
2827
{
29-
3028
void GimbalPositionController::reset_controller_reference_msg(
3129
const std::shared_ptr<ControllerReferenceMsg>& msg,
3230
const std::shared_ptr<rclcpp_lifecycle::LifecycleNode>& /*node*/)
@@ -35,21 +33,6 @@ namespace gimbal_controller
3533
msg->pitch = NaN;
3634
}
3735

38-
void GimbalPositionController::reset_controller_feedback_msg(
39-
const std::shared_ptr<ControllerFeedbackMsg>& msg, const std::shared_ptr<rclcpp_lifecycle::LifecycleNode>& node)
40-
{
41-
msg->header.stamp = node->now();
42-
msg->orientation.x = NaN;
43-
msg->orientation.y = NaN;
44-
msg->orientation.z = NaN;
45-
msg->orientation.w = NaN;
46-
msg->angular_velocity.x = NaN;
47-
msg->angular_velocity.y = NaN;
48-
msg->angular_velocity.z = NaN;
49-
msg->linear_acceleration.x = NaN;
50-
msg->linear_acceleration.y = NaN;
51-
msg->linear_acceleration.z = NaN;
52-
}
5336
controller_interface::CallbackReturn GimbalPositionController::on_init()
5437
{
5538

@@ -95,14 +78,6 @@ namespace gimbal_controller
9578
reset_controller_reference_msg(msg, get_node());
9679
input_ref_.writeFromNonRT(msg);
9780

98-
// Feedback Subscriber
99-
feedback_subscriber_ = get_node()->create_subscription<ControllerFeedbackMsg>(
100-
params_.imu_topic, subscribers_qos,
101-
std::bind(&GimbalPositionController::feedback_callback, this, std::placeholders::_1));
102-
103-
auto feedback_msg = std::make_shared<ControllerFeedbackMsg>();
104-
reset_controller_feedback_msg(feedback_msg, get_node());
105-
input_feedback_.writeFromNonRT(feedback_msg);
10681
try
10782
{
10883
// State publisher
@@ -150,13 +125,11 @@ namespace gimbal_controller
150125
state_interfaces_config.names.reserve(2);
151126
state_interfaces_config.names.push_back(params_.yaw_gimbal_joint.name + "/" + HW_IF_POSITION);
152127
state_interfaces_config.names.push_back(params_.pitch_gimbal_joint.name + "/" + HW_IF_POSITION);
153-
if (imu_sensor_)
154-
{
155-
auto imu_interfaces = imu_sensor_->get_state_interface_names();
156-
state_interfaces_config.names.insert(state_interfaces_config.names.end(), imu_interfaces.begin(),
157-
imu_interfaces.end());
158-
}
159-
// IMU feedback comes from ROS2 topic
128+
129+
// IMU feedback comes from state interfaces
130+
auto imu_interfaces = imu_sensor_->get_state_interface_names();
131+
state_interfaces_config.names.insert(state_interfaces_config.names.end(), imu_interfaces.begin(),
132+
imu_interfaces.end());
160133

161134
return state_interfaces_config;
162135
}
@@ -166,11 +139,6 @@ namespace gimbal_controller
166139
input_ref_.writeFromNonRT(msg);
167140
}
168141

169-
void GimbalPositionController::feedback_callback(const std::shared_ptr<ControllerFeedbackMsg> msg)
170-
{
171-
input_feedback_.writeFromNonRT(msg);
172-
}
173-
174142
std::vector<hardware_interface::CommandInterface> GimbalPositionController::on_export_reference_interfaces()
175143
{
176144
reference_interfaces_.resize(2, NaN);
@@ -198,7 +166,6 @@ namespace gimbal_controller
198166
{
199167
// Set default value in command
200168
reset_controller_reference_msg(*(input_ref_.readFromRT()), get_node());
201-
reset_controller_feedback_msg(*(input_feedback_.readFromRT()), get_node());
202169

203170
reference_interfaces_.assign(reference_interfaces_.size(), NaN);
204171
imu_sensor_->assign_loaned_state_interfaces(state_interfaces_);
@@ -214,9 +181,13 @@ namespace gimbal_controller
214181
}
215182

216183
#if RCLCPP_VERSION_MAJOR >= 28 // ROS 2 Jazzy or later
217-
controller_interface::return_type GimbalPositionController::update_reference_from_subscribers(const rclcpp::Time &time,const rclcpp::Duration &period){
184+
controller_interface::return_type
185+
GimbalPositionController::update_reference_from_subscribers(const rclcpp::Time& time,
186+
const rclcpp::Duration& period)
187+
{
218188
#else
219-
controller_interface::return_type GimbalPositionController::update_reference_from_subscribers(){
189+
controller_interface::return_type GimbalPositionController::update_reference_from_subscribers()
190+
{
220191
#endif
221192
auto current_ref = *(input_ref_.readFromRT()); // A shared_ptr must be allocated
222193
// immediately to prevent dangling
@@ -252,22 +223,24 @@ namespace gimbal_controller
252223
double yaw_pos_err = NaN, pitch_pos_err = NaN;
253224
double yaw_vel_ref = NaN;
254225

255-
double yaw_enc_pos = state_interfaces_[0].get_value();
256-
double pitch_enc_pos = state_interfaces_[1].get_value();
226+
// std::optional<double> yaw_enc_pos = state_interfaces_[0].get_optional();
227+
std::optional<double> pitch_enc_pos = state_interfaces_[1].get_optional();
257228
// Calculate commands
258229
if (!std::isnan(reference_interfaces_[0]) && !std::isnan(reference_interfaces_[1]) && !std::isnan(yaw_pos_fb) &&
259230
!std::isnan(pitch_pos_fb) && !std::isnan(roll_pos_fb) && !std::isnan(yaw_vel_fb) &&
260231
!std::isnan(pitch_vel_fb))
261232
{
233+
bool ret_ = true;
262234
if (params_.yaw_gimbal_joint.enable)
263235
{
264236
// Yaw Position (IMU) to velocity (IMU) PID
265237
yaw_pos_ref = reference_interfaces_[0];
266238
yaw_pos_err = angles::shortest_angular_distance(yaw_pos_fb, yaw_pos_ref);
267-
yaw_vel_ref = yaw_pos2vel_pid_->computeCommand(yaw_pos_err, period);
268-
command_interfaces_[0].set_value(0.0);
269-
command_interfaces_[1].set_value(yaw_vel_ref);
270-
command_interfaces_[2].set_value(0.0);
239+
yaw_vel_ref = yaw_pos2vel_pid_->compute_command(yaw_pos_err, period);
240+
241+
ret_ |= command_interfaces_[0].set_value(0.0);
242+
ret_ |= command_interfaces_[1].set_value(yaw_vel_ref);
243+
ret_ |= command_interfaces_[2].set_value(0.0);
271244
}
272245

273246
if (params_.pitch_gimbal_joint.enable)
@@ -277,7 +250,11 @@ namespace gimbal_controller
277250
// dm imu is positive up
278251
pitch_pos_ref = -reference_interfaces_[1];
279252
pitch_pos_err = angles::shortest_angular_distance(-pitch_pos_fb, pitch_pos_ref);
280-
command_interfaces_[3].set_value(pitch_enc_pos + pitch_pos_err);
253+
ret_ |= command_interfaces_[3].set_value(*pitch_enc_pos + pitch_pos_err);
254+
}
255+
if (!ret_)
256+
{
257+
RCLCPP_ERROR(get_node()->get_logger(), "Failed to set command interfaces");
281258
}
282259
}
283260
// Publish state
@@ -299,7 +276,7 @@ namespace gimbal_controller
299276
state_publisher_->msg_.dof_states[1].feedback = pitch_pos_fb;
300277
state_publisher_->msg_.dof_states[1].error = pitch_pos_err;
301278
state_publisher_->msg_.dof_states[1].time_step = period.seconds();
302-
state_publisher_->msg_.dof_states[1].output = pitch_enc_pos + pitch_pos_err;
279+
state_publisher_->msg_.dof_states[1].output = *pitch_enc_pos + pitch_pos_err;
303280
}
304281

305282
state_publisher_->unlockAndPublish();

decomposition/meta_gimbal_controller/src/meta_gimbal_position_controller.yaml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,6 @@ gimbal_position_controller:
2525
default_value: "pitch_gimbal_joint",
2626
description: "Specifies joint of the pitch gimbal.",
2727
}
28-
imu_topic:
29-
{
30-
type: string,
31-
default_value: "/gimbal_imu",
32-
description: "Specifies topic of the IMU.",
33-
}
3428
imu_sensor:
3529
{
3630
type: string,

meta_bringup/config/hero.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,6 @@ gimbal_position_controller:
8787
enable: true
8888
name: pitch_gimbal_joint
8989

90-
imu_topic: /imu
9190
imu_sensor: dm_imu
9291
gains:
9392
yaw_gimbal_joint_pos2vel:

0 commit comments

Comments
 (0)