Pixhawk原生固件PX4之SITL软件在环仿真

欢迎交流~ 个人 Gitter 交流平台,点击直达:Gitter

故事开始之前,先按照笔者的这一篇博客在Ubuntu上完成固件的编译。


jMAVSim仿真

jMAVSim仿真不需要任何配置,直接输入指令即可

cd ~/src/Firmware
make posix_sitl_default jmavsim
    
    
  • 1
  • 2
  • 1
  • 2

之后便会出现下图所示的界面

gazebo5

可以在终端中输入指令进行飞行操作

commander takeoff
    
    
  • 1
  • 1

但是显然使用地面站会更加方便,可以在地面站上自由的切换飞行模式,也可以对Mission模式进行仿真。

可以调出地面站的虚拟摇杆进行简单操作。听说某些遥控器可以直接连QGC,想想应该会很棒。

Linux下可以用两种方法打开QGC,建议选择AppImage,点击图片就可以运行,不用每次都输入冗长的./qgroundcontrol-start.sh
建议下载完成后将文件复制到Home目录下,并执行下列操作增加可执行权限
chmod +x ./QGroundControl.AppImage

QGC支持摇杆,部分遥控器可以直接连接地面站进行操作。开启虚拟摇杆的请看这里

qgc



Gazebo仿真

在使用Gazebo进行仿真之前有一些准备工作必不可少。

安装Gazebo7

  • 设置您的计算机以接受来自packages.osrfoundation.org的软件。
sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list'
    
    
  • 1
  • 1
  • 添加秘钥
wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
    
    
  • 1
  • 1
  • 安装Gazebo7
 # 首先更新源
 sudo apt-get update
 # 安装Gazebo7
 sudo apt-get install gazebo7 
 # 开发者需要安装额外的包
 sudo apt-get install libgazebo7-dev
    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

现在可以尝试启动gazebo,直接从命令行启动

gazebo
    
    
  • 1
  • 1

首次打开 Gazebo 会比较慢,因为其需要下载一些模型文件

ga

在运行 Gazebo 仿真之前首先要进行相关文件的配置

Gazebo配置

  • 安装protobuf库,它用作Gazebo的接口。

    sudo apt-get install libprotobuf-dev libprotoc-dev protobuf-compiler libeigen3-dev 
          
          
    • 1
    • 1
  • 在仿真文件夹目录顶层创建一个 Build 文件夹

    cd ~/src/Firmware/Tools/sitl_gazebo
    mkdir Build
          
          
    • 1
    • 2
    • 1
    • 2
  • 添加路径
# 设置插件的路径以便 Gazebo 能找到模型文件
  export GAZEBO_PLUGIN_PATH=${GAZEBO_PLUGIN_PATH}</span>:<span class="hljs-variable">$HOME/src/Firmware/Tools/sitl_gazebo/Build
# 设置模型路径以便 Gazebo 能找到机型
  export GAZEBO_MODEL_PATH=${GAZEBO_MODEL_PATH}</span>:<span class="hljs-variable">$HOME/src/Firmware/Tools/sitl_gazebo/models
# 禁用在线模型查找
  export GAZEBO_MODEL_DATABASE_URI=""
# 设置 sitl_gazebo 文件夹的路径
  export SITL_GAZEBO_PATH=$HOME/src/Firmware/Tools/sitl_gazebo
    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 切换到构建目录并从中调用CMake
cd Build
cmake ..
    
    
  • 1
  • 2
  • 1
  • 2
  • 构建 gazebo 插件
make
    
    
  • 1
  • 1

万事俱备,只欠东风。现在就可以运行Gazebo仿真了,以最基本的iris仿真为例

cd ~/src/Firmware
make posix_sitl_default gazebo
    
    
  • 1
  • 2
  • 1
  • 2

你会看到下面的界面,操作很直观,其他机型的仿真自行查看PX4中文维基

gazebo1

gazebo2

上图是Mission模式的仿真。

在Gazebo中可以先选中飞行器,右键Follow,这样飞行器会一直在界面中间,按Esc退出



MAVROS仿真

MAVROSROS包允许在运行ROS的计算机、支持MAVLink的飞控板以及支持MAVLink的地面站之间通讯。虽然MAVROS可以用来与任何支持MAVLink的飞控板通讯,但是本文仅就PX4飞行栈与运行ROS的协同计算机之间的通讯予以说明。

安装ROS indigo

前面我们已经安装过Gazebo7了,现在只需要装ROS桌面版,注意不要安装full版,Gazebo2(ROS-indigo自带)不能与更新版本的Gazebo共存。

  • 安装ROS indigo
sudo apt-get install ros-indigo-desktop 
    
    
  • 1
  • 1

然后,安装ros-gazebo接口库等

~$ sudo apt-get install ros-indigo-gazebo7-  
ros-indigo-gazebo7-msgs         ros-indigo-gazebo7-ros-control  
ros-indigo-gazebo7-plugins      ros-indigo-gazebo7-ros-pkgs  
ros-indigo-gazebo7-ros  
    
    
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

这里就要讲到Linux系统下的一个常用快捷键[Tab]了
它具有“命令补全”与“文件补齐”的功能,可以让我们少打很多字,还阔以避免我们打错命令或文件名。
上面我们在输入了sudo apt-get install ros-indigo-gazebo7-后连续输入两个[Tab],所有以ros-indigo-gazebo7-开头的命令都显示出来了。
至少需要安装ros-indigo-gazebo7-ros-pkgs其他的看着办吧

  • 初始化 rosdep

在开始使用ROS之前你还需要初始化rosdep。rosdep可以方便在你需要编译某些源码的时候为其安装一些系统依赖,同时也是某些ROS核心功能组件所必需用到的工具。

sudo rosdep init
rosdep update
    
    
  • 1
  • 2
  • 1
  • 2
  • 将ROS环境变量添加到bash会话中
echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc
source ~/.bashrc
    
    
  • 1
  • 2
  • 1
  • 2

安装MAVROS

  • 安装mavros依赖的包,使用apt-get安装即可:
$ sudo apt-get install ros-indigo-mavros ros-indigo-mavros-extras ros-indigo-control-toolbox
    
    
  • 1
  • 1

假定你有一个catkin工作空间位于~/catkin_ws,如果没有,则创建一个:

$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws
    
    
  • 1
  • 2
  • 1
  • 2
  • 下载mavros包
$ cd ~/catkin_ws/src
$ git clone https://github.com/mavlink/mavros.git
$ cd mavros
# 切换到indigo-devel分支
# 可以通过git branch -a查看所有远程分支
$ git checkout indigo-devel
    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 建立自己的外部控制程序包

外部控制程序offboard_node.cpp以及释义请点击PX4中文维基

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

$ cd ~/catkin_ws/src
$ catkin_create_pkg offboard roscpp mavros geometry_msgs
    
    
  • 1
  • 2
  • 1
  • 2

这一步会创建一个名为offboard的新程序包,这个程序包依赖于roscpp 、mavros以及geometry_msgs。

在offboard目录下生自动成两个文件夹include和src。我们将外部控制例程offboard_node.cpp放入刚刚生成的src目录下。然后修改/catkin_ws/src/offboard目录下的CMakeLists.txt文件。取消掉一些注释,生成相应节点(否则会出现找不到节点的错误)。

cmk

注意: 第一个框
add_executable(offboard_node src/offboard_node.cpp)
第一个offboard_node是我们根据src/offboard_node.cpp创建的节点的名称

最后,在catkin工作空间(catkin_ws)中,使用catkin_make工具从源文件构建和安装一个包:

$ cd ~/catkin_ws
$ catkin_make
    
    
  • 1
  • 2
  • 1
  • 2

catkin_make命令在catkin 工作空间中是一个非常方便的工具。如果你查看一下当前目录应该能看到’build’和’devel’这两个文件夹。在’devel’文件夹里面你可以看到几个setup.*sh文件。source这些文件中的任何一个都可以将当前工作空间设置在ROS工作环境的最顶层,想了解更多请参考catkin文档。接下来首先source一下新生成的setup.*sh文件:

$ source devel/setup.bash
    
    
  • 1
  • 1

要想保证工作空间已配置正确需确保ROS_PACKAGE_PATH环境变量包含你的工作空间目录,采用以下命令查看

$ </span>echo <span class="hljs-variable">$ROS_PACKAGE_PATH
/home/<youruser>/catkin_ws/src:/opt/ros/indigo/share:/opt/ros/indigo/stacks
    
    
  • 1
  • 2
  • 1
  • 2

到此你的工作环境已经搭建完成,可以进行mavros仿真了。

启动仿真

通过MAVROS应用在Gazebo模拟的Iris四旋翼上。最后,应该会看到飞行器缓慢起飞到高度2米。

# 切换到固件目录
cd ~/src/Firmware
# 启动gazebo仿真
make posix_sitl_default gazebo
# 启动MAVROS,链接到本地ROS
roslaunch mavros px4.launch fcu_url:="udp://:[email protected]:14557"
# 运行外部控制程序
rosrun offboard offboard_node
    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

最终结果如下

gazebo3

gazebo4

可以发现,现在在地面站上无论切换什么飞行模式,飞行器都会自动返回Offboard外部控制模式。

常见错误解决

  • 启动时出现No namespace found

下载Model文件到目录~/.gazebo/models中。Linux中隐藏文件使用Ctrl + H查看,~/即Ubutnu下的
Home文件夹。

hg clone https://bitbucket.org/osrf/gazebo_models
mkdir -p ~/.gazebo/models
cp -r gazebo_models/* ~/.gazebo/models
    
    
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

                                          By Fantasy

原文链接 http://blog.csdn.net/oqqENvY12/article/details/55263122

欢迎交流~ 个人 Gitter 交流平台,点击直达:Gitter

故事开始之前,先按照笔者的这一篇博客在Ubuntu上完成固件的编译。


jMAVSim仿真

jMAVSim仿真不需要任何配置,直接输入指令即可

cd ~/src/Firmware
make posix_sitl_default jmavsim
  
  
  • 1
  • 2
  • 1
  • 2

之后便会出现下图所示的界面

gazebo5

可以在终端中输入指令进行飞行操作

commander takeoff
  
  
  • 1
  • 1

但是显然使用地面站会更加方便,可以在地面站上自由的切换飞行模式,也可以对Mission模式进行仿真。

可以调出地面站的虚拟摇杆进行简单操作。听说某些遥控器可以直接连QGC,想想应该会很棒。

Linux下可以用两种方法打开QGC,建议选择AppImage,点击图片就可以运行,不用每次都输入冗长的./qgroundcontrol-start.sh
建议下载完成后将文件复制到Home目录下,并执行下列操作增加可执行权限
chmod +x ./QGroundControl.AppImage

QGC支持摇杆,部分遥控器可以直接连接地面站进行操作。开启虚拟摇杆的请看这里

qgc



Gazebo仿真

在使用Gazebo进行仿真之前有一些准备工作必不可少。

安装Gazebo7

  • 设置您的计算机以接受来自packages.osrfoundation.org的软件。
sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list'
  
  
  • 1
  • 1
  • 添加秘钥
wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
  
  
  • 1
  • 1
  • 安装Gazebo7
 # 首先更新源
 sudo apt-get update
 # 安装Gazebo7
 sudo apt-get install gazebo7 
 # 开发者需要安装额外的包
 sudo apt-get install libgazebo7-dev
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

现在可以尝试启动gazebo,直接从命令行启动

gazebo
  
  
  • 1
  • 1

首次打开 Gazebo 会比较慢,因为其需要下载一些模型文件

ga

在运行 Gazebo 仿真之前首先要进行相关文件的配置

Gazebo配置

  • 安装protobuf库,它用作Gazebo的接口。

    sudo apt-get install libprotobuf-dev libprotoc-dev protobuf-compiler libeigen3-dev 
        
        
    • 1
    • 1
  • 在仿真文件夹目录顶层创建一个 Build 文件夹

    cd ~/src/Firmware/Tools/sitl_gazebo
    mkdir Build
        
        
    • 1
    • 2
    • 1
    • 2
  • 添加路径
# 设置插件的路径以便 Gazebo 能找到模型文件
  export GAZEBO_PLUGIN_PATH=${GAZEBO_PLUGIN_PATH}</span>:<span class="hljs-variable">$HOME/src/Firmware/Tools/sitl_gazebo/Build
# 设置模型路径以便 Gazebo 能找到机型
  export GAZEBO_MODEL_PATH=${GAZEBO_MODEL_PATH}</span>:<span class="hljs-variable">$HOME/src/Firmware/Tools/sitl_gazebo/models
# 禁用在线模型查找
  export GAZEBO_MODEL_DATABASE_URI=""
# 设置 sitl_gazebo 文件夹的路径
  export SITL_GAZEBO_PATH=$HOME/src/Firmware/Tools/sitl_gazebo
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 切换到构建目录并从中调用CMake
cd Build
cmake ..
  
  
  • 1
  • 2
  • 1
  • 2
  • 构建 gazebo 插件
make
  
  
  • 1
  • 1

万事俱备,只欠东风。现在就可以运行Gazebo仿真了,以最基本的iris仿真为例

cd ~/src/Firmware
make posix_sitl_default gazebo
  
  
  • 1
  • 2
  • 1
  • 2

你会看到下面的界面,操作很直观,其他机型的仿真自行查看PX4中文维基

gazebo1

gazebo2

上图是Mission模式的仿真。

在Gazebo中可以先选中飞行器,右键Follow,这样飞行器会一直在界面中间,按Esc退出



MAVROS仿真

MAVROSROS包允许在运行ROS的计算机、支持MAVLink的飞控板以及支持MAVLink的地面站之间通讯。虽然MAVROS可以用来与任何支持MAVLink的飞控板通讯,但是本文仅就PX4飞行栈与运行ROS的协同计算机之间的通讯予以说明。

安装ROS indigo

前面我们已经安装过Gazebo7了,现在只需要装ROS桌面版,注意不要安装full版,Gazebo2(ROS-indigo自带)不能与更新版本的Gazebo共存。

  • 安装ROS indigo
sudo apt-get install ros-indigo-desktop 
  
  
  • 1
  • 1

然后,安装ros-gazebo接口库等

~$ sudo apt-get install ros-indigo-gazebo7-  
ros-indigo-gazebo7-msgs         ros-indigo-gazebo7-ros-control  
ros-indigo-gazebo7-plugins      ros-indigo-gazebo7-ros-pkgs  
ros-indigo-gazebo7-ros  
  
  
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

这里就要讲到Linux系统下的一个常用快捷键[Tab]了
它具有“命令补全”与“文件补齐”的功能,可以让我们少打很多字,还阔以避免我们打错命令或文件名。
上面我们在输入了sudo apt-get install ros-indigo-gazebo7-后连续输入两个[Tab],所有以ros-indigo-gazebo7-开头的命令都显示出来了。
至少需要安装ros-indigo-gazebo7-ros-pkgs其他的看着办吧

  • 初始化 rosdep

在开始使用ROS之前你还需要初始化rosdep。rosdep可以方便在你需要编译某些源码的时候为其安装一些系统依赖,同时也是某些ROS核心功能组件所必需用到的工具。

sudo rosdep init
rosdep update
  
  
  • 1
  • 2
  • 1
  • 2
  • 将ROS环境变量添加到bash会话中
echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc
source ~/.bashrc
  
  
  • 1
  • 2
  • 1
  • 2

安装MAVROS

  • 安装mavros依赖的包,使用apt-get安装即可:
$ sudo apt-get install ros-indigo-mavros ros-indigo-mavros-extras ros-indigo-control-toolbox
  
  
  • 1
  • 1

假定你有一个catkin工作空间位于~/catkin_ws,如果没有,则创建一个:

$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws
  
  
  • 1
  • 2
  • 1
  • 2
  • 下载mavros包
$ cd ~/catkin_ws/src
$ git clone https://github.com/mavlink/mavros.git
$ cd mavros
# 切换到indigo-devel分支
# 可以通过git branch -a查看所有远程分支
$ git checkout indigo-devel
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 建立自己的外部控制程序包

外部控制程序offboard_node.cpp以及释义请点击PX4中文维基

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

$ cd ~/catkin_ws/src
$ catkin_create_pkg offboard roscpp mavros geometry_msgs
  
  
  • 1
  • 2
  • 1
  • 2

这一步会创建一个名为offboard的新程序包,这个程序包依赖于roscpp 、mavros以及geometry_msgs。

在offboard目录下生自动成两个文件夹include和src。我们将外部控制例程offboard_node.cpp放入刚刚生成的src目录下。然后修改/catkin_ws/src/offboard目录下的CMakeLists.txt文件。取消掉一些注释,生成相应节点(否则会出现找不到节点的错误)。

cmk

注意: 第一个框
add_executable(offboard_node src/offboard_node.cpp)
第一个offboard_node是我们根据src/offboard_node.cpp创建的节点的名称

最后,在catkin工作空间(catkin_ws)中,使用catkin_make工具从源文件构建和安装一个包:

$ cd ~/catkin_ws
$ catkin_make
  
  
  • 1
  • 2
  • 1
  • 2

catkin_make命令在catkin 工作空间中是一个非常方便的工具。如果你查看一下当前目录应该能看到’build’和’devel’这两个文件夹。在’devel’文件夹里面你可以看到几个setup.*sh文件。source这些文件中的任何一个都可以将当前工作空间设置在ROS工作环境的最顶层,想了解更多请参考catkin文档。接下来首先source一下新生成的setup.*sh文件:

$ source devel/setup.bash
  
  
  • 1
  • 1

要想保证工作空间已配置正确需确保ROS_PACKAGE_PATH环境变量包含你的工作空间目录,采用以下命令查看

$ </span>echo <span class="hljs-variable">$ROS_PACKAGE_PATH
/home/<youruser>/catkin_ws/src:/opt/ros/indigo/share:/opt/ros/indigo/stacks
  
  
  • 1
  • 2
  • 1
  • 2

到此你的工作环境已经搭建完成,可以进行mavros仿真了。

启动仿真

通过MAVROS应用在Gazebo模拟的Iris四旋翼上。最后,应该会看到飞行器缓慢起飞到高度2米。

# 切换到固件目录
cd ~/src/Firmware
# 启动gazebo仿真
make posix_sitl_default gazebo
# 启动MAVROS,链接到本地ROS
roslaunch mavros px4.launch fcu_url:="udp://:[email protected]:14557"
# 运行外部控制程序
rosrun offboard offboard_node
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

最终结果如下

gazebo3

gazebo4

可以发现,现在在地面站上无论切换什么飞行模式,飞行器都会自动返回Offboard外部控制模式。

常见错误解决

  • 启动时出现No namespace found

下载Model文件到目录~/.gazebo/models中。Linux中隐藏文件使用Ctrl + H查看,~/即Ubutnu下的
Home文件夹。

hg clone https://bitbucket.org/osrf/gazebo_models
mkdir -p ~/.gazebo/models
cp -r gazebo_models/* ~/.gazebo/models
  
  
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

                                          By Fantasy

原文链接 http://blog.csdn.net/oqqENvY12/article/details/55263122

猜你喜欢

转载自blog.csdn.net/gzj2013/article/details/72900350