ardupilot_gazebo仿真(三)

标签(空格分隔): 未分类


创建ROS node 实现对无人机的控制(软件在环)

MAVROS

MAVROS是ROS中的一个能够连接支持MAVLink地面站、支持MAVLink飞控和ROS计算机的工具。

安装MAVROS

Installing MAVROS

安装参照官网即可

sudo apt-get install ros-kinetic-mavros ros-kinetic-mavros-extras
wget https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh
chmod a+x install_geographiclib_datasets.sh
./install_geographiclib_datasets.sh

推荐安装rqt

sudo apt-get install ros-kinetic-rqt ros-kinetic-rqt-common-plugins ros-kinetic-rqt-robot-plugins

创建外部控制包

外部控制程序中文介绍

根据ROS官网教程,创建一个ROS包

cd ~/catkin_ws/src
catkin_create_pkg offboard roscpp mavros geometry_msgs

这时会在catkin_ws/src目录中生成offboard文件夹,其中包含include和src两个文件夹。我们将offboard_node.cpp放在刚刚生成的offboard/src中。修改offboard目录下的CMakeLists.txt文件,取消一些注释生成相应节点。

    ## Declare a C++ executable
## With catkin_make all packages are built within a single CMake context
## The recommended prefix ensures that target names across packages don't collide
add_executable(${PROJECT_NAME}_node src/offboard_node.cpp) ## Rename C++ executable without prefix
## The above recommended prefix causes long target names, the following renames the
## target back to the shorter version for ease of user use
## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node"
# set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "") ## Add cmake target dependencies of the executable
## same as for the library above
# add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) ## Specify libraries to link a library or executable target against
target_link_libraries(${PROJECT_NAME}_node
${catkin_LIBRARIES}
)

offboard_node.cpp是我们创建的节点的名字。

然后在catkin_ws中,进行编译

cd ~/catkin_ws
catkin_make
source devel/setup.bash

每次要运行节点是都要source setup.bash

启动仿真

01.启动地面站MAVproxy

cd ardupilot/ArduCopter
sim_vehicle.py --map --console

02.launch MAVROS

roslaunch mavros apm.launch

03.运行自己做的外部程序节点

cd catkin_ws/
source devel/setup.bash
rosrun offboard offboard_node

利用graph实时绘制曲线

graph是MAVproxy的一个module

用之前先要load graph

module load graph

常用参数监视

graph NAV_CONTROLLER_OUTPUT.nav_roll ATTITUDE.roll*57.32
graph NAV_CONTROLLER_OUTPUT.nav_pitch ATTITUDE.pitch*57.32
graph NAV_CONTROLLER_OUTPUT.nav_bearing ATTITUDE.yaw*57.32
graph VFR_HUD.alt
graph VFR_HUD.climb

NAV_CONTROLLER_OUTPUT 是期望数据

ATTITUDE 姿态需要乘以57.32变成角度

VFR_HUD.airspeed     VFR_HUD.climb        VFR_HUD.heading
VFR_HUD.alt VFR_HUD.groundspeed VFR_HUD.throttle

MAVprovxy控制无人机的指令

参考MAVproxy教程,官网给出了较完整的命令集

这里只做最简单的介绍,可以让无人机飞起来。

mode guided
arm throttle
takeoff 40

其中一些飞行模式需要rc 3 在中立的位置,例如alt_hold loiter circle 模式等

rc 3 1500

在地面站还可以对参数进行设置

GUIDED> param show fence*
GUIDED> FENCE_ACTION 1.000000
FENCE_ALT_MAX 100.000000
FENCE_ENABLE 0.000000
FENCE_MARGIN 2.000000
FENCE_RADIUS 150.000000
FENCE_TYPE 3.000000

ardupilot_gazebo仿真(三)的更多相关文章

  1. ardupilot_gazebo仿真(四)

    ardupilot_gazebo仿真(四) 标签(空格分隔): 未分类 Multi-MAV simulation 参考官网给出的multi-vehicle-simulation的方法 在每次打开sim ...

  2. ardupilot_gazebo仿真(二)

    ardupilot_gazebo仿真(二) 标签(空格分隔): 未分类 在模型中添加sensor gezebo官网-sensor部分教程 gezebo官网-基础部分教程 Gazebo plugins ...

  3. ardupilot_gazebo仿真(一)

    ardupilot_gazebo仿真 标签(空格分隔): 未分类 ardupilot_gazebo仿真 官网网址 代码更新地址 Ardupilot Gazebo Plugin & Models ...

  4. MFC框架仿真<三>R T T I

    RTTI,简单的说,就是判定A类是否为B类的基类.将书本的内容最大程度的简化,如下图的类层次,现在解决的问题就是:判定“梨”是否是“红富士”的基类.

  5. 常见行为:仿真&重力&碰撞&捕捉

    一.UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架.可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象,重力.弹性碰撞等,游戏开发中很常见,例如愤怒的小鸟. 二.UI ...

  6. UIDynamic(简单介绍)

    一.简单介绍 1.什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象 如:重力.弹性碰撞等现 ...

  7. iOS开发拓展篇—UIDynamic(简单介绍)

    iOS开发拓展篇—UIDynamic(简单介绍) 一.简单介绍 1.什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能模拟 ...

  8. 李洪强iOS开发之拓展篇—UIDynamic(简单介绍)

      iOS开发拓展篇—UIDynamic(简单介绍) 一.简单介绍 1.什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能 ...

  9. iOS开发——UI篇OC篇&UIDynamic详解

    iOS开发拓展篇—UIDynamic(简单介绍) 一.简单介绍 1.什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能模拟 ...

随机推荐

  1. Rman 管理 archivelog 的命令

    因为archivelog的相关信息是记录在controlfile中的,当物理删除后不会改变controlfile的设置.并且在查询相关的动态视图(例如v$archived_log)时,该部分日志仍然标 ...

  2. 嵌入式:指针的指针、链表、UCOS 的 OSMemCreate 。

    初看,UCOS 的 OSMemCreate 代码,感觉有点怪怪的,比如,把 指针指向的地址 强制转换成 指针的指针的指向地址 ?那转换后 指针的指针 又是什么? void OSMemCreate (O ...

  3. 使用终端命令行将本地项目上传到Github并提交代码

    第一步: 在Github上创建自己的repository 第二步:建立本地仓库cd到你的本地项目根目录下,执行git命令 1:$ cd 到你的项目目录下 2:$ git init 第三步:将本地项目工 ...

  4. Reverse a String-freecodecamp算法题目

    Reverse a String(翻转字符串) 题目要求: 把字符串转化成数组 借助数组的reverse方法翻转数组顺序 把数组转化成字符串 思路: 用.split('')将字符串转换成单个字母组成的 ...

  5. vuex vue状态管理

    第一步安装vuex(安装在生产环境) npm install vuex 第二步 src下新建store文件夹 用来专门放状态管理,store文件夹下新建四个js文件 index.js  actions ...

  6. [JSOI2008]最大数(线段树基础)

    题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制: L 不超过当前数列的长度.(L > ...

  7. 内存分配---FF、BF、WF三种算法

    动态分区分配是根据进程的实际需要,动态的为之分配内存空间.而在实现可变分区分配时,将涉及到分区分配中 所用的数据结构.分区分配算法和分区的分配与内存回收的过程. 分区分配中的数据结构:(1)描述空闲块 ...

  8. 使用Python第三方库生成二维码

    本文主要介绍两个可用于生成二维码的Python第三方库:MyQR和qrcode. MyQR的使用: 安装: pip install MyQR 导入: from MyQR import myqr imp ...

  9. Hadoop(10)-HDFS的DataNode详解

    1.DataNode工作机制 1)一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳. 2)DataNode启 ...

  10. STM32(4)——系统时钟和SysTick

    1.STM32的时钟系统 在STM32中,一共有5个时钟源,分别是HSI.HSE.LSI.LSE.PLL HSI是高速内部时钟,RC振荡器,频率为8MHz: HSE是高速外部时钟,可接石英/陶瓷谐振器 ...