四旋翼无人机飞控系统设计(控制信号获取及转化)

无人机遥控器控制信号获取

  控制无人机首先要考虑的是给无人机下指令,其次是让其从当前状态达到我们的指令状态。遥控器和飞控的沟通是首先要构建的一环。需要把遥控器的脉冲宽度转化成无人机的状态角度。在这里插入图片描述

  我使用航模通用协议有PWM、PPM与SBUS,我使用基于串口的SBUS协议,根据帧排序解析25个8bit字节即可,SBUS协议在串口解析前要对信号电平进行反向。

  sbus解析c语言实现推荐博文

  接收过来的接收机信号是遥控器各个通道值,比如大多数航模遥控器遵循通道一到通道四对应着无人机的 roll、pitch、throttle、yaw,即是横滚、俯仰、油门和偏航四个无人机的基本操作数值。后面的通道可以应用于飞控功能的切换或者为无人机的相机云台等外设服务。解析出的具体数值是遥控器的发射信号的设置决定的,可以通过更改遥控信号的参数将其设置到一个需要的区间,然后在解析后进行处理。
在这里插入图片描述

  我的处理方式是每个通道都处理到1000 到 2000 之间,遵循大多数无人机飞控对脉宽处理的协议方便信号的应用。经过处理信号归入 1000-2000 的区间,中值为 1500,后面需对通道值进行归一化处理,即将通道的控制值转化为控制量的占比看,比如 1000 为 0,1500 为 50%,2000 为 100%,此值也为受控量的占比,然后用这个值去确定受控受控量,这样处理就能实现两种不同元素数据的归一化。经过转化处理后可得出占比值,对于使用者来说,对四旋翼的操作体现在给它设定一个姿态值。接下来我们需给定无人机 roll、pitch、yaw 这几种自由度的目标值,具体做法是设定一个允许的最大值 ,然后令其乘以之前得到的占比值。至此由接收机SBUS信号转化得到目标角度。

控制信号归一化的C语言实现

在每个通道区间1000 到 2000 之间的情况下(1000为0油门,2000位满油门)
parameter :最低和最高值的中值为初始值,rc_get为与初始值的偏差,此处为1500。将偏差转换为期望角度是我们需要做的事,max_abs为区间的一半此处为500,dead_limit为死区,低于此死区不处理,可能是手抖碰到了一点摇杆。

return: proportion 为一个比例值,占允许的最大的角度值的比例。

float rc_convert (float rc_get, float max_abs, float dead_limit)
{
    float proportion;
	
    if (rc_get > dead_limit)
	{
		proportion = (rc_get - dead_limit)/ (max_abs - dead_limit);
	}	
    else if (rc_get < -dead_limit)
	{
		proportion = (rc_get + dead_limit)/ (max_abs + dead_limit);
	}
	else proportion = 0;
	
	return proportion;
}

//eg: PID[roll_angle].Target = ANGLE_MAX * rc_convert (  CH_get[roll_ctrl]-RC_MID,  MAX_ABS, DEAD_LIMIT);
  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: 要修改 PX4 源码以使遥控器可以断电无人机,需要进行以下步骤: 1. 打开 PX4 源码目录,找到文件夹 "Firmware/src/modules/commander"。 2. 在该文件夹中找到文件 "commander.cpp"。 3. 打开该文件,在 "Commander::handle_command" 函数中找到 "set_vehicle_cmd_long" 函数。 4. 在 "set_vehicle_cmd_long" 函数中添加代码来实现断电操作。例如: ```if (vehicle_cmd.command == VEHICLE_CMD_DO_SET_SERVO && vehicle_cmd.param1 == 10) { //新增加的条件,遥控器发送指令10,航空器断电 system("shutdown now"); }``` 5. 保存并编译代码。 6. 将编译后的固件下载到无人机上并启动。 7. 使用遥控器发送断电指令(例如发送“10”),确认无人机断电。 注意:断电操作可能会导致无人机数据丢失或无人机硬件损坏,请谨慎使用。 ### 回答2: 要修改PX4源码使遥控器可以让无人机断电,首先需要了解PX4的软件架构。PX4采用模块化的设计,主要分为飞控固件(Flight Stack Firmware)和上层应用程序(High-Level Application)。在飞控固件中,关键的代码位于驱动层和控制层,其中包括与遥控器通信的代码。 要实现遥控器断电功能,我们可以在遥控器通信的代码中进行修改。具体来说,我们可以为遥控信号增加一种特殊的指令,该指令用于通知飞控系统断电。在PX4中,遥控器信号的解码和处理主要在`realsense`、`vehicle_control_mode`和`mc_att_control`三个模块中进行。我们可以在这些模块中找到相应的代码进行修改。 首先,我们需要在遥控器信号解码的代码中添加对特殊指令的检测。可以通过修改`realsense`模块中的代码,增加一个检测函数,用于检测特殊指令的存在。当检测到特殊指令后,可以设置一个标志位,表示接收到了断电指令。 然后,在控制层代码中,我们可以根据标志位的状态来控制断电功能。可以通过修改`mc_att_control`模块中的代码,在控制循环中添加条件判断,当接收到断电指令时,执行相应的断电操作。 需要注意的是,断电操作可能会对飞行安全产生不利影响。因此,在实际应用中,我们需要谨慎考虑断电的使用场景和条件。可以增加安全措施,如增加断电操作的确认流程,避免误操作导致飞行事故。 总之,要修改PX4源码使遥控器可以实现断电功能,需要深入了解PX4的软件架构和代码结构,并在遥控器通信和控制层中进行相应的修改,同时需要谨慎考虑安全因素。 ### 回答3: 要修改PX4源码使遥控器可以让无人机断电,需要进行以下几个步骤: 首先,我们需要找到遥控器的代码模块。遥控器的代码通常可以在PX4源码的中心位置找到。在源代码的根文件夹中,我们可以找到一个名为"src/lib/rc"的文件夹,里面包含与遥控器相关的代码。 其次,我们需要在遥控器代码中添加一个新的功能来控制无人机的断电。这可以通过在遥控器控制信号发送时发送一个特殊的指令来实现。我们可以在接收遥控器信号的函数中添加一些代码,以检测特定的开关状态或遥控器输入,并发送指令将无人机断电。 然后,我们需要修改无人机的电源控制模块,使其能够接收到遥控器发送的断电指令,并执行相应的动作。这可能涉及到修改与电源控制相关的代码模块,以便能够识别和执行断电指令。 最后,我们需要重新编译和烧录修改后的PX4固件。我们可以使用PX4工具链来进行编译和烧录,以确保修改后的代码能够在无人机上正确运行。 需要注意的是,修改PX4源码需要一定的编程和电子知识,并且对无人机和遥控器的硬件了解也是必要的。在进行修改之前,建议先仔细阅读PX4的官方文档和源码注释,以确保正确地理解和修改代码。另外,由于代码的修改可能会影响无人机的安全性和稳定性,建议在安全环境下进行测试和验证。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值