ROS无人机global位置控制,报错PositionTargetGlobal failed because no origin,应该怎么解决,给出解决办法和示例代码
时间: 2024-05-10 20:19:46 浏览: 287
基于ROS的无人机飞行控制系统
3星 · 编辑精心推荐
你好,关于你的问题,我可以回答。这个报错是因为没有设置全局坐标系的原点。解决方法是在代码中设置全局坐标系的原点。具体操作如下:
1. 在代码中添加以下代码:
```
mavros_msgs::GlobalPositionTarget target;
target.coordinate_frame = mavros_msgs::GlobalPositionTarget::FRAME_GLOBAL_REL_ALT;
target.type_mask = mavros_msgs::GlobalPositionTarget::IGNORE_VX |
mavros_msgs::GlobalPositionTarget::IGNORE_VY |
mavros_msgs::GlobalPositionTarget::IGNORE_VZ |
mavros_msgs::GlobalPositionTarget::IGNORE_AFX |
mavros_msgs::GlobalPositionTarget::IGNORE_AFY |
mavros_msgs::GlobalPositionTarget::IGNORE_AFZ |
mavros_msgs::GlobalPositionTarget::FORCE |
mavros_msgs::GlobalPositionTarget::IGNORE_YAW |
mavros_msgs::GlobalPositionTarget::IGNORE_YAW_RATE;
target.latitude = lat;
target.longitude = lon;
target.altitude = alt;
target.header.stamp = ros::Time::now();
pub.publish(target);
```
其中,lat、lon、alt表示全局坐标系原点的经纬度和海拔高度,pub为ROS节点的发布器。
2. 执行以下命令:
```
rosrun mavros mavsys -t 20
```
该命令会将当前飞机的位置视为全局坐标系的原点。
3. 重新执行你的ROS无人机global位置控制代码,即可解决该报错。
希望以上回答能够对你有所帮助。
阅读全文