feat: add feedback
parent
8d89011cdf
commit
26c96bf055
|
@ -52,6 +52,7 @@
|
||||||
// transforms
|
// transforms
|
||||||
#include <tf2/utils.h>
|
#include <tf2/utils.h>
|
||||||
#include <tf2_ros/buffer.h>
|
#include <tf2_ros/buffer.h>
|
||||||
|
#include <tf/transform_listener.h>
|
||||||
|
|
||||||
// costmap
|
// costmap
|
||||||
#include <costmap_2d/costmap_2d_ros.h>
|
#include <costmap_2d/costmap_2d_ros.h>
|
||||||
|
@ -374,6 +375,12 @@ class MpcLocalPlannerROS : public nav_core::BaseLocalPlanner, public mbf_costmap
|
||||||
private:
|
private:
|
||||||
// Definition of member variables
|
// Definition of member variables
|
||||||
|
|
||||||
|
tf::TransformListener listener;
|
||||||
|
ros::Publisher state_pub;
|
||||||
|
ros::Timer timer;
|
||||||
|
|
||||||
|
void timerCallback(const ros::TimerEvent&);
|
||||||
|
|
||||||
// 外部对象(存储弱指针)
|
// 外部对象(存储弱指针)
|
||||||
costmap_2d::Costmap2DROS* _costmap_ros; //!< 指向从导航栈接收的代价地图 ros 包装器的指针
|
costmap_2d::Costmap2DROS* _costmap_ros; //!< 指向从导航栈接收的代价地图 ros 包装器的指针
|
||||||
costmap_2d::Costmap2D* _costmap; //!< 指向 2D 代价地图的指针(从代价地图 ros 包装器获取)
|
costmap_2d::Costmap2D* _costmap; //!< 指向 2D 代价地图的指针(从代价地图 ros 包装器获取)
|
||||||
|
|
|
@ -125,10 +125,10 @@ if __name__ == '__main__':
|
||||||
|
|
||||||
rospy.init_node("ocp_result_plotter", anonymous=True)
|
rospy.init_node("ocp_result_plotter", anonymous=True)
|
||||||
|
|
||||||
topic_name = "/test_mpc_optim_node/ocp_result"
|
topic_name = "/move_base/MpcLocalPlannerROS/ocp_result"
|
||||||
topic_name = rospy.get_param('~ocp_result_topic', topic_name)
|
topic_name = rospy.get_param('~ocp_result_topic', topic_name)
|
||||||
|
|
||||||
plot_states = rospy.get_param('~plot_states', False)
|
plot_states = rospy.get_param('~plot_states', True)
|
||||||
|
|
||||||
result_plotter = OcpResultPlotter(plot_states, topic_name)
|
result_plotter = OcpResultPlotter(plot_states, topic_name)
|
||||||
rate = 2
|
rate = 2
|
||||||
|
|
|
@ -111,6 +111,36 @@ void MpcLocalPlannerROS::reconfigureCollisionCB(CollisionReconfigureConfig& conf
|
||||||
_params.collision_check_no_poses = config.collision_check_no_poses;
|
_params.collision_check_no_poses = config.collision_check_no_poses;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void MpcLocalPlannerROS::timerCallback(const ros::TimerEvent&)
|
||||||
|
{
|
||||||
|
tf::StampedTransform transform;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// 监听最近的变换
|
||||||
|
listener.lookupTransform("map", "base_link", ros::Time(0), transform);
|
||||||
|
|
||||||
|
// 提取x, y和yaw
|
||||||
|
double x = transform.getOrigin().x();
|
||||||
|
double y = transform.getOrigin().y();
|
||||||
|
double yaw = tf::getYaw(transform.getRotation());
|
||||||
|
|
||||||
|
// 创建和发布状态消息
|
||||||
|
mpc_local_planner_msgs::StateFeedback state_msg;
|
||||||
|
state_msg.header.stamp = ros::Time::now();
|
||||||
|
state_msg.header.frame_id = "map";
|
||||||
|
state_msg.state.push_back(x);
|
||||||
|
state_msg.state.push_back(y);
|
||||||
|
state_msg.state.push_back(yaw);
|
||||||
|
state_pub.publish(state_msg);
|
||||||
|
}
|
||||||
|
catch (tf::TransformException &ex)
|
||||||
|
{
|
||||||
|
ROS_ERROR("%s", ex.what());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 初始化局部规划器
|
* @brief 初始化局部规划器
|
||||||
*
|
*
|
||||||
|
@ -128,6 +158,10 @@ void MpcLocalPlannerROS::initialize(std::string name, tf2_ros::Buffer* tf, costm
|
||||||
// 创建一个Node Handle,使用插件的名称(如在move_base中加载)
|
// 创建一个Node Handle,使用插件的名称(如在move_base中加载)
|
||||||
ros::NodeHandle nh("~/" + name);
|
ros::NodeHandle nh("~/" + name);
|
||||||
|
|
||||||
|
// 初始化发布器和定时器
|
||||||
|
state_pub = nh.advertise<mpc_local_planner_msgs::StateFeedback>("state_feedback", 10);
|
||||||
|
timer = nh.createTimer(ros::Duration(0.1), &MpcLocalPlannerROS::timerCallback, this); // 每0.1秒执行一次
|
||||||
|
|
||||||
// 加载插件相关的主要参数
|
// 加载插件相关的主要参数
|
||||||
nh.param("controller/xy_goal_tolerance", _params.xy_goal_tolerance, _params.xy_goal_tolerance);
|
nh.param("controller/xy_goal_tolerance", _params.xy_goal_tolerance, _params.xy_goal_tolerance);
|
||||||
nh.param("controller/yaw_goal_tolerance", _params.yaw_goal_tolerance, _params.yaw_goal_tolerance);
|
nh.param("controller/yaw_goal_tolerance", _params.yaw_goal_tolerance, _params.yaw_goal_tolerance);
|
||||||
|
|
Loading…
Reference in New Issue