mavros操作飞机时方向位置改为机体坐标系下指令(转载)

转载自:mavros操作飞机时方向位置改为机体坐标系下指令_渡之的博客-CSDN博客

前面试了很多,看官网里的说明

用 /mavros/setpoint_raw/local"里的frame_id改为"base_link" 不行

又直接发mavros_msgs/PositionTarget 修改里面的type_mask把忽略的都加上,但还是没用,飞机依然按照全局位置飞行

最后搞了好几天,才弄懂,只需要一行代码就搞定了。

节点声明ros::NodeHandle node;

node.setParam("mav_frame", 8);//Frame_body_ned=8这个参数从很多消息那都可以看到

加上这一句后再尝试,飞机就按照机体坐标系去飞行了

 
 

在使用mavros发送无人机飞行指令之前,需要确保你已经正确连接了无人机和计算机,并且成功启动了mavros节点。 下面是一个简单的c++代码示例,通过mavros发送指令让无人机向指定坐标飞行: ```c++ #include <ros/ros.h> #include <mavros_msgs/PositionTarget.h> int main(int argc, char **argv) { ros::init(argc, argv, "offboard_node"); ros::NodeHandle nh; ros::Publisher pub = nh.advertise<mavros_msgs::PositionTarget>("mavros/setpoint_raw/local", 10); // 设置目标位置坐标 mavros_msgs::PositionTarget pos_target; pos_target.coordinate_frame = mavros_msgs::PositionTarget::FRAME_LOCAL_NED; pos_target.type_mask = mavros_msgs::PositionTarget::IGNORE_VX | mavros_msgs::PositionTarget::IGNORE_VY | mavros_msgs::PositionTarget::IGNORE_VZ | mavros_msgs::PositionTarget::IGNORE_AFX | mavros_msgs::PositionTarget::IGNORE_AFY | mavros_msgs::PositionTarget::IGNORE_AFZ | mavros_msgs::PositionTarget::FORCE | mavros_msgs::PositionTarget::IGNORE_YAW_RATE; pos_target.position.x = 1.0; // 目标位置x坐标 pos_target.position.y = 2.0; // 目标位置y坐标 pos_target.position.z = 3.0; // 目标位置z坐标 // 发布目标位置指令 ros::Rate rate(20.0); while (ros::ok()) { pos_target.header.stamp = ros::Time::now(); pub.publish(pos_target); rate.sleep(); } return 0; } ``` 在代码中,我们首先创建了一个ros节点,并初始化了mavros节点。然后,我们创建了一个Publisher,用于发布无人机的目标位置指令。 我们设置了目标位置的坐标,并将其发布到mavros节点中。在while循环中,我们不断发布目标位置指令,以便让无人机不断朝向目标位置飞行。 需要注意的是,我们在此代码中设置了目标位置的坐标为(1.0, 2.0, 3.0),你需要根据实际情况修改这些坐标值。 此外,为了让代码更加健壮,你还需要添加错误处理和异常处理代码。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值