MARSIM / cascadePID_node.cpp

文章介绍了级联PID控制器在四旋翼无人机中的应用,包括其结构、内外环控制以及与SE(3)控制器的对比,详细展示了控制过程和代码实现。

1.代码主要作用

主要作用就是:

        级联PID控制器控制四旋翼无人机。订阅odom和cmd_pose主题以获取无人机的当前状态和期望姿态。

        然后,它使用级联PID控制器计算所需的电机转速并将其发布到cmd_RPM主题。

2.级联PID控制器

    级联PID控制器的输入是:

        1. 期望位置,速度和加速度

        2. 期望姿态

        3. 当前位置,速度和姿态

    级联PID控制器在四旋翼无人机的应用:

        * 外环pid控制器: 控制无人机的位置和速度

        * 内环pid控制器: 控制无人机的姿态

    外环PID控制器负责将无人机的当前位置和速度控制到期望的位置和速度。内环PID控制器负责将无人机的当前姿态控制到期望的姿态。

3.SE(3) 控制器 

SE(3)控制器是一种用于控制四旋翼无人机的非线性控制器。SE(3)是指欧拉空间,是三维空间的旋转和平移的集合。SE(3)控制器将四旋翼无人机的控制视为一个整体,使用非线性控制理论来控制无人机的姿态和位置。

SE(3)控制器的工作原理如下:

  1. 首先,SE(3)控制器将无人机的当前状态作为输入,计算出期望的状态。
  2. 然后,SE(3)控制器使用非线性控制理论计算出所需的控制输出。
  3. 最后,SE(3)控制器将控制输出作为输入,驱动无人机飞行。

4. 级联PID和SE(3) 的区别

级联PID控制器和SE(3)控制都是用于控制四旋翼无人机的控制方法。两者的主要区别在于:

  • 级联PID控制器是基于PID控制器的控制方法,而SE(3)控制是基于非线性控制理论的控制方法。
  • 级联PID控制器将四旋翼无人机的控制分为多个子系统,每个子系统使用一个PID控制器进行控制。SE(3)控制则将四旋翼无人机的控制视为一个整体,使用非线性控制器进行控制

 5.代码


#include <nav_msgs/Odometry.h>
#include <ros/ros.h>
#include <cascadePID.hpp>
#include <std_msgs/Float32MultiArray.h>
#include <geometry_msgs
### 含义 在 CMake 中,`add_executable(offb_node src/offb_node.cpp)` 这行代码的作用是告诉 CMake 构建一个可执行文件。具体来说,`offb_node` 是生成的可执行文件的名称,而 `src/offb_node.cpp` 是用于生成该可执行文件的源文件路径。也就是说,CMake 会将 `src/offb_node.cpp` 文件进行编译和链接操作,最终生成名为 `offb_node` 的可执行文件 [^1]。 ### 使用场景 - **开发独立程序**:当开发者需要创建一个独立运行的程序时,可使用 `add_executable` 来指定程序的名称和对应的源文件。例如在 ROS 项目中,像 `offb_node` 这样的节点程序,就可以通过该指令编译成可执行文件,以便在 ROS 环境中运行 [^1]。 - **测试代码**:在编写测试代码时,也可以使用该指令将测试代码编译成可执行文件,方便对功能进行测试。 ### 注意事项 - **源文件路径**:需要确保 `src/offb_node.cpp` 路径是正确的。如果源文件的位置发生变化,要相应地修改路径,否则 CMake 会找不到源文件而导致编译失败 [^1]。 - **依赖关系**:如果 `src/offb_node.cpp` 文件依赖于其他库或目标,需要在 `target_link_libraries` 中指定这些依赖,以确保可执行文件能正确链接所需的库 [^1]。 - **可执行文件名唯一性**:在一个项目中,可执行文件的名称应该是唯一的。如果存在重复的名称,CMake 会报错。 ### 代码示例 ```cmake # 设置 CMake 最低版本要求 cmake_minimum_required(VERSION 2.8.3) # 设置项目名称 project(my_offboard_node) # 查找所需的 catkin 组件 find_package(catkin REQUIRED COMPONENTS roscpp mav os_msgs geometry_msgs ) # 生成 catkin 包 catkin_package() # 包含头文件目录 include_directories( ${catkin_INCLUDE_DIRS} include ) # 添加可执行文件 add_executable(offb_node src/offb_node.cpp) # 链接库 target_link_libraries(offb_node ${catkin_LIBRARIES}) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值