• 多旋翼无人机仿真 rotors_simulator:基于PID控制器的速度控制


    多旋翼无人机仿真 rotors_simulator:基于PID控制器的速度控制

    在这里插入图片描述

    前言

    无人机(Unmanned Aerial Vehicle),指的是一种由动力驱动的、无线遥控或自主飞行、机上无人驾驶并可重复使用的飞行器,飞机通过机载的计算机系统自动对飞行的平衡进行有效的控制,并通过预先设定或飞机自动生成的复杂航线进行飞行,并在飞行过程中自动执行相关任务和异常处理。

    在前面的博客中,分析了 rotors_simulator 一个开源的无人机gazebo的仿真系统的一个控制接口(roll、pitch、yawrate、thrust),并通过键盘发布控制指令,使飞机飞了起来,但是真正实验过的人则知道,起控制会飞常难,需要一直调整键盘,稍微一不注意,无人机就飞走了。
    其原因就是这个接口在无人机内部并没有位置控制的闭环。

    这篇文章中,分析了自动控制原理;并在这篇文章中分析了无人机各种模式的控制框图。

    在前面的文章中,完成了无人机的水平位置、垂直位置、航向角度的 空间位置控制。

    相当于如果有个地面站,就可以完成自动航线,指点飞行等模式了。

    无人机还有一个功能就是在悬停模式下,用遥控器控制无人机飞行。本篇博客就利用键盘,在前面做好的位置控制的基础上,做一个基于PID控制器的速度控制。

    当有方向按键按下的时候,无人机按期望速度方向飞行,没有方向按键按下,无人机则自动悬停。

    加入键盘速度控制指令

    功能概述:通过键盘发布 无人机期望速度控制指令,其中速度控制指令包括:

    • 无人机机体坐标系 线速度 linear.x 、linear.y 、linear.z
    • 无人机机体坐标系 航向角速度 angular.z

    无人机位置控制 解析该4个指令变量,赋值到位置控制控制器的期望速度。
    无人机位置控制 将期望位置设置为 当前位置,使得速度控制模式得以实现 。

    键盘速度指令发送模块

    此模块有开源功能包 :teleop_twist_keyboard

    该功能包可发送
    geometry_msgs/Twist

    在这里插入图片描述
    发布的话题名称
    在这里插入图片描述

    键盘速度指令解析模块

        void PidPositionControllerNode::KeyboardCmdVelCallback(const geometry_msgs::TwistConstPtr& cmdvel_msg)
        {
            // 取出指令
            geometry_msgs::Twist cmd_vel = *cmdvel_msg;
    
            std::cout<< "线速度x : "<<cmd_vel.linear.x <<"|||" <<"线速度y :"<<cmd_vel.linear.y<<"|||" <<"线速度z :"<<cmd_vel.linear.z<<std::endl;
            std::cout<< "角速度x : "<<cmd_vel.angular.x <<"|||" <<"角速度y :"<<cmd_vel.angular.y<<"|||" <<"角速度z :"<<cmd_vel.angular.z<<std::endl;
            
            cmd_vel_x_ = cmd_vel.linear.x ;
            cmd_vel_y_ = cmd_vel.linear.y ;
            cmd_vel_z_= cmd_vel.linear.z ;
            cmd_vel_yaw_ = cmd_vel.angular.z ;
    
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    geometry_msgs/Twist 消息类型的回调函数
    将控制指令赋值给 类的私有变量

    继续浏览请跳转古月居
    详情参考 古月居

  • 相关阅读:
    最新版rancher环境配置安装和集群搭建详细教程记录
    K8s复习笔记5-镜像构建
    CTO说不建议我使用SELECT * ,这是为什么?
    C++ - 搜索二叉树
    03.webpack中hash,chunkhash和contenthash 的区别
    Centos 源码编译 tigervnc
    Abnova神经生物学研究:EFNB2 DNAxPab
    spring cloud在bootstrap.properties配置spring.profiles.active无效
    Postman接口测试流程
    java毕业设计日租房管理系统源码+lw文档+mybatis+系统+mysql数据库+调试
  • 原文地址:https://blog.csdn.net/qq_32761549/article/details/127494572