鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    向行为树中添加平滑路径该方法

    已定时 已固定 已锁定 已移动
    Nav2
    bt行为树 全局路径优化
    2
    5
    305
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 5
      流水心清
      最后由 编辑

      请教大家个问题,在ros2的导航配置文件中,如何对规划好的全局路径进行平滑优化呢?如何在BT行为树中添加smoother_path节点?

      1 1 条回复 最后回复 回复 引用 0
      • 1
        1540302317 @553416962
        最后由 编辑

        @553416962 我也遇到这个问题了,不会搞,按理来说插件应该已经配置好了呀,行为树应该也启用了这个节点,因为已经有smoothed_plan话题了,不过里面没数据,启用了但是没调用。网上找到最相关的是这个https://blog.gitcode.com/a85f053c74129be6427b55accdb1d4bf.html,但是还是不知道在哪里改,哈哈哈哈

        5 1 条回复 最后回复 回复 引用 0
        • 5
          流水心清 @1540302317
          最后由 编辑

          @1540302317 我这样搞过,但是失败了,直接报错了。

          1 1 条回复 最后回复 回复 引用 0
          • 1
            1540302317 @553416962
            最后由 编辑

            @553416962 我尝试了一下,发现可以,但是还是存在一些疑问,写成博客了,https://blog.csdn.net/qq_45253884/article/details/150211597?spm=1001.2014.3001.5501

            5 1 条回复 最后回复 回复 引用 0
            • 5
              流水心清 @1540302317
              最后由 编辑

              @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);
              }
              

              期待继续交流!

              1 条回复 最后回复 回复 引用 0
              • 第一个帖子
                最后一个帖子
              皖ICP备16016415号-7
              Powered by NodeBB | 鱼香ROS