Ubuntu20.04 + ROS1 + PX4(1.13) + gazebo + mavros + XTDrone + Docker 的安装笔记
本文章为新手(作者)安装教程,可以去清华源下载Ubuntu20.04的镜像
1、全新的环境,准备工作
给系统换国内源(这里用的清华源),添加在后面
sudo nano /etc/apt/sources.list
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main universe restricted
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main universe restricted
更新一下
sudo apt update
下载一些基础工具:git
sudo apt install git
sudo apt install terminator
terminator :输入terminator 后自动运行,以后ctl + alt +T召唤的就是这个。内部右键即可使用
2、下载项目:
- XTDrone:语雀文档
git clone https://gitee.com/robin_shaun/XTDrone.git
cd XTDrone
git checkout 1_13_2
git submodule update --init --recursive
- PX4 1.13.2
官网:PX4 1.13
下载源码:
git clone https://github.com/PX4/PX4-Autopilot.git --recursive
cd PX4-Autopilot
git checkout v1.13.2 # 替换为你需要的版本号
git submodule update --init --recursive # 更新子模块
安装工具链:
bash ./Tools/setup/ubuntu.sh #这一步会下载好gazebo11 当前在/PX4-Autopilot
补一补依赖
sudo apt install ninja-build libimage-exiftool-perl ninja-build protobuf-compiler libeigen3-dev genromfs xmlstarlet libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev python3-pip gawk
pip3 install pyulog==0.7.0 numpy toml pyquaternion empy pyyaml pyargparse
下载QGroundControl
3、ROS1下载
官网:ROS1
我们这里使用国内的软件源
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'
上面软件源的密钥:
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
更新一下(每一次对源操作都要更新一下)
sudo apt update
安装桌面版
sudo apt install ros-noetic-desktop-full
安装rosdec,鱼香ROS
wget http://fishros.com/install -O fishros && . fishros
下载好依赖项
rosdepc update
添加环境变量
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc #要么手动刷新,要么新开一个窗口,以后要是有什么改动,不跟新一下,你还是会以为操作没有成功
测试:一个终端启动ROS
roscore
测试:另一个终端启动小乌龟,出现了个龟龟
rosrun turtlesim turtlesim_node
创建工作空间:
sudo apt install python3-catkin-tools
mkdir -p ~/catkin_ws/src
mkdir -p ~/catkin_ws/scripts
cd catkin_ws && catkin init # 使用catkin_make话,则为cd catkin_ws/src && catkin_init_workspace
catkin build
配置到环境里去:
gedit ~/.bashrc
添加到后面(export 的东西一定在最后)
source ~/catkin_ws/devel/setup.bash
保存后刷新
source ~/.bashrc
4、gazebo适配
XTDrone里面,修改过的gazebo-ros插件对应着gazebo9,这里要卸载gazebo11(最好逐步执行)
sudo apt-get remove --purge gazebo*
sudo apt-get remove libgazebo*
sudo apt-get remove ros-noetic-gazebo*
添加gazebo的软件源
sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list'
密钥:
wget https://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
sudo apt-get update
下载gazebo9
sudo apt-get install gazebo9
sudo apt-get install libgazebo9-dev
sudo apt-get upgrade
测试:
gazebo
ROS适配XTDrone:
XTDrone/sitl_config/下gazebo_ros_pkg移动到catkin_ws/src下
gazebo集成ROS
sudo apt-get install ros-noetic-moveit-msgs ros-noetic-object-recognition-msgs ros-noetic-octomap-msgs ros-noetic-camera-info-manager ros-noetic-control-toolbox ros-noetic-polled-camera ros-noetic-controller-manager ros-noetic-transmission-interface ros-noetic-joint-limits-interface
再次构建
cd ~/catkin_ws
catkin build
测试:开双终端依次运行如下命令
roscore
rosrun gazebo_ros gazebo
补充模型:下载models复制到~/.gazebo下:语雀文档
unzip ~/models.zip #这里是先移动到主目录下
rsync -av --ignore-existing ~/models/ ~/.gazebo/models/
5、下载mavros
sudo apt install ros-noetic-mavros ros-noetic-mavros-extras
地图资源:命令行下载太慢了,直接到官网geographiclib下载指定的文件
将 egm96.tar.bz2 egm96-5.tar.bz2 emm2015.tar.bz2等文件解压复制到/usr/share/GeographicLib/geoids/目录下
tar -jxf egm96.tar.bz2
tar -jxf egm96-5.tar.bz2
tar -jxf emm2015.tar.bz2
#生成:geoids gravity magnetic
sudo cp -r geoids gravity magnetic /usr/share/GeographicLib/
5、配置PX4
前面gazebo换完了,这里编译px4
make px4_sitl_default gazebo #这里可能会遇到错,缺啥补啥
环境配置
gedit ~/.bashrc
#然后在后面添加:
source ~/catkin_ws/devel/setup.bash
source ~/PX4-Autopilot/Tools/setup_gazebo.bash ~/PX4-Autopilot/ ~/PX4-Autopilot/build/px4_sitl_default
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/PX4-Autopilot
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/PX4-Autopilot/Tools/sitl_gazebo
#保存退出后更新环境
source ~/.bashrc
ros + px4 + Mavros + gazebo测试
cd ~/PX4-Autopilot
roslaunch px4 mavros_posix_sitl.launch #还是弹出gazebo和iris飞机模型
6、配置XTDdrone
# 修改启动脚本文件
cp sitl_config/init.d-posix/* ~/PX4-Autopilot/ROMFS/px4fmu_common/init.d-posix/
# 添加launch文件
cp -r sitl_config/launch/* ~/PX4-Autopilot/launch/
# 添加世界文件
cp sitl_config/worlds/* ~/PX4-Autopilot/Tools/sitl_gazebo/worlds/
# 修改部分插件
cp sitl_config/gazebo_plugin/gimbal_controller/gazebo_gimbal_controller_plugin.cpp ~/PX4-Autopilot/Tools/sitl_gazebo/src
cp sitl_config/gazebo_plugin/gimbal_controller/gazebo_gimbal_controller_plugin.hh ~/PX4-Autopilot/Tools/sitl_gazebo/include
cp sitl_config/gazebo_plugin/wind_plugin/gazebo_ros_wind_plugin_xtdrone.cpp ~/PX4-Autopilot/Tools/sitl_gazebo/src
cp sitl_config/gazebo_plugin/wind_plugin/gazebo_ros_wind_plugin_xtdrone.h ~/PX4-Autopilot/Tools/sitl_gazebo/include
# 添加CMakeLists.txt,对sitl_gazebo下的文件指定编译规则
cp sitl_config/CMakeLists.txt ~/PX4-Autopilot/Tools/sitl_gazebo
# 修改部分模型文件
cp -r sitl_config/models/* ~/PX4-Autopilot/Tools/sitl_gazebo/models/
# 替换同名文件
cd ~/.gazebo/models/
rm -r stereo_camera/ 3d_lidar/ 3d_gpu_lidar/ hokuyo_lidar/
#防止~/.gazebo/models/这个文件夹下,会存在与~/PX4-Autopilot/Tools/sitl_gazebo/models/ 这个文件里冲突相同模型文件 #如果没移除,说明下载的models没有这几个模型,那就不用管。
重新编译
cd ~/PX4-Autopilot
make px4_sitl_default gazebo
最终测试:
cd ~/PX4-Autopilot
roslaunch px4 indoor1.launch
然后启动通信脚本,solo代表子机型,0代表飞机的编号。
cd ~/XTDrone/communication
python3 multirotor_communication.py iris 0
再启动键盘控制脚本,solo代表子机型,1代表飞机的个数,vel代表速度控制。虽然多旋翼飞行器提供了速度控制和加速度控制两种键盘控制方式,但手动控制速度比较方便,加速度控制在后面的高级运动规划任务中比较有用。
cd ~/XTDrone/control/keyboard
python3 multirotor_keyboard_control.py iris 1 vel
对于多旋翼飞行器,Offboard控制起飞很容易,给一个大于0.3m/s的期望z向速度即可,因此可以不使用Takeoff模式(按键中的v),Takeoff模式的相关参数(起飞高度,起飞速度)需要在rcS设置,比较麻烦。
7、下载Docker
参考这位博主
Docker相关操作:
# 停止容器
sudo docker stop <容器名或ID>
# 删除容器(确保已停止)
sudo docker rm <容器名或ID>
# 查看所有容器
sudo docker ps -a
#加载镜像
sudo docker load < your_image
#查看已有镜像
sudo docker images
#创建一个容器
docker run -d --name temp_container your_image:tag
#创建一个容器并把一个目录挂载到本地
docker run -it
--name dev_container
-v ~/DockerFile:/root/catkin_ws # 直接挂载到容器内的 catkin_ws 目录
your_image:tag
/bin/bash
(内外的修改都不需要提交)
docker start synergy #(启动容器)
docker ps -a #(查看所有容器)
docker exec -it synergy /bin/bash #(进入终端)
sudo docker cp synergy:root/catkin_ws/src/. ~/New # (src的全部内容复制出来)
docker inspect # 容器的IP地址,可以通过
touch filename.txt #创建一个文件
总结
ROS1版本用的是catkin build来编译工作间,就是遍历src下的包(包里的cmake相关),所以这里src里面多一个包都要重新编译;
PX4里面每放一次新模型都要makec clean (重新编译 SITL) make px4_sitl_default gazebo。
ros1原理
ROS master 服务运行
roscore
其他主机
export ROS_MASTER_URI=http://192.168.1.100:11311
export ROS_IP=<container_ip>
gazebo服务:
gazebo --verbose
export GAZEBO_MASTER_URI=http://127.0.0.1:11345