@1540302317 你好,我尝试了你的方法,确实可以调用成功。我之前尝试是没有在要修改的配置文件中添加<Sequence> 标签,导致文件配置失败。行为树这里我也不是很懂,照猫画虎😥 ,
我这里还有个邪修的方法,路径平滑是一个动作服务端,我就自己写了个动作客户端,在路径那里进行调用,达到优化的目的。
// 创建动作客户端
client_ = rclcpp_action::create_client<SmoothPath>(node_, "smooth_path");
void sendGoal(const nav_msgs::msg::Path &input_path)
{
RCLCPP_INFO(node_->get_logger(), "发送路径给平滑器...");
auto goal = SmoothPath::Goal();
goal.path = input_path;
auto send_goal_options = rclcpp_action::Client<SmoothPath>::SendGoalOptions();
send_goal_options.result_callback =
[this](const GoalHandle::WrappedResult &result) {
switch (result.code) {
case rclcpp_action::ResultCode::SUCCEEDED:
RCLCPP_INFO(node_->get_logger(), "路径平滑成功!");
savePath(result.result->path, path_d_data_);
break;
case rclcpp_action::ResultCode::ABORTED:
RCLCPP_ERROR(node_->get_logger(), "路径平滑被中止");
break;
case rclcpp_action::ResultCode::CANCELED:
RCLCPP_WARN(node_->get_logger(), "路径平滑被取消");
break;
default:
RCLCPP_ERROR(node_->get_logger(), "未知错误");
break;
}
};
client_->async_send_goal(goal, send_goal_options);
}
期待继续交流!