4

阿木币

0

精华

3 小时

在线时间

应届白菜

Rank: 1

发表于 前天 17:48 86 浏览 1 回复

请教下,p230uwb版本,使用prometheus如何获取uwb定位数据?

目前使用下述代码,未能获取到UWB数据,请教下获取UWB数据的思路// 新增UWB订阅者
ros::Subscriber uwb_sub = n.subscribe<prometheus_msgs::LinktrackNodeframe2>("/nlink_linktrack_nodeframe2", 10, uwb_cb);


// 新增 UWB 回调函数
void uwb_cb(const prometheus_msgs::LinktrackNodeframe2::ConstPtr &msg)
{
    uwb_data = *msg;
    std::cout << "uwb_cb" std::endl;
}

std::cout << "UWB: (" << uwb_data.pos_3d[0] << ", " << uwb_data.pos_3d[1] << ", " << uwb_data.pos_3d[2] << ")" << std::endl;






飞机实时状态数据如下
Header: 1746611225.979738251
UAV ID: +1
Connected: +0
Armed: +0
Mode:
Location Source: +6
Odom Valid: +0
GPS Status: +0
GPS Num: +0
Position: (+0.00, -0.01, +0.06)
Range: +0.06
Latitude: +30.79
Longitude: +103.86
Altitude: +100.00
Relative Alt: +0.00
Velocity: (-0.00, -0.00, -0.00)
Attitude: (+0.01, +0.01, +1.47)
Attitude Q: (+0.00, -0.01, -0.67, -0.74)
Attitude Rate: (+0.00, +0.00, +0.00)
Battery State: +15.23
Battery Percentage: +0.35
UWB: (+0.00, +0.00, +0.00)










蓝白调已获得悬赏

最佳答案

如果你是买的uwb版本按照手册来就可以,如果是自己安装uwb,首先按照uwb手册让uwb正常工作,在p230机载电脑中安装uwb ros驱动,运行ros程序,生成uwb 定位ros话题,默认我们uwb话题订阅如下: uwb_sub = nh.subscrib ...

扫一扫浏览分享
回复

使用道具 举报

32

阿木币

0

精华

32 小时

在线时间

技术大V

Rank: 4

发表于 昨天 09:38
如果你是买的uwb版本按照手册来就可以,如果是自己安装uwb,首先按照uwb手册让uwb正常工作,在p230机载电脑中安装uwb ros驱动,运行ros程序,生成uwb 定位ros话题,默认我们uwb话题订阅如下: uwb_sub = nh.subscribe<prometheus_msgs::LinktrackNodeframe2>("/nlink_linktrack_nodeframe2", 10, &UAV_estimator::uwb_cb, this);回调函数如下:void UAV_estimator::uwb_cb(const prometheus_msgs::LinktrackNodeframe2::ConstPtr &msg)
{
    pos_drone_uwb[0] = msg->pos_3d[0];
    pos_drone_uwb[1] = msg->pos_3d[1];
    pos_drone_uwb[2] = msg->pos_3d[2];
    q_uwb = Eigen::Quaterniond(msg->quaternion[0],msg->quaternion[1],msg->quaternion[2],msg->quaternion[3]);
    Euler_uwb = quaternion_to_euler(q_uwb);

    get_uwb_stamp = ros::Time::now(); // 记录时间戳,防止超时
},然后赋值给vision pose:else if (location_source == prometheus_msgs::UAVState::UWB)
    {
        //j作为计数变量,初始值为0,这里循环6次为了排除初始UWB位置值不准,以第6次为准,测试下来在LinkTrack S型号UWB是没有问题的
        if(j<6)
        {
        
        uwb_offset.x = pos_drone_uwb[0];
        uwb_offset.y = pos_drone_uwb[1];
        j+=1;
        
        }

        vision_pose.header = uav_state.header;
        vision_pose.header.stamp = ros::Time::now();
        // vision_pose = uwb_pose;
        //这里如果不减去初始位置offset值,按照UWB的坐标系,地面电脑A0基站位置是原点,用户可能产生混乱
        //因为无人机基本都是按照上电位置为原点(0,0,0),所以这样减去。如果不需要,那么不减去直接赋值UWB就可以了
        //这里之所以只针对xy做offset偏移,z不做,是因为在LinkTrack S下z轴高度数据是激光雷达提供
        vision_pose.pose.position.x = pos_drone_uwb[0] - uwb_offset.x;
        vision_pose.pose.position.y = pos_drone_uwb[1] - uwb_offset.y;
        vision_pose.pose.position.z = uav_state.range;

        vision_pose.pose.orientation.x = q_uwb.x();
        vision_pose.pose.orientation.y = q_uwb.y();
        vision_pose.pose.orientation.z = q_uwb.z();
        vision_pose.pose.orientation.w = q_uwb.w();
    }这些在我们对外代码中都可以找到:https://gitee.com/amovlab/Prometheus
回复 点赞

使用道具 举报

返回列表
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表