33 private_nh_(private_nh){
102 const geometry_msgs::PoseStampedConstPtr& pose_msg) {
117 const trajectory_msgs::MultiDOFJointTrajectoryConstPtr& msg) {
123 const size_t n_commands = msg->points.size();
126 ROS_WARN_STREAM(
"Got MultiDOFJointTrajectory message, but message has no points.");
134 for (
size_t i = 1; i < n_commands; ++i) {
135 const trajectory_msgs::MultiDOFJointTrajectoryPoint& reference_before = msg->points[i-1];
136 const trajectory_msgs::MultiDOFJointTrajectoryPoint& current_reference = msg->points[i];
148 if (n_commands > 1) {
158 ROS_WARN(
"Commands empty, this should not happen here");
175 ROS_INFO_ONCE(
"LeePositionController got first odometry message.");
181 Eigen::VectorXd ref_rotor_velocities;
185 mav_msgs::ActuatorsPtr actuator_msg(
new mav_msgs::Actuators);
187 actuator_msg->angular_velocities.clear();
188 for (
int i = 0; i < ref_rotor_velocities.size(); i++)
189 actuator_msg->angular_velocities.push_back(ref_rotor_velocities[i]);
190 actuator_msg->header.stamp = odometry_msg->header.stamp;
197 int main(
int argc,
char** argv) {
198 ros::init(argc, argv,
"lee_position_controller_node");
void eigenTrajectoryPointFromMsg(const trajectory_msgs::MultiDOFJointTrajectoryPoint &msg, EigenTrajectoryPoint *trajectory_point)
ros::NodeHandle private_nh_
#define ROS_INFO_ONCE(...)
Timer createTimer(Rate r, Handler h, Obj o, bool oneshot=false, bool autostart=true) const
Subscriber subscribe(const std::string &topic, uint32_t queue_size, void(T::*fp)(M), T *obj, const TransportHints &transport_hints=TransportHints())
ros::Timer command_timer_
void setPeriod(const Duration &period, bool reset=true)
ROSCPP_DECL void init(int &argc, char **argv, const std::string &name, uint32_t options=0)
void CommandPoseCallback(const geometry_msgs::PoseStampedConstPtr &pose_msg)
void MultiDofJointTrajectoryCallback(const trajectory_msgs::MultiDOFJointTrajectoryConstPtr &trajectory_reference_msg)
void GetRosParameter(const ros::NodeHandle &nh, const std::string &key, const T &default_value, T *value)
Eigen::Vector3d position_gain_
Eigen::Vector3d angular_rate_gain_
LeePositionController lee_position_controller_
static constexpr char COMMAND_ACTUATORS[]
void GetVehicleParameters(const ros::NodeHandle &nh, VehicleParameters *vehicle_parameters)
void SetTrajectoryPoint(const mav_msgs::EigenTrajectoryPoint &command_trajectory)
void publish(const boost::shared_ptr< M > &message) const
static constexpr char ODOMETRY[]
void OdometryCallback(const nav_msgs::OdometryConstPtr &odometry_msg)
static constexpr char COMMAND_POSE[]
int main(int argc, char **argv)
ros::Subscriber cmd_pose_sub_
Publisher advertise(const std::string &topic, uint32_t queue_size, bool latch=false)
mav_msgs::EigenTrajectoryPointDeque commands_
void TimedCommandCallback(const ros::TimerEvent &e)
#define ROS_WARN_STREAM(args)
void eigenTrajectoryPointFromPoseMsg(const geometry_msgs::Pose &msg, EigenTrajectoryPoint *trajectory_point)
void SetOdometry(const EigenOdometry &odometry)
VehicleParameters vehicle_parameters_
void CalculateRotorVelocities(Eigen::VectorXd *rotor_velocities) const
ros::Subscriber cmd_multi_dof_joint_trajectory_sub_
std::deque< ros::Duration > command_waiting_times_
LeePositionControllerNode(const ros::NodeHandle &nh, const ros::NodeHandle &private_nh)
Eigen::Vector3d velocity_gain_
Eigen::Vector3d attitude_gain_
ros::Publisher motor_velocity_reference_pub_
static constexpr char COMMAND_TRAJECTORY[]
void eigenOdometryFromMsg(const nav_msgs::OdometryConstPtr &msg, EigenOdometry *odometry)
void InitializeParameters()
ros::Subscriber odometry_sub_
~LeePositionControllerNode()
LeePositionControllerParameters controller_parameters_