ardupilot_gazebo仿真(三)
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
创建外部控制包
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仿真(三)的更多相关文章
- ardupilot_gazebo仿真(四)
ardupilot_gazebo仿真(四) 标签(空格分隔): 未分类 Multi-MAV simulation 参考官网给出的multi-vehicle-simulation的方法 在每次打开sim ...
- ardupilot_gazebo仿真(二)
ardupilot_gazebo仿真(二) 标签(空格分隔): 未分类 在模型中添加sensor gezebo官网-sensor部分教程 gezebo官网-基础部分教程 Gazebo plugins ...
- ardupilot_gazebo仿真(一)
ardupilot_gazebo仿真 标签(空格分隔): 未分类 ardupilot_gazebo仿真 官网网址 代码更新地址 Ardupilot Gazebo Plugin & Models ...
- MFC框架仿真<三>R T T I
RTTI,简单的说,就是判定A类是否为B类的基类.将书本的内容最大程度的简化,如下图的类层次,现在解决的问题就是:判定“梨”是否是“红富士”的基类.
- 常见行为:仿真&重力&碰撞&捕捉
一.UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架.可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象,重力.弹性碰撞等,游戏开发中很常见,例如愤怒的小鸟. 二.UI ...
- UIDynamic(简单介绍)
一.简单介绍 1.什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象 如:重力.弹性碰撞等现 ...
- iOS开发拓展篇—UIDynamic(简单介绍)
iOS开发拓展篇—UIDynamic(简单介绍) 一.简单介绍 1.什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能模拟 ...
- 李洪强iOS开发之拓展篇—UIDynamic(简单介绍)
iOS开发拓展篇—UIDynamic(简单介绍) 一.简单介绍 1.什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能 ...
- iOS开发——UI篇OC篇&UIDynamic详解
iOS开发拓展篇—UIDynamic(简单介绍) 一.简单介绍 1.什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能模拟 ...
随机推荐
- Android学习笔记_52_全面了解Android开发规范:性能及UI优化
一.Android编码规范 1.java代码中不出现中文,最多注释中可以出现中文 2.局部变量命名.静态成员变量命名 只能包含字母,单词首字母出第一个外,都为大写,其他字母都为小写 3.常量命名 只能 ...
- Python—面向对象01
1.如何使用类 # 先定义类 class LuffyStudent(): school = "luffycity" # 数据属性 def learn(self): # 函数属性 p ...
- Angularjs实例4
<!DOCTYPE html><html lang="zh-cn" ng-app=""><head><meta htt ...
- Python 学习笔记(七)Python字符串(三)
常用字符串方法 split() 分割字符串,指定分隔符对字符串进行分割 join() 将序列中的元素以指定的字符连接生成一个新的字符串 str.strip() 用于移除字符串头尾指定的字符(默认 ...
- 分享一个展示文章列表的CSS样式
最近在帮朋友处理一个网站前端显示文章列表的时候,其中有个变通的思路,现整理出来留给有需要的朋友参考及自己备忘. 显示效果为:标题左对齐,日期右对齐. 标题和日期中间用常规的原点(“.”) 代替,显示效 ...
- 核心动画(UIView封装动画)-转
一.UIView动画(首尾) 1.简单说明 UIKit直接将动画集成到UIView类中,当内部的一些属性发生改变时,UIView将为这些改变提供动画支持. 执行动画所需要的工作由UIView类自动完成 ...
- onblur事件和click事件冲突
在js中onblur事件的优先级click事件,所以同一个元素上绑定两个事件的时候,onblur事件会冲掉click事件. 解决方案:将click事件改成mousedown事件
- Java中replace与replaceAll区别
看门见山 1.java中replace API: replace(char oldChar, char newChar):寓意为:返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所 ...
- Struts2的动态方法,及result跳转方式,全局结果以及默认的action的配置
Action动态方法的调用 首先我们需要在struts.xml中去配置一个常量值如下 那么去哪找呢?找到Struts-core.jar并打开 method属性 <action name=&quo ...
- 【c学习-12】
/*枚举*/ #include void enumFunction(){ enum enum_var{"a","b",1,2}; enum{"c&qu ...