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

    5.3.1 C++发布静态TF

    已定时 已固定 已锁定 已移动
    ROS2机器人开发:从入门到实践
    静态tf发布 c++
    2
    2
    268
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 1
      1044867193
      最后由 编辑

      执行发布静态TF的程序,通过ros2 topic list可以看到/tf_static,但是ros2 topic echo /tf_static后却没有任何内容显示,代码也没有任何报错,之后将小鱼代码粘贴过来使用,只修改了头文件,其中一行改为tf2_geometry_msgs/tf2_geometry_msgs.h,之后编译执行仍没有输出发布信息

      1 条回复 最后回复 回复 引用 0
      • 小伊小
        机器人小伊
        最后由 编辑

        在使用ROS 2进行TF(Transform)信息发布时,如果你遇到了ros2 topic echo /tf_static没有输出的情况,但ros2 topic list能看到/tf_static这个topic存在,这通常意味着TF消息确实被发布到了该topic,但是发布的内容可能由于某种原因未能正确解析或显示。这里有几个步骤可以帮助你诊断和解决问题:

        1. 确认TF消息类型:
          确保你发布的消息类型是正确的。在ROS 2中,静态变换通常使用tf2_msgs/msg/TFMessage类型。请检查你的发布者是否正确地使用了这个类型。

        2. 检查代码中的TF消息构建:
          确保你在构建TF消息时,正确地设置了frame_id, child_frame_id, transform(包括translation和rotation)。例如:

          #include <tf2_geometry_msgs/tf2_geometry_msgs.h>
          #include <tf2/LinearMath/Transform.h>
          #include <rclcpp/rclcpp.hpp>
          #include <tf2_msgs/msg/tf_message.hpp>
          
          using namespace std::chrono_literals;
          
          class StaticTFPublisher : public rclcpp::Node
          {
          public:
              StaticTFPublisher()
                  : Node("static_tf_publisher"), count_(0)
              {
                  tf_publisher_ = this->create_publisher<tf2_msgs::msg::TFMessage>("/tf_static", 10);
                  timer_ = this->create_wall_timer(
                      500ms, std::bind(&StaticTFPublisher::timer_callback, this));
              }
          
          private:
              void timer_callback()
              {
                  auto message = tf2_msgs::msg::TFMessage();
                  auto transformStamped = tf2_msgs::msg::TransformStamped();
                  transformStamped.header.stamp = this->now();
                  transformStamped.header.frame_id = "map";
                  transformStamped.child_frame_id = "base_link";
          
                  transformStamped.transform.translation.x = 1.0;
                  transformStamped.transform.translation.y = 0.0;
                  transformStamped.transform.translation.z = 0.0;
          
                  tf2::Quaternion q;
                  q.setRPY(0, 0, 0);
                  transformStamped.transform.rotation.x = q.x();
                  transformStamped.transform.rotation.y = q.y();
                  transformStamped.transform.rotation.z = q.z();
                  transformStamped.transform.rotation.w = q.w();
          
                  message.transforms.push_back(transformStamped);
                  tf_publisher_->publish(message);
                  RCLCPP_INFO(this->get_logger(), "Publishing: '%s'", transformStamped.child_frame_id.c_str());
              }
              rclcpp::TimerBase::SharedPtr timer_;
              rclcpp::Publisher<tf2_msgs::msg::TFMessage>::SharedPtr tf_publisher_;
              size_t count_;
          };
          
          int main(int argc, char *argv[])
          {
              rclcpp::init(argc, argv);
              rclcpp::spin(std::make_shared<StaticTFPublisher>());
              rclcpp::shutdown();
              return 0;
          }
          
        3. 检查ROS 2环境:
          确保你的ROS 2环境已经正确设置,包括所有依赖项都已正确安装。有时候,如果环境变量没有正确设置,或者某些包没有正确安装,也可能导致消息无法正确发布或接收。

        4. 使用ros2 topic info:
          使用ros2 topic info /tf_static来查看该topic的详细信息,包括发布者、订阅者数量以及消息类型等。这可以帮助你确认是否有任何节点正在订阅该topic。

        5. 检查ROS 2的日志输出:
          查看ROS 2的日志输出,看是否有任何相关的警告或错误信息。你可以使用ros2 node list和ros2 node info <node_name>来获取更多关于节点的信息。

        6. 尝试简单的TF发布示例:
          如果可能,尝试运行一个简单的TF发布示例,看看是否能成功发布和接收TF消息。这可以帮助你确定问题是否出在你的特定代码上。

        如果以上步骤都无法解决问题,可能需要更深入地检查你的代码和ROS 2的配置。希望这些步骤能帮助你找到问题的根源。


        以上为生成回答,仅供参考~

        我是小伊,已接入ChatGpt,所有回复,仅供参考~

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