8,493
社区成员
发帖
与我相关
我的任务
分享先贴代码
.h 文件
...
#include <uORB/topics/actuator_servos.h>
...
private:
...
// 新增:发布到actuator_servos的发布者
orb_advert_t _actuator_servos_pub{nullptr};
// 舵机中位PWM值,通常是1500微秒
float servo_middle = 1500.0f;
// 舵机通道常量
static constexpr int SERVO_CHANNEL_5 = 4;
static constexpr int SERVO_CHANNEL_6 = 5;
...
.cpp文件
bool Servo_ctl::init()
{
ScheduleOnInterval(50000_us); //设置重复间隔
return true;
}
bool Servo_ctl::Run(){
...
// 创建actuator_servos消息
actuator_servos_s servos = {};
servos.timestamp = hrt_absolute_time();
// 舵机中位PWM值,通常是1500微秒
servo_middle += 100.0f;
if(servo_middle > 2000)
servo_middle = 1500;
// 设置舵机到指定位置
servos.control[SERVO_CHANNEL_5] = servo_middle;
servos.control[SERVO_CHANNEL_6] = servo_middle;
// 发布actuator_servos消息
if (_actuator_servos_pub == nullptr) {
_actuator_servos_pub = orb_advertise(ORB_ID(actuator_servos), &servos);
} else {
orb_publish(ORB_ID(actuator_servos), _actuator_servos_pub, &servos);
}
...
}
已经将这个工作队列设置为上电自启动,自启动正常。
场景:四旋翼机型基础上加装两个舵机控制,实现舵机的往复运动
因为版本更新后取消了mixer文件,应该如何设置使得舵机正常运动???
新版固件需要设置control allocate输出,然后使用offbord的控制接口即可