Added rotate acorn and misc changes to approach acorns

This commit is contained in:
2026-04-15 11:17:36 +02:00
parent 773411951d
commit 1558ca1217
6 changed files with 344 additions and 18 deletions

View File

@@ -0,0 +1,80 @@
#pragma once
#include "geometry_msgs/msg/pose.hpp"
#include "toid_behaviors/scl.hpp"
#include "toid_behaviors/simple_move.hpp"
#include "toid_behaviors/rolling_average.hpp"
#include "toid_msgs/action/simple_move_coords.hpp"
#include "visualization_msgs/msg/marker.hpp"
namespace toid
{
using RotateAction = toid_msgs::action::SimpleRotate;
using PoseStamped = geometry_msgs::msg::PoseStamped;
using namespace nav2_behaviors;
class RotateAcorns : public SimpleMove<RotateAction>
{
public:
RotateAcorns();
~RotateAcorns();
void configureCB() override;
void activateCB() override;
void deactivateCB() override;
ResultStatus onStart(
const std::shared_ptr<const RotateAction::Goal> command, const geometry_msgs::msg::Pose & pose,
const geometry_msgs::msg::Twist & vel) override;
bool collisionDetection(
const geometry_msgs::msg::Pose & pose, geometry_msgs::msg::Pose & last_ok_pose);
void acorn_position_cb(PoseStamped::ConstSharedPtr msg);
ResultStatus updateVel(
const geometry_msgs::msg::Pose & pose, const geometry_msgs::msg::Twist & vel,
geometry_msgs::msg::Twist & out_vel) override;
virtual nav2_core::CostmapInfoType getResourceInfo() override
{
return nav2_core::CostmapInfoType::LOCAL;
}
void calc_err_and_sign(
double last_angle, double current_yaw, double & min_turn_angle, double & err, double & sign);
double check_space(const geometry_msgs::msg::Pose pose, const double e, const double sign);
double calc_speed(const double err, const double sign, const double angular_speed);
protected:
SmoothControlLaw scl_;
rclcpp::Subscription<PoseStamped>::SharedPtr acorn_pose_sub_;
double new_target_angle_;
std::shared_mutex mutex_;
RollingAverage avg_ = RollingAverage(10);
//Goal
double target_angle_;
double min_turn_angle_;
double initial_direction_;
unsigned char mode_;
//State
double angular_speed_;
double last_angle_;
double last_time_;
double distance_ = 1.0;
//Config
double max_angular_speed_;
double min_angular_speed_;
double max_angular_accel_;
double max_angular_decel_;
double lookahead_;
};
} // namespace toid