The value of knowledge lies not in possession, but in share.

0%

基于ROS与Gazebo的Pixhawk仿真

心路历程

因为在之前搭建深度学习Caffe框架的过程中安装了Anaconda,因此后面搭建Pixhawk+Gazebo仿真环境时,不断出错(错误如下方所示)。

反反复复卸载安装相关组件,尝试了各种办法,花了至少4天时间,最终还是没能解决问题。

之后,为了排除其他因素影响,我在Windows下面直接搭了虚拟机,尝试着一步步搭建,终于可以跑通了。

在这几天的摸爬滚打的过程中,过程虽然煎熬,但自己也学习了不少Linux相关知识,对这个系统了解的程度也比以前深了些。

1
2
3
4
5
6
7
8
9
>/home/cong/src/Firmware/build/posix_sitl_default/build_gazebo/Float.pb.h:12:2: error: 
>#error This file was generated by a newer version of protoc which is
> ^
>/home/cong/src/Firmware/build/posix_sitl_default/build_gazebo/Float.pb.h:13:2: error:
>#error incompatible with your Protocol Buffer headers. Please update
> ^
>/home/cong/src/Firmware/build/posix_sitl_default/build_gazebo/Float.pb.h:14:2: error:
>#error your headers.
>

安装ROS

一定要确定Ubuntu与ROS的版本对应

如果安装的是ros-kinetic-desktop-full,其自带gazebo7

ROS发布日期 ROS版本 对应Ubutnu版本
2016.3 ROS Kinetic Kame Ubuntu 16.04 (Xenial) / Ubuntu 15.10 (Wily)
2015.3 ROS Jade Turtle Ubuntu 15.04 (Wily) / Ubuntu LTS 14.04 (Trusty)
2014.7 ROS Indigo Igloo Ubuntu 14.04 (Trusty)
2013.9 ROS Hydro Medusa Ubuntu 12.04 LTS (Precise)
2012.12 ROS Groovy Galapagos Ubuntu 12.04 (Precise)

添加源:

1
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

或添加国内源:

1
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'

设置秘钥:

1
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 0xB01FA116

安装最新桌面版:

1
2
3
4
# 更新源
sudo apt-get update
# 安装 ros-kinetic-desktop
sudo apt-get install ros-kinetic-desktop-full

初始化ROS

初始化rosdep:

1
2
sudo rosdep init
rosdep update

初始化环境变量:

1
2
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

上面两句非常非常重要,很多小伙伴在日常的开发过程中,有的找不到 Package, 找不到node, 很多情况下都是没有添加source。

创建catkin工作空间:

1
2
3
4
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
#可以测试下
catkin_make

安装MAVROS

1
sudo apt-get install ros-kinetic-mavros ros-kinetic-mavros-extras ros-kinetic-control-toolbox

下载一些Geoid Model dataset:

1
sudo /opt/ros/kinetic/lib/mavros/install_geographiclib_datasets.sh

外部控制程序

创建外部控制程序包

1
2
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文件。取消掉一些注释,生成相应节点(否则会出现找不到节点的错误)。ROSCmakeListsTXT

编译

1
2
cd ~/catkin_ws
catkin_make

仿真

1
2
3
4
5
6
7
8
9
10
11
# Terminal 1 切换到固件目录
cd ~/src/Firmware
# 启动gazebo仿真
make posix_sitl_default gazebo
# Terminal 2 启动MAVROS,链接到本地ROS
roslaunch mavros px4.launch fcu_url:="udp://:14540@127.0.0.1:14557"
# Terminal 3 运行外部控制程序
rosrun offboard offboard_node
# 若出现 [rospack] Error: package 'offboard' not found 执行下面两行命令
# echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
# source ~/.bashrc

ROSGazeboPixhawk02

Debugs

1
2
3
4
5
6
7
8
9
10
11
12
# Bug
[FATAL] [1524021465.593366921]: UAS: GeographicLib exception: File not readable /usr/share/GeographicLib/geoids/egm96-5.pgm |
Run install_geographiclib_dataset.sh script in order to install Geoid Model dataset!
===============================================================================
REQUIRED process [mavros-2] has died!
process has finished cleanly
log file: /home/cong/.ros/log/0f7b4d4e-42b7-11e8-b72f-3464a913a149/mavros-2*.log
Initiating shutdown!
===============================================================================

# Debug
sudo /opt/ros/kinetic/lib/mavros/install_geographiclib_datasets.sh
1
2
3
4
5
6
# Bug
找不到empy或toml

# Debug
sudo apt-get install python-pip
pip install toml

🍭支持一根棒棒糖吧!