系统环境

MacBook Pro M1

Parallels Desktop 17.0

Ubuntu 20.04 arm64

Ubuntu 20.04 amd64 完全可以参考本教程。

ROS2 foxy 安装

从源码安装 ROS2 foxy

通过源码,可以安装最新的发布版本。

参考网址:https://docs.ros.org/en/foxy/Installation/Ubuntu-Install-Binary.html

sudo apt update && sudo apt install curl gnupg2 lsb-release
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key  -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

进入https://github.com/ros2/ros2/releases,下载:

image-20210901210101037

mkdir -p ~/ros2_foxy
cd ~/ros2_foxy
tar xf ~/Downloads/ros2-foxy-20201211-linux-focal-arm64.tar.bz2

sudo apt update
sudo apt install -y python3-rosdep
sudo rosdep init
rosdep update

rosdep install --from-paths ~/ros2_foxy/ros2-linux/share --ignore-src --rosdistro foxy -y --skip-keys "console_bridge fastcdr fastrtps osrf_testing_tools_cpp poco_vendor rmw_connextdds rti-connext-dds-5.3.1 tinyxml_vendor tinyxml2_vendor urdfdom urdfdom_headers"

sudo apt install -y libpython3-dev python3-pip
pip3 install -U argcomplete

测试:

. ~/ros2_foxy/ros2-linux/setup.bash
ros2 run demo_nodes_cpp talker

安装 rqt:

sudo apt install ~nros-foxy-rqt*

通过 Debian 软件包安装 ROS 2 foxy

参考网址:https://docs.ros.org/en/foxy/Installation/Ubuntu-Install-Debians.html

ROS2 只能在 UTF-8 编码的系统上安装,即系统语言是美式英语的,中文的不可以安装!

sudo apt update && sudo apt install curl gnupg2 lsb-release
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key  -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

sudo apt update
sudo apt install ros-foxy-desktop
echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc # 配置环境变量
source ~/.bashrc # 加载环境变量

测试:

# 终端 1
ros2 run demo_nodes_cpp talker
# 终端 2
ros2 run demo_nodes_py listener

卸载:

sudo apt remove ~nros-foxy-* && sudo apt autoremove

安装 mavros

基于 ROS1 noetic 安装

参考链接:https://github.com/mavlink/mavros/blob/master/mavros/README.md#installation

sudo apt install python3-catkin-tools python3-rosinstall-generator python3-osrf-pycommon -y

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

rosinstall_generator --rosdistro kinetic 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 -j4
rosdep install --from-paths src --ignore-src -y

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

catkin build

echo "source ~/mavros1_ws/devel/setup.bash" >> ~/.bashrc

基于 ROS2 foxy 安装

https://github.com/mavlink/mavros/releases

mavros2.0 是针对 ROS2 foxy 进行开发的,官方 GitHub 给出的安装命令中使用的是 colcon build 进行编译,而不是 catkin build ,所以需要先安装 colcon

colcon 官方文档给出的安装方法见:https://colcon.readthedocs.io/en/released/user/installation.html

# 官方在 ROS2 项目的背景下使用 Debian 软件包安装方法摘取如下
sudo sh -c 'echo "deb [arch=amd64,arm64] http://repo.ros2.org/ubuntu/main `lsb_release -cs` main" > /etc/apt/sources.list.d/ros2-latest.list'
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
sudo apt update
sudo apt install python3-colcon-common-extensions

接下来正式安装 mavros2(参考来源:https://github.com/mavlink/mavros/blob/ros2/mavros/README.md):

mkdir -p ~/mavros2_ws/src
cd ~/mavros2_ws
rosinstall_generator --format repos mavlink | tee /tmp/mavlink.repos
rosinstall_generator --format repos --upstream mavros | tee -a /tmp/mavros.repos
vcs import src < /tmp/mavlink.repos
vcs import src < /tmp/mavros.repos
rosdep install --from-paths src --ignore-src -y
sudo ./src/mavros/mavros/scripts/install_geographiclib_datasets.sh
echo "source ~/mavros2_ws/install/setup.bash" >> ~/.bashrc # 这里的路径与 catkin build 得到的不同,值得注意!

配置 PX4

安装必要的依赖:

sudo apt install ros-foxy-eigen3-cmake-module # 安装 ros2 时已经安装过
sudo pip3 install -U empy pyros-genmsg setuptools

安装 Fast DDS

image-20210901214222350

安装 Java JDK 8

PX4 官方推荐安装 Java JDK 8。

image-20210901215259322

下载链接:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html

image-20210901215638985

安装过程参考了这篇博客:https://blog.csdn.net/zbj18314469395/article/details/86064849

# Java JDK 安装
sudo mkdir /usr/lib/jvm
sudo tar -zxvf jdk-8u301-linux-aarch64.tar.gz -C /usr/lib/jvm
gedit ~/.bashrc

image-20210901221603781

export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_301 # 这里要注意目录要换成自己解压的jdk 目录
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

image-20210901221712244

# 系统注册此 jdk
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_301/bin/java 300
# 查看 java 版本
java -version

image-20210901222007020

安装 Gradle(可跳过)

需要先安装 sdkman ,这是一个包管理器,用它可以方便地安装 Gradle 。

curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
sdk version # 检查版本,确保安装成功

image-20210901223012324

# 通过 sdkman 安装 gradle
sdk install gradle 7.2

我在使用 sdkman 时出现了如下问题:

image-20210901225009617

于是我老老实实从源码安装。

sudo mkdir -p /opt/gradle/ # 新建目录
sudo chmod 777 /opt/gradle/ # 赋予修改权限

image-20210901230412696

gedit ~/.bashrc # 添加环境变量
# 在文件最后添加如下代码:
export PATH=$PATH:/opt/gradle/gradle-7.2/bin

image-20210901230737084

gradle --version

image-20210901230858137

安装 Foonathan memory

git clone https://github.com/eProsima/foonathan_memory_vendor.git
cd foonathan_memory_vendor
mkdir build && cd build
cmake ..
sudo cmake --build . --target install

从源码安装 Fast-RTPS (DDS)

git clone --recursive https://github.com/eProsima/Fast-DDS.git -b v2.0.0 ~/FastDDS-2.0.0
cd ~/FastDDS-2.0.0
mkdir build && cd build
cmake -DTHIRDPARTY=ON -DSECURITY=ON ..
make -j$(nproc --all)
sudo make install

安装 Fast-RTPS-Gen

似乎官方提供的如下命令会自动下载 gradle 5.6.2 ,但是并没有添加到环境变量中。

# Fast RTPS Gen是Fast RTPS(DDS)IDL代码生成器工具。
# 它应该安装在Fast RTPS(DDS)之后,并确保Fast RTPSGEN应用程序在您的路径中。
# 您可以使用fastrtpsgen进行检查。
git clone --recursive https://github.com/eProsima/Fast-DDS-Gen.git -b v1.0.4 ~/Fast-RTPS-Gen \
    && cd ~/Fast-RTPS-Gen \
    && ./gradlew assemble \
    && sudo ./gradlew install

构建 ROS2 工作区

mkdir -p ~/px4_ros_com_ros2/src
git clone https://github.com/PX4/px4_ros_com.git ~/px4_ros_com_ros2/src/px4_ros_com
git clone https://github.com/PX4/px4_msgs.git ~/px4_ros_com_ros2/src/px4_msgs
cd ~/px4_ros_com_ros2/src/px4_ros_com/scripts
source build_ros2_workspace.bash

PX4 固件安装

这里安装的是 GitHub 主分支上的源码。

git clone https://github.com/PX4/PX4-Autopilot.git --recursive # 这是一个漫长的等待过程
bash ./PX4-Autopilot/Tools/setup/ubuntu.sh --no-nuttx --no-sim-tools # 脚本会自动安装 gazebo9 ,ros2 用的不是 gazebo9 ,所以这里添加参数,不安装仿真工具,安装 nuttx 也出错了,我暂时没有解决,所以也不安装

关于 nuttx 的安装错误,也许后面在该问题中会解决:https://github.com/PX4/PX4-Autopilot/issues/18180

sudo apt install gstreamer1.0-plugins-bad
sudo apt install gstreamer1.0-plugins-base
sudo apt install gstreamer1.0-plugins-good
sudo apt install gstreamer1.0-plugins-ugly
sudo apt install libeigen3-dev
sudo apt install libgstreamer-plugins-base1.0-dev
make px4_sitl gazebo

QQ20210902-005736