ros批量发布静态变换的两种方法

ROS发布静态坐标变化

消息类型

std_msgs/Header header
  uint32 seq
  time stamp
  string frame_id
string child_frame_id
geometry_msgs/Transform transform
  geometry_msgs/Vector3 translation
    float64 x
    float64 y
    float64 z
  geometry_msgs/Quaternion rotation
    float64 x
    float64 y
    float64 z
    float64 w

例程(方法一)

#include <ros/ros.h>
#include "tf2_ros/static_transform_broadcaster.h"
#include"geometry_msgs/TransformStamped.h" //静态坐标消息类型
#include "tf2/LinearMath/Quaternion.h" //欧拉角-四元数转换
#include <bits/stdc++.h> //c++标准库

int main(int argc, char  *argv[]){
    ros::init(argc,argv,"static_tf"); //初始化节点
    ros::NodeHandle nh; //创建句柄
    tf2_ros::StaticTransformBroadcaster pub ; //创建发布者


    int id = 101; //初始tag的编号
    double x = 0.3, y = 0.3; //初始tag的坐标
    for(int i = 1; i <= 9; i ++){
        for(int j = 1; j <= 13; j ++){
            geometry_msgs::TransformStamped ts; //创建geometry_msgs命名空间下TransformStamped类型的变量,名为ts
            ts.header.seq = 100; // consecutively increasing ID 
            ts.header.stamp = ros::Time::now(); //时间戳
            ts.header.frame_id = "map"; //父坐标系名称(数据类型string)
            ts.child_frame_id = "tag_" + std::to_string(id); //子坐标系名称(数据类型string)
            ts.transform.translation.x = x; //将计算出的坐标封装在ts中
            ts.transform.translation.y = y;
            ts.transform.translation.z = 0;

            tf2::Quaternion qtn; //创建四元数变量
            qtn.setRPY(1.57,0,0); //将欧拉角转化为四元数(因为在TransformStamped类型中,用四元数表示位姿)
            ts.transform.rotation.x = qtn.getX(); //将计算出的欧拉角封装在ts变量中
            ts.transform.rotation.y = qtn.getY();
            ts.transform.rotation.z = qtn.getZ();
            ts.transform.rotation.w = qtn.getW();
        
            pub.sendTransform(ts); //发送静态坐标信息

            id ++;
            x += 0.6;
        }
        y += 0.6;
        x = 0.3;
    }

    ros::spin(); //阻塞程序,防止节点运行完自动关闭.
    return 0;
}

例程(方法二)

通过调用tf2_ros中的工具,通过launch文件发布静态变换

static_transform_publisher x y z yaw pitch roll frame_id child_frame_id

static_transform_publisher x y z qx qy qz qw frame_id child_frame_id

<launch>
<node pkg="tf2_ros" type="static_transform_publisher" name="link1_broadcaster" args="1 0 0 0 0 0 1 link1_parent link1" />
</launch>

通过简单程序批量生成以上格式的字符串即可。

效果

image-20220115173325534

原文链接: https://www.cnblogs.com/wzx1210/p/15831367.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    ros批量发布静态变换的两种方法

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/187107

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月12日 上午11:14
下一篇 2023年2月12日 上午11:14

相关推荐