目录
PX4在V1.14及后续版本中,将原本ROS2与PX4通讯的中间件micrortps模块删除了,优化成了MicroDDS模块。MicroDDS的使用相比之前也简化了许多。
本文在jetson nano板子上部署了Ubuntu20.04,并安装了ROS2,测试和Pixhawk4 mini之间的通讯。
Jetson Nano安装Ubuntu20.04
镜像用的是在github上找到的:https://github.com/Qengineering/Jetson-Nano-Ubuntu-20-image。
他上传了Ubuntu 20.04 带有 OpenCV, TensorFlow and Pytorch的镜像,但是我使用的时候配置环境报错。于是推荐用他上传的空白的Ubuntu20.04 Bare image镜像。
将内存卡用读卡器插入电脑,用balenaEtcher选择下载好的镜像,选择对应的内存卡烧写。完成后将内存卡插入jetson nano中就可以运行系统了。
(如果是之前烧写过系统的内存卡,可以用SDFormatter格式化清空后再烧入)
Ubuntu20.04 配置ROS2环境
基本步骤和之前写的教程Ubuntu20.04安装ROS2+ROS2-PX4框架搭建差不多。但是由于这个教程中也安装了PX4的开发环境,有些python的项在配置PX4环境的时候已经配置了。但是在jetson nano中,不需要配置PX4环境(配置了也会报错),所以需要额外单独安装一些python和colcon的依赖项。
Set locale
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
Setup Sources
sudo apt update
sudo apt install curl gnupg2 lsb-release
curl http://repo.ros2.org/repos.key | sudo apt-key add -
sudo sh -c 'echo "deb http://packages.ros.org/ros2/ubuntu `lsb_release -cs` main" > /etc/apt/sources.list.d/ros2-latest.list'
Install ROS2 package
sudo apt update
sudo apt install ros-foxy-desktop
Environment setup
用脚本设置:
source /opt/ros/foxy/setup.bash
但是这样每次打开新终端都得配置一下,如果不想每次打开新终端都输入一遍上述语句,可以这样设置,让终端自动配置好环境:
echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc
source ~/.bashrc
安装colcon
sudo apt install python3-colcon-common-extensions
Build ROS 2 Workspace
默认的ROS2工作区建立在home目录下,当然这个可以根据需求更改
- 打开终端,建立一个新的工作区
mkdir -p ~/ws_ros/src/
cd ~/ws_ros/src/
- 下载例程和px4_msgs
git clone https://github.com/PX4/px4_msgs.git
git clone https://github.com/PX4/px4_ros_com.git
- 配置ros2 foxy的环境,并用colcon编译工作区
cd ..
source /opt/ros/foxy/setup.bash
colcon build
Pixhawk配置
这里其实需要配置的东西很少,注意以下几步
- 在另外一台自己的笔记本电脑上,下载PX4源码,注意要在v1.14版本之后的PX4源码。现在直接在终端运行
git clone https://github.com/PX4/PX4-Autopilot.git --recursive(需要科学上网)
下载得到的就是最新版本的源码。
(上述步骤也可以分步:
git clone GitHub - PX4/PX4-Autopilot: PX4 Autopilot Software
cd PX4-Autopilot/
git submodule update --init --recursive
make生成对应pixhawk硬件的固件版本烧写到pixhawk中。MicroDDS-Client是自动默认配置在所有的固件版本中的(只要你的源码版本在1.14后),所以直接make对应的固件版本就可以。比如我使用的Pixhawk4 mini,就是如下命令
make px4_fmu_v5 upload
-
在QGC地面站中,设置运行client的串口,将UXRCE_DDS_CFG设置为pixhawk与机载计算机连接的口(如我这里用的是TELEM1口,就设定为TELEM1)。管口的定义可以在PX4官方用户手册对应的飞控板介绍页找到。
修改对应接口的波特率,我这里使用的是TELEM1,对应的参数就是SER_TEL1_BAUD,TELEM1的波特率默认是57600。(如果是TELEM2,同理用的参数就是SER_TEL2_BAUD)。这个波特率要记住,之后和机载计算机的通讯需要设置正确波特率,否则无法通讯。
-
将Mavlink端口Disable(设置为0)。这里需要让你之前设定为UXRCE_DDS_CFG的串口不配置为MAVLINK的端口,比如我前面用了TELEM1,这里就不能再设置TELEM1作为MAVLINK端口。
Jetson Nano上MicroDDS-Agent配置及和pixhawk通讯
将飞控对应口连接到Jetson nano上
通过
ls /dev
命令可以看到多出来了哪个串口,对应的就是飞控。我这里多出来的是ttyUSB0这个口。于是运行命令启动Agent:
MicroXRCEAgent serial -D /dev/ttyUSB0 -b 57600
-b后面接的是对应波特率,就是之前设置的波特率。这个波特率一定要和飞控上对应接口的波特率一样。和飞控连接上了就能看到一连串的信息:
也可以进入ros2的工作区目录下,运行官方的例程。例如查看传感器信息:
source install/setup.bash
ros2 run px4_ros_com sensor_combined_listener
效果与仿真效果是一致的