我有一个四旋翼,我想用hector_gazebo_plugin和python读取它在(x,y,z)中的位置。现在,我使用libhector_gazebo_ros_gps.so文件来获取四旋翼的纬度和经度。
但我想知道四旋翼的位置。
我该怎么做?
发布于 2021-09-24 16:18:19
在ros中,有几个不同的框架,正如BTables试图达到的那样。如果您试图从传感器数据中获得位置估计,请使用robot_localization包、familiarize yourself with the different kinds of frames和ros消息类型/数据进出该过程。
通常在ros中,有3个主要框架: map -> odom -> base_link。base_link是机器人上代表它的点。奥多姆框架跟踪集成的速度/加速度传感器更新,以具有连续的位置;它的原点通常是机器人启动的地方。地图框是机器人的“真实世界”位置。它确实需要一个原点位置和偏航,因为否则它是任意的。
在您的示例中,您似乎希望将机器人锚定在经度/纬度坐标框架内。我的建议仍然是在您的环境中选择一个源,如果可以的话,否则您可以使用引导位置作为源。
因此,我假设您的odom>base_link转换是一个EKF或UKF节点(来自robot_localization),使用来自您的四轴飞行器的IMU数据。然后,您的map->odom转换是另一个EKF或UKF,它也会在您的地图框中获得一个绝对位置作为更新。(参见github中的示例launch file (navsat notes)和yaml config file (navsat notes)等)。然后,您可以使用来自hector gazebo gps plugin的传感器主题( fix _msgs/NavSatFix)和navsat_transform_node来获取上述估计器的位置更新,并将变换映射到全球或utm坐标系。
如果你不关心你相对于出来的世界的位置,这会变得简单一点,否则它还具有将你的位置报告回lat/long的功能。
https://stackoverflow.com/questions/69309248
复制相似问题