Ubuntu 16.04 ROS Kinect 安装mavros
做无人机有一段时间了,下面讲一下无人机运用ros进行外部控制的mavros功能包的安装过程。
用的飞控是Pixhawk 4 ,飞控的固件是PX4。对于APM的固件也可以用,理论上来说对于使用mavlink协议的无人机都可以使用mavros功能包,只是对于PX4和APM固件的支持比较好。这个功能包的使用范围广,对于ARM和x86架构的处理器都可以运行。
mavros的作用就是一个连接ros和飞控的一个桥梁。
安装方法有两种任选一种就可以。
二进制文件安装mavros
通过二进制安装相对来说比较简单,但是扩展性比较差,如果后面要更改mavros的一些东西就不推荐用这种方式安装。
apt-get
直接安装
sudo apt-get install ros-kinetic-mavros ros-kinetic-mavros-extras
还需要安装一个GeographicLib库才可以运行
wget https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh
chmod +x ./install_geographiclib_datasets.sh
sudo ./install_geographiclib_datasets.sh
源码编译安装
以下是我个人比较推荐的一种安装方式,对以后的无人机开发很方便。
安装依赖
sudo apt-get install python-catkin-tools python-rosinstall-generator -y
创建工作空间
接下来为mavros创建一个工作空间
mkdir -p ~/mavros_ws/src
cd ~/mavros_ws
catkin init
wstool init src
安装mavlink
kinetic版本以外的ros也可以安装,改一下版本就可以了
rosinstall_generator --rosdistro kinetic mavlink | tee /tmp/mavros.rosinstall
下载mavros
可以选择稳定版和最新版,下面的命令选择一个执行即可
稳定版
rosinstall_generator --upstream mavros | tee -a /tmp/mavros.rosinstall
最新版
rosinstall_generator --upstream-development mavros | tee -a /tmp/mavros.rosinstall
补全依赖
在-j4
改为你电脑的CPU核数
wstool merge -t src /tmp/mavros.rosinstall
wstool update -t src -j4
rosdep install --from-paths src --ignore-src -y
安装GeographicLib
sudo ./src/mavros/mavros/scripts/install_geographiclib_datasets.sh
编译
这个过程有可能比较长。
catkin build
添加环境变量
将环境变量添加到.bashrc
,方便以后使用。
echo "source ~/mavros_ws/devel/setup.bash" >> ~/.bashrc
使用
安装完成过后就可以使用了。
mavros可以通过串口、tcp、udp多种方式连接到飞控。
下面介绍一下通过串口的方式连接到mavros,对于通过tcp、udp方式在后面的为pixhawk添加WiFi的教程里面会有介绍。
通过一个USB转串口模块连接飞控的串口二,飞控的串口二为高速串口,在进行外部控制mavros运行的时候和飞控会有很多的数据传输,所以需要高速串口才可以。
USB转串口在淘宝上很多,买一个波特率支持大一点的,要至少支持921600.我用的是下面这种。
在飞控将飞控上端口的TX和USB转串口上的RX接在一起,飞控上端口的RX和USB转串口上的TX接在一起,GND也接在一起共地减少噪声。对于飞控的引脚的定义查阅飞控的手册即可。
接好线过后把飞控的SYS_COMPANION
参数设置为Companion Link (921600 baud, 8N1)
参数设置好了过后把线连接到电脑上,我们会在、/dev/ttyUSB下面看到这个设备。
运行mavros
roslaunch mavros px4.launch fcu_url:=/dev/ttyUSB0:921600
对于这个USB端口好可能会变,这个可以参考我之前的博客用udev的方式解决这个问题。
接下来就可以根据mavros的ros话题说明编写程序了