无人机的仿真方法,在ros环境下,有三种仿真方式,一种是mavros配合sitl的仿真,其次是hector_quadrotor ros package,还有一种就是就近ETH新出的一个gazebo环境仿真包。
三者对比
- sitl的设置比较麻烦,而且飞机的控制使用指令来的。
- hector_quadrotor开发的比较完善,可以使用xbox作为飞机的遥控器
- rotorS是新出的包,里边给出了几种商用的飞机模型,控制指令是ros meassage。
hector_quadrotor
install
这个包既可以直接apt-get
执行该指令会把该包的依赖包一起安装好,另外也可以源安装
mkdir ~/hector_quadrotor_tutorial
cd ~/hector_quadrotor_tutorial
wstool init src https://raw.github.com/tu-darmstadt-ros-pkg/hector_quadrotor/hydro-devel/tutorials.rosinstall
下载完之后就是编译
catkin_make
source devel/setup.bash
运行,启动节点
使用xbox控制飞机
rotorS
install
首先安装依赖包
下载源文件
cd ~/catkin_ws/src
git clone [email protected].com:ethz-asl/rotors_simulator.git
git clone [email protected].com:ethz-asl/mav_comm.git
然后编译即可
catkin_make
运行节点
SITL
这里介绍mavros配合sitl的仿真,另外介绍了如何使用mavros,给出了一些例程,并根据起launch文件,找到了例程中的代码的写法。
wiki in ros
http://answers.ros.org/question/207097/how-to-send-velocity-to-pixhawk-with-mavros/
Tutorial
ROS Getting Started Tutorial
在教程中给出了连接一个USB camera, pixhawk,并确保基本的安装能够工作。
- 安装stable ROS和ubuntu设置
- 连接USB,测试连接状态
- MAVROS也就是ROS——PX4 mavlink bridge在GPU和飞控之间传输数据,我们需要手动开启mavlink 数据流
-
launch the file test_rig.launch, tplease read the detail content.
(launch之前需要修改udp的地址吧)
这时会看到mavros的连接至pxihawk的信息,会如果连接camera正常会弹出image_view窗口。
代码arm飞机需要如下步骤
- roslaunch mavros apm.launch
- rosrun mavros mavsafety arm
- rosrun mavros mavsys mode -c GUIDED that resulted: Mode changed
- and ran my code (with just yaw rotation -> twist.angular.z)
控制代码例程
参考test_mavros packages
launch files start
main launch file | iris_empty_world_offboard_ctl.launch |
---|---|
sub-launch 1 | rotors_gazebo/launch/iris_empty_world.launch |
sub-launch 2 | px4/launch/iris.launch |
sub-launch 3 | mavros/launch/node.launch |
sub-launch 4 | test_mavros/launch/base_node.launch |
test_mavros/launch/base_node.launch->
这里sitl_test_node的主函数中只是运行了SitlTest::spin(argc, argv);进入该函数是
testsetup::OffboardControl offboard_control;
offboard_control.spin(argc, argv);
那么这个OffboardControl在文件offboard_control.h中定义实现。
class OffboardControl::spin
{
初始化函数,设置参数。
设置周期
swtich mode
{}
}
该类的构造函数中topics
发布
信息类型 | 名字 |
---|---|
geometry_msgs::PoseStamped> | /mavros/setpoint_position/local |
geometry_msgs::TwistStamped | /mavros/setpoint_velocity/cmd_vel |
订阅
信息名字 | 回调函数 |
---|---|
/mavros/local_position/local | OffboardControl::local_pos_cb |
文章主要介绍了使用ROS/Gazebo仿真器作为飞机外部的仿真器
overview
- ROS包含很多packages,这些包可以完成多种任务。他允许你去建模无人机的飞行环境,这其中包括室内环境,室外环境,运行自己的飞控的算法。
- Gazebo支持多种不同的旋翼模型,另外可以支持一些传感器和其他行为。
如图所示为ROS/Gazebo继承SITL的内部结构示意。
precondition
OS requirements
- 兼容 ros indigo
- ubuntu 14.04.2兼容SITL
installation
- ardupilot installation
git clone https://github.com/alexbuyval/ardupilot
git checkout RangeFinderSITL2
- ros installation
按照ROS website to install ROS Indigo的教程来安装ros indigo
- workspace creation
Follow these instructions to create your workspace.
- install needed packages
- Execute the following commands in your console to install pre-built ROS packages:
Execute the following commands in your console to clone all necessary ROS packages:
roscd
cd ../src #Navigate in your ROS user source files directory
git clone https://[email protected].org/alexbuyval/arducopter_sitl_ros.git
git clone https://github.com/PX4/mav_comm.git
git clone https://github.com/alexbuyval/rotors_simulator.git
git clone https://github.com/ethz-asl/glog_catkin.git
git clone https://github.com/catkin/catkin_simple.git
cd rotors_simulator
git checkout sonar_plugin
cd ../..
wstool init src
wstool set -t src mavros --git https://github.com/alexbuyval/mavros.git
wstool update -t src
rosdep install --from-paths src --ignore-src --rosdistro indigo -y
Compile your catkin workspace. It may take some time.
cd .. #Navigate in your ROS workspace
catkin_make #Compile the files
设置构建工具的环境变量
为找到sim_vehicle.py,应该设置环境变量。在~/.bashrc中添加
export PATH=$PATH:$HOME/ardupilot/Tools/autotest
开启ROS/Gazebo和仿真器
进入ardupilot目录,执行
cd ~/ardupilot/ArduCopter
sim_vehicle.py -f arducopter_sitl_ros --console
如果一切执行正常的话,会弹出gazebo对话框,可以使用rqt node graph 查看当前运行的节点,查看当前使用的topics
控制阶段例程
可以使用一个简单的控制代码,在一个标志上方盘旋如ar_track_alvar节点,检测病计算视觉标志的位置,另外该节点结合来自与手柄joystick的控制信息使用PD控制器。所以可以使用joystick实现高度控制和看不见标志的时候手动控制。另外需要package um_pixhawk ,git 该package
运行该控制节点
然后arm 飞机,设置为alt-hold模式,使用joyst,在Saiteck ST290Pro joyst中按下键4设置AltHold模式,键2arm飞机,如果使用不同joystick那么需要修改joystick设置文件,那么copy mavros/mavros_extras/launch/st290_joy.yaml 文件,并修改为自己的joystick模型。