Ubuntu18.04安装PX4并与ROS联合实验

1.如果没有安装ROS,可以去PX4官网使用脚本链接将ROS和PX4一起安装(我不推荐,因为装不全,请自行安装ros,之后参考本教程)

2.如果已安装ROS-melodic,按下面步骤手动配置。


在这里插入图片描述
Ubuntu18.04安装PX4并与ROS联合实验_第1张图片

手动配置

1.先安装MAVROS

1.1(a) 二进制版本官网

1.1(b) 源码编译(我后来用源码编译并不麻烦,推荐如下)

安装编译工具:

sudo apt-get install python-catkin-tools python-rosinstall-generator -y

创建存放mavros的工作空间,这里推荐放在一个新建的单独的工作空间,因为按照这个教程走下去后,该工作空间只能用catkin build指令编译而不能用catkin_make了。

mkdir -p ~/mavros_ws/src
cd ~/mavros_ws
catkin init
wstool init src

更新保证获取到最新的稳定版mavlink和mavros:

rosinstall_generator --rosdistro melodic mavlink | tee /tmp/mavros.rosinstall
rosinstall_generator --upstream mavros | tee -a /tmp/mavros.rosinstall

归并工作链,准备开始安装:

wstool merge -t src /tmp/mavros.rosinstall
wstool update -t src -j12
rosdep install --from-paths src --ignore-src -y

其中第二行命令的-j多少,后面的数字最好是你cpu的线程数

这个过程中网速一定要好,不然clone源码这一步会卡住,会一直出现mavros | mavlink active啥啥的。

安装GeographicLib datasets:

sudo ./src/mavros/mavros/scripts/install_geographiclib_datasets.sh

编译源码(在工作空间下):

catkin build

如果你想每个终端都常用的话,source ~/mavros_ws/devel/setup.bash这句话添加到
~/.bashrc文件中,否则就只在这个终端里source一下就行了。

ROS和MAVROS都安装完了。



2.安装FastRTPS和Nuttx及他们的依赖

开始安装一些依赖

权限设置

sudo usermod -a -G dialout $USER

然后注销后,重新登录,因为重新登录后所做的改变才会有效

sudo apt-get update

必备软件(python、git、qt)

sudo apt-get install python-argparse git wget zip \
    python-empy qtcreator cmake build-essential genromfs -y

仿真工具

sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-8-jre
sudo apt-get install ant protobuf-compiler libeigen3-dev libopencv-dev openjdk-8-jdk openjdk-8-jre clang-3.9 liblldb-3.9 -y

卸载模式管理器

sudo apt-get remove modemmanager

更新包列表和安装下面的依赖包

sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa
sudo apt-get update
sudo apt-get install python-serial openocd \
    flex bison libncurses5-dev autoconf texinfo build-essential \
    libftdi-dev libtool zlib1g-dev \
    python-empy gcc-arm-none-eabi -y

this ppa may be useless:sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded有问题
报错:udo add-apt-repository ppa:terry.guo/gcc-arm-embedded
tag:launchpad.net:2008:redacte
没关系不用理会。

再更新一下

sudo apt-get update -y

Required python packages

sudo apt-get install python-argparse   python-empy python-toml python-numpy   python-dev python-pip -y
sudo -H pip install --upgrade pip
sudo -H pip install pandas jinja2 pyserial
sudo apt install python3-pip
sudo pip3 install numpy toml
pip3 install --user empy
sudo pip3 install jinja2
# optional python tools
sudo -H pip install pyulog

安装Ninja编译工具:

sudo apt-get install ninja-build -y

安装FastRTPS开发环境:(there is some new version in px4_link)

20200705更新:下面的链接和px4的链接都不管用了,请参考fastRTPS官网下载文件–>
1.7.1版本
下面的命令中版本号请请自己更改

因为链接失效不要用这个里面的,看下面的更新
wget http://www.eprosima.com/index.php/component/ars/repository/eprosima-fast-rtps/eprosima-fast-rtps-1-5-0/eprosima_fastrtps-1-5-0-linux-tar-gz -O eprosima_fastrtps-1-5-0-linux.tar.gz
tar -xzf eprosima_fastrtps-1-5-0-linux.tar.gz eProsima_FastRTPS-1.5.0-Linux/
tar -xzf eprosima_fastrtps-1-5-0-linux.tar.gz requiredcomponents
tar -xzf requiredcomponents/eProsima_FastCDR-1.0.7-Linux.tar.gz
更新:
先下载从官网下载1.7.1版本
tar -xzf eProsima_FastRTPS-1.7.1-Linux.tar.gz eProsima_FastRTPS-1.7.1-Linux/
tar -xzf eProsima_FastRTPS-1.7.1-Linux.tar.gz requiredcomponents
tar -xzf requiredcomponents/eProsima_FastCDR-1.0.8-Linux.tar.gz

make FastRTPS1.5.0, we may encounter error about

cd eProsima_FastCDR-1.0.8-Linux
./configure --libdir=/usr/lib
make -j12
sudo make install
cd ..
cd eProsima_FastRTPS-1.7.1-Linux
./configure --libdir=/usr/lib
make -j12
sudo make install
cd ..
rm -rf requiredcomponents eprosima_fastrtps-1-7-1-linux.tar.gz

make后面的j后的数字改为你cpu的线程数

配置Nuttx开发环境:

sudo apt-get install python-serial openocd flex bison libncurses5-dev autoconf texinfo  libftdi-dev libtool zlib1g-dev -y

配置arm gcc编译器:

sudo apt-get remove gcc-arm-none-eabi gdb-arm-none-eabi binutils-arm-none-eabi gcc-arm-embedded

如果gdb找不到,则sudo apt install gdb-multiarch

sudo add-apt-repository --remove ppa:team-gcc-arm-embedded/ppa

运行下面这个脚本,建立script.sh ,粘贴进去,然后终端使用 bash script.sh 运行:***(最好修改一下path的位置,放在home下我看着难受)***

pushd .
cd ~
wget https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-rm/7-2017q4/gcc-arm-none-eabi-7-2017-q4-major-linux.tar.bz2
tar -jxf gcc-arm-none-eabi-7-2017-q4-major-linux.tar.bz2
exportline="export PATH=$HOME/gcc-arm-none-eabi-7-2017-q4-major/bin:\$PATH"
if grep -Fxq "$exportline" ~/.profile; then echo nothing to do ; else echo $exportline >> ~/.profile; fi
popd

然后重启电脑

检查是否安装成功:

arm-none-eabi-gcc --version

如果输出了像下面这样的:

arm-none-eabi-gcc (GNU Tools for Arm Embedded Processors 7-2017-q4-major) 7.2.1 20170904 (release) [ARM/embedded-7-branch revision 255204]
Copyright © 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

你成功了!



3. 安装QGC(QGroundControl)地面站:

直接去官网下下来,直接给权限就可以运行了。
链接

下载源码

最好下载v1.9.2版本
mkdir -p ~/src
cd src
git clone -b v1.9.2 https://github.com/PX4/Firmware.git
cd Firmware
git submodule update --init --recursive

(optional) 编译(失败也没事,我不用)

make posix jmavsim
过程中会再clone一些东西,不要急,等一会儿就OK了,成功后会出现一个小飞机,可以通过命令来控制它

commander takeoff  #起飞
commander land   #降落

下面生成可以烧在pixhawk板子上的

在Firware文件夹下面:
make px4_fmu-v5_default
过程中也会下载很多东西,等一会儿就OK

最终没有报错,输出:

– Build files have been written to: /home/youruser/src/Firmware/build/nuttx_px4fmu-v4_default
[954/954] Creating /home/youruser/src/Firmware/build/nuttx_px4fmu-v4_default/px4fmu-v4_default.px4

就OK了!恭喜你配完了!

(过程中的报错基本全是网速的锅,一定要找个网速好的地方!或者!)

关于build的固件版本(并未尝试,maybe there is “_” in name ,please use Tab to list what it is):

Pixhawk 4: make px4_fmu-v5_default
Pixracer: make px4fmu-v4_default
Pixhawk 3 Pro: make px4fmu-v4pro_default
Pixhawk Mini: make px4fmu-v3_default
Pixhawk 2: make px4fmu-v3_default
mRo Pixhawk: make px4fmu-v3_default (supports 2MB Flash)
HKPilot32: make px4fmu-v2_default
Pixfalcon: make px4fmu-v2_default
Dropix: make px4fmu-v2_default
MindPX/MindRacer: make mindpx-v2_default
mRo X-2.1: make auav-x21_default
Crazyflie 2.0: make crazyflie_default
Intel® Aero Ready to Fly Drone: make aerofc-v1_default
Pixhawk 1: make px4fmu-v2_default

烧录在板子上:

make px4fmu-v4_default upload
成功的话会显示:

Erase : [] 100.0%
Program: [
] 100.0%
Verify : [====================] 100.0%
Rebooting.

[100%] Built target upload

搭建Qt开发环境(我没用):

在与Firmware平级的目录下,

mkdir Firmware-build
cd Firmware-build
cmake ../Firmware -G "CodeBlocks - Unix Makefiles"

我的环境显示,没有…/Firmware这个文件夹,于是我直接在Qt中打开cmakelist,然后在cmake参数那一栏写入 -G “CodeBlocks - Unix Makefiles”,然后run cmake 就成功了。

然后在Qt中open a project,选择这个Firmware的CMakeLists.txt,打开就OK了,就可以看到整个工程了。



4.开始实验jMAVSim仿真(我没用)

使用jmavsim

cd ~/src/Firmware
make px4_sitl_default jmavsim

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

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

5.GAZEBO仿真(必须做)

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

Gazebo配置

安装protobuf库,它用作Gazebo的接口。
sudo apt-get install libprotobuf-dev libprotoc-dev protobuf-compiler libeigen3-dev
在仿真文件夹目录顶层创建一个 build 文件夹

cd ~/src/Firmware/Tools/sitl_gazebo
mkdir build

添加路径

设置插件的路径以便 Gazebo 能找到模型文件
  export GAZEBO_PLUGIN_PATH=${GAZEBO_PLUGIN_PATH}:$HOME/src/Firmware/Tools/sitl_gazebo/build
设置模型路径以便 Gazebo 能找到机型
  export GAZEBO_MODEL_PATH=${GAZEBO_MODEL_PATH}:$HOME/src/Firmware/Tools/sitl_gazebo/models
禁用在线模型查找
  export GAZEBO_MODEL_DATABASE_URI=""
设置 sitl_gazebo 文件夹的路径
  export SITL_GAZEBO_PATH=$HOME/src/Firmware/Tools/sitl_gazebo

Here is my ~/.bashrc,you can refer according to your needs:

source /opt/ros/melodic/setup.bash
source /home/wzy/catkin_ws/devel/setup.bash
source /home/wzy/mavros_ws/devel/setup.bash
source /home/wzy/src/Firmware/Tools/setup_gazebo.bash /home/wzy/src/Firmware /home/wzy/src/Firmware/build/px4_sitl_default
source /usr/share/gazebo-9/setup.sh

export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:/home/wzy/.gazebo/models:/home/wzy/catkin_ws/src/turtlebot3_simulations/turtlebot3_gazebo/models:/home/wzy/catkin_ws/src/turtlebot3_simulations/turtlebot3_gazebo/models/turtlebot3_autorace
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:/home/wzy/src/Firmware:/home/wzy/src/Firmware/Tools/sitl_gazebo
export TURTLEBOT3_MODEL=waffle
export SITL_GAZEBO_PATH=$HOME/src/Firmware/Tools/sitl_gazebo
export GAZEBO_MODEL_DATABASE_URI=""
export GAZEBO_PLUGIN_PATH=${GAZEBO_PLUGIN_PATH}:$HOME/src/Firmware/Tools/sitl_gazebo/build

切换到构建目录并从中调用CMake

cd build
cmake ..

构建 gazebo 插件

also install this package before make
sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev

现在就可以运行Gazebo仿真了,以最基本的iris仿真为例

cd ~/src/Firmware
make px4_sitl_default gazebo

还有其他的机型px4中文

建立自己的外部控制程序包

外部控制程序offboard_node.cpp以及释义请点击PX4中文维基。
px4链接
根据ROS官网教程,先建一个ROS包,

$ cd ~/catkin_ws/src
$ catkin_create_pkg offboard roscpp mavros geometry_msgs

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

在offboard目录下生自动成两个文件夹include和src。我们将外部控制例程offboard_node.cpp放入刚刚生成的src目录下。然后修改/catkin_ws/src/offboard目录下的CMakeLists.txt文件。取消掉一些注释,生成相应节点(否则会出现找不到节点的错误)。
注意:
1.add_executable(offboard_node src/offboard_node.cpp)
第一个offboard_node是我们根据src/offboard_node.cpp创建的节点的名称
2.target_link_libraries(offboard_node ${catkin_LIBRARIES})

再在offboard_node.cpp修改一个在65行offb_set_mode.response.success ------> offb_set_mode.response.mode_sent

$ cd ~/catkin_ws
$ catkin_make

启动仿真

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

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

或者可以先升级ROS环境后启动px4的节点(我没试过)

cd  
make posix_sitl_default
source ~/catkin_ws/devel/setup.bash    // (只有mavros是用源码编译的才需要)
source Tools/setup_gazebo.bash $(pwd) $(pwd)/build_posix_sitl_default
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:$(pwd)
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:$(pwd)/Tools/sitl_gazebo
roslaunch px4 mavros_posix_sitl.launch

你可能感兴趣的:(ROS使用,PX4,环境配置)