当前位置:   article > 正文

PX4外部定位(T265/MOCAP/UWB等)配置记录_px4 外部数据

px4 外部数据

版本说明:

实验采用PX4 1.14固件版本+ROS1

0 引言

PX4系统使用NED作为参考坐标系(全局坐标系),如果使用方向朝前的磁力计,NED(X轴-North,Y轴-Earth,Z轴-Down)。

ROS系统中,当我们获取到外部定位数据时,一般可以通过/mavros/odometry/out(type: nav_msgs/Odometry)或者/mavros/vision_pose/pose(type: geometry_msgs/PoseStamped)中,需要注意的是,前者发送话题类型nav_msgs/Odometry需要设定/frame_id和/child_frame_id分别为/odom/base_link才能直接发送给px4(不设定任何tf树的话),当外部定位装置机体坐标系与PX4机体坐标系存在偏差时,需要提供转换,这时外部定位的/frame_id和/child_frame_id名称不限定;而后者需要提供时间戳才能正确发送。

  1. mavros/odometry/out:
  2. uwb_pos.pose.pose.position.x=pos_3d[0];
  3. uwb_pos.pose.pose.position.y=pos_3d[1];
  4. uwb_pos.pose.pose.position.z=pos_3d[2];
  5. uwb_pos.pose.pose.orientation.x = quaternion[1];
  6. uwb_pos.pose.pose.orientation.y = quaternion[2];
  7. uwb_pos.pose.pose.orientation.z = quaternion[3];
  8. uwb_pos.pose.pose.orientation.w = quaternion[0];
  9. uwb_pos.header.frame_id="odom";
  10. uwb_pos.child_frame_id="base_link";
  11. uwb_pub.publish(uwb_pos);
  1. mavros/vision_pose/pose:
  2. vision.pose.position.x = x;
  3. vision.pose.position.y = y;
  4. vision.pose.position.z = z;
  5. vision.pose.orientation.x = q_mocap.x();
  6. vision.pose.orientation.y = q_mocap.y();
  7. vision.pose.orientation.z = q_mocap.z();
  8. vision.pose.orientation.w = q_mocap.w();
  9. vision.header.stamp = ros::Time::now();
  10. vision_pub.publish(vision);

1 外部定位

往往外部定位装置参考坐标系和px4系统参考坐标系不会完全一致,这时需要使用一个转换。这里通过ROS(Robot Operating System)端进行转换,需要注意的是ROS中和PX4的local和world坐标系是不一样的。

FramePX4ROS
BodyFRD (X Forward, Y Right, Z Down)FLU (X Forward, Y Left, Z Up),通常命名为base_link
WorldFRD or NED (X North, Y East, Z Down)FLU or ENU (X East, Y North, Z Up),分别命名为odom或map

See REP105: Coordinate Frames for Mobile Platforms (opens new window)for more information about ROS frames.

ROS中使用ENU坐标系作为协议,所以外部定位数据应该遵守ENU坐标系发送,而MAVROS负责转换为NED坐标系下供PX4使用。(FRD对应FLU坐标系)

当外部定位机体坐标系和px4本地坐标系名称不一致时,使用MAVROS中的odometry插件可以较容易的处理。通过TF静态变化可以提供转换。详情查看:

mavros_extras: mavros::extra_plugins::OdometryPlugin Class Referenceicon-default.png?t=N7T8https://docs.ros.org/en/noetic/api/mavros_extras/html/classmavros_1_1extra__plugins_1_1OdometryPlugin.html#details通过添加以下代码到ROS的launch文件中:

  1. <node pkg="tf" type="static_transform_publisher" name="tf_baseLink_externalPoseChildFrame"
  2. args="0 0 0 <yaw> <pitch> <roll> base_link <external_pose_child_frame> 1000"/>
  3. <node pkg="tf" type="static_transform_publisher" name="tf_odom_externalPoseParentFrame"
  4. args="0 0 0 <yaw> <pitch> <roll> odom <external_pose_parent_frame> 1000"/>

确定你的外部定位装置tf转换是正确的,这里可以参考tf - ROS Wikiicon-default.png?t=N7T8https://wiki.ros.org/tf#static_transform_publisher

注意:当使用上面MAVROS插件的方式进行转换,需要确保外部定位的frame_id和child_frame_id不存在其他的TF变换,否则可能会破坏上述变换。

需要注意的是,上面launch文件中写入的base_link和odom会随着      mavros/launch/px4_config.yaml 更新而改变,在文件中找到odometry frames那一栏查看就行(?????????????)

2 Reference

Using Vision or Motion Capture Systems for Position Estimation | PX4 User Guide (v1.14)

Using Vision or Motion Capture Systems for Position Estimation | PX4 User Guide (v1.14)

REP 105 -- Coordinate Frames for Mobile Platforms (ROS.org)

mavros_extras: mavros::extra_plugins::OdometryPlugin Class Reference

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/844920
推荐阅读
相关标签
  

闽ICP备14008679号