2.2 mavros发布姿指令控制PX4

说明

使用遥控飞行

px4在stablize模式下,我们使用遥控器去控制px4飞行;
在飞行过程中,通常我们用4个通道就可以控制飞机飞行;
其中roll、pitch、yaw打杆的量就是我们期望无人机达到的姿态;
而throttle就是油门的大小;

自主飞行

不通过遥控器去发指令,而是由程序去发类似的指令控制px4飞行;
就可以达到和人在stablize下控制无人机一样的效果(但愿如此);
这里通过mavros给px4发布类似的信息,去替代上面的4个通道的指令,

发布的消息主题:

通过mavros/setpoint_raw/attitude

消息处理

1、其中ned下的欧拉角就是实际我们期望飞机达到的姿态角;
2、这个姿态角首先转换到enu坐标系下;
3、然后将欧拉角转换成四元数
4、油门限幅和归一化
5、发布消息

在这里插入图片描述

测试验证

现象

可以在qgc里面,通过主界面右上角的姿态角可以看到,飞机的实际的飞行姿态和我们在代码里面设置的期望姿态是否一致;
也可以看到飞机按照我们期望的姿态朝着一个方向飞去;

问题(1):

这里我也试过使用mavlink检测器里面去看attitude,但是实际发现实际的姿态一直在跳动;

问题(2):

将log下载后上传px4 log view
发现无法看到具体的数据

code 地址

github仓库
文件名为:publish_att.cpp
提交分支为:main
Commit: 5bcc46b4b3fba5a309b99a6beff498f613ecf390

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,你想了解如何使用mavros控制px4。首先,mavros是一个ROS包,它提供了一系列的ROS节点,用于与PX4飞控进行通信和控制PX4飞控是一款开源的飞控硬件和软件,它运行在多种无人机平台上,并提供了丰富的功能和接口。 要使用mavros控制px4,你需要先安装ROS和mavros包。安装过程可以参考ROS和mavros的官方文档。安装完成后,你需要启动mavros节点,并配置与PX4飞控的连接。 在启动mavros节点之前,你需要先启动PX4飞控,并确保它与你的计算机通过串口或无线通信连接。然后,在终端中输入以下命令启动mavros节点: ``` roslaunch mavros px4.launch ``` 该命令将启动mavros节点,并与PX4飞控建立连接。 接下来,你可以使用ROS的消息和服务接口来控制PX4飞控。例如,你可以使用mavros的setpoint_raw/local或setpoint_position/local服务来设置无人机的目标姿态或位置。你可以通过发布相应的消息来调整目标姿态或位置。 例如,以下是一段使用mavros控制无人机起飞和降落的Python代码: ```python import rospy from mavros_msgs.msg import State from mavros_msgs.srv import CommandBool, SetMode from geometry_msgs.msg import PoseStamped from std_msgs.msg import Bool # 初始化节点 rospy.init_node('drone_control') # 订阅mavros状态信息 state = State() def state_cb(msg): global state state = msg rospy.Subscriber('mavros/state', State, state_cb) # 发布起飞和降落命令 arming_client = rospy.ServiceProxy('mavros/cmd/arming', CommandBool) set_mode_client = rospy.ServiceProxy('mavros/set_mode', SetMode) def set_mode(mode): rospy.wait_for_service('mavros/set_mode') try: res = set_mode_client(custom_mode=mode) return res.mode_sent except rospy.ServiceException as e: print("Service call failed: %s" %e) def arming(value): rospy.wait_for_service('mavros/cmd/arming') try: res = arming_client(value) return res.success except rospy.ServiceException as e: print("Service call failed: %s" %e) # 发布目标位置信息 pose_pub = rospy.Publisher('mavros/setpoint_position/local', PoseStamped, queue_size=10) pose = PoseStamped() # 起飞 def takeoff(): pose.pose.position.z = 2 # 设置目标高度 for i in range(100): pose_pub.publish(pose) # 发布目标位置 rospy.sleep(0.1) set_mode('OFFBOARD') # 设置OFFBOARD模式 arming(True) # 解锁 rospy.sleep(1) # 降落 def land(): pose.pose.position.z = 0 # 设置目标高度 for i in range(100): pose_pub.publish(pose) # 发布目标位置 rospy.sleep(0.1) arming(False) # 上锁 rospy.sleep(1) # 程序入口 if __name__ == '__main__': rate = rospy.Rate(10) while not rospy.is_shutdown(): if state.connected: takeoff() # 起飞 rospy.sleep(10) # 飞行10秒 land() # 降落 break rate.sleep() ``` 这段代码演示了如何使用mavros控制无人机起飞和降落,你可以根据自己的需要修改代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值