PX4无人机速度控制

没想到这个这么快,早知道到和上一篇一起发了

控制代码


	float err_x = 0;     float err_x0 = 0;		float err_x_err = 0;
	float err_y = 0;	 float err_y0 = 0;		float err_y_err = 0;
	float err_z = 0;	 float err_z0 = 0;		float err_z_err = 0;
	float sum_ex=0;
	float sum_ey=0;
	float sum_ez=0;
	float vel_x = 0;
	float vel_y = 0;
	float vel_z = 0;
	float kp = 2.0;
	float kd = 0.5;  
	float ki = 0.01; 
		// -0. 2 超调量1 左右   + 0.2 超调量减小
	//  0.5-[0.3]   0.8-[??]  1.0-[比0.8 好一些]  
	//  设定控制无人机的位置
void local_pos_control(float pos_x, float pos_y, float pos_z)
{
	// 误差
	err_x = pos_x - local_pos.pose.position.x;
	err_y = pos_y - local_pos.pose.position.y;
	err_z = pos_z - local_pos.pose.position.z;
	// 误差的误差
	err_x_err = err_x - err_x0;
	err_y_err = err_y - err_y0;
	err_z_err = err_z - err_z0;
	// 保存本次误差
	err_x0 = err_x;
	err_y0 = err_y;
	err_z0 = err_z;
	sum_ex+=err_x;
	sum_ey+=err_y;
	sum_ez+=err_z;
	vel_x = kp * err_x + kd * err_x_err+ki*sum_ex;
	vel_y = kp * err_y + kd * err_y_err+ki*sum_ey;
	vel_z = kp * err_z + kd * err_y_err+ki*sum_ez;

	// 比例控制
	// vel_x = adj_kp * err_x;
	// vel_y = adj_kp * err_y;
	// vel_z = adj_kp * err_z;


	ROS_INFO("Pose-x: %f",local_pos.pose.position.x);
	ROS_INFO("Pose-y: %f",local_pos.pose.position.y);
	ROS_INFO("Pose-z: %f",local_pos.pose.position.z);
}

就是简单的PID 控制器,积分项是有必要的,参数闭眼给的经典2 ,0. 5,0.01,最后飞起来的时候震荡就很厉害,不过不重要,主要是体验下速度控制历程,后面大概率是用现控去优化,没必要浪费时间调pid

完整代码

/**
 *         功能包:  roscpp std_msgs geometry_msgs mavros_msgs
 *         程序实现内容 :使无人机飞行一个矩形轨迹后降落 (路径点)
 *          vec_pub.publish(vector);               ——  2021/12/1    Poao
 * 
 *            话题/服务名称                                     操作                                                            消息类型															头文件
 *          mavros/cmd/arming                      服务的客户端(进入待机模式)     ma
### PX4无人机控制系统实现与开发 #### 1. 基础操作流程 通过设置参数`i`逐渐增加至超过0.3来调整飞行控制器的状态[^1]。随后,利用按键`b`切换OFFBOARD模式,并通过按下`t`键完成无人机解锁(ARM)。一旦执行这些命令,无人机会自动进入起飞状态。 #### 2. 软件架构设计 为了确保系统的稳定性和可靠性,在实际部署前应采用与硬件相同版本的PX4固件(如v1.11.2)进行测试。在此基础上逐步引入硬件在环仿真技术,同时考虑外界环境可能带来的干扰因素。对于控制逻辑部分,则主要依赖于PX4内置的`setpoint`功能模块,从而能够精确设定目标速度并实施有效调控。 #### 3. 构建开发环境 依据官方指南,可以从GitHub平台获取最新的PX4源码资源[^2]。之后运用相应工具链编译项目文件,并分别加载到不同类型的模拟环境中验证其功能性表现——比如基于物理模型驱动的JMAVSim以及具备高度真实感渲染效果的Gazebo两款主流仿线器之中。与此同时,还需建立与地面站程序QGroundControl之间的通信桥梁以便实时监控各项指标变化情况;另外值得注意的是针对跨操作系统场景下的代码编辑需求,推荐选用Visual Studio Code作为主力IDE解决方案之一,它不仅支持多语言混合编程而且还拥有丰富的插件生态系统可供选择定制化工作流配置方案以适应特定业务场景的要求最终达成高效协作目的。 #### 4. 数据融合处理机制概述 当涉及到具体应用场景时如果需要接入额外传感器数据用于辅助决策过程那么就必须考虑到由于各自坐标系定义差异所引发的一系列兼容性问题。例如说通常情况下由视觉算法或者动作捕捉装置所提供的方位角信息往往不会完全一致于是乎这就要求开发者明确区分两者之间存在的区别并通过适当转换手段使得它们能够在统一框架下协同运作进而提高整体性能水平达到预期效果标准即所谓的“MAV_FRAME_LOCAL_FRD”概念正是为此而生旨在解决上述提到过的难题挑战提供了一种标准化描述方式方便后续进一步扩展升级使用[^3]。 ```python import rospy from geometry_msgs.msg import PoseStamped def set_target_position(x, y, z): target_pose = PoseStamped() target_pose.header.frame_id = 'map' # or other frame id according to your setup target_pose.pose.position.x = x target_pose.pose.position.y = y target_pose.pose.position.z = z pub = rospy.Publisher('/mavros/setpoint_position/local', PoseStamped, queue_size=10) rate = rospy.Rate(10) while not rospy.is_shutdown(): pub.publish(target_pose) rate.sleep() if __name__ == '__main__': try: rospy.init_node('px4_setpoint_example') set_target_position(1.0, 2.0, 3.0) # Example coordinates (x,y,z) except rospy.ROSInterruptException: pass ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值