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

    完成python代码后尝试cpp代码不能实现效果

    已定时 已固定 已锁定 已移动 未解决
    综合问题
    tf c++
    1
    1
    156
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 1
      1246750626
      最后由 编辑

      #include "rclcpp/rclcpp.hpp"
      #include <chrono>
      #include <memory>
      #include "tf2/LinearMath/Quaternion.h"
      #include "tf2_ros/buffer.h"
      #include "tf2_ros/transform_listener.h"
      #include "tf2_geometry_msgs/tf2_geometry_msgs.hpp"
      #include "tf2/utils.h"
      #include "geometry_msgs/msg/transform_stamped.hpp"

      using namespace std::chrono_literals;

      class TFListener:public rclcpp::Node
      {
      public:
      TFListener():Node("tf2_listener")
      {
      buffer_=std::make_shared<tf2_ros::Buffer>(this->get_clock());
      listener_=std::make_shared<tf2_ros::TransformListener>(*buffer_);
      timer_=this->create_wall_timer(5s,std::bind(&TFListener::getTransform,this));

      }
      void getTransform()
      {
          try
          {
              const auto tf=buffer_->lookupTransform(
                  "map","base_footprint",this->get_clock()->now(),
                  rclcpp::Duration::from_seconds(1.0f));
      
              // 转换结果
                  const auto &translation=tf.transform.translation;
                  const auto &rotation=tf.transform.rotation;
                  double yaw,pitch,roll;
                  tf2::getEulerYPR(rotation,yaw,pitch,roll);
                  RCLCPP_INFO(get_logger(),"平移:(%f, %f, %f)",translation.x,translation.y,translation.z);
                  RCLCPP_INFO(get_logger(),"旋转:(%f, %f, %f)",roll,pitch,yaw);
          }
          catch(tf2::TransformException &ex)//异常情况
          {
              RCLCPP_WARN(get_logger(),"不能变换坐标,原因:%s",ex.what());
          }
      }
      private:
      std::shared_ptr<tf2_ros::Buffer> buffer_;
      std::shared_ptr<tf2_ros::TransformListener> listener_;
      rclcpp::TimerBase::SharedPtr timer_;
      

      };

      int main(int argc,char**argv)
      {
      rclcpp::init(argc,argv);
      auto node=std::make_shared<TFListener>();
      rclcpp::spin(node);
      rclcpp::shutdown();
      return 0;
      }

      跟着书本7.4.2完成python版本的用TF获取机器人实时位置,后面自己尝试cpp版本,但是一直不能接收到坐标情况,python版本的可以,代码有什么问题吗

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