本文参考官网:https://docs.px4.io/master/en/ros/ros2_comm.html

本文介绍了ROS2的应用程序通过Fast DDS中间件与PX4的仿真环境连接,有两种构型,一种是将ROS2安装在x86的Ubuntu机器上,Fast DDS以及仿真环境也安装在这台机器上,在同一台机器上,ROS2的应用程序通过Fast DDS中间件与PX4的仿真环境连接。第二种构型是将ROS2安装在Raspberry Pi 3B+的Ubuntu机器上,同时将Fast DDS中间件也安装在Raspberry Pi 3B+中,PX4的仿真环境则在一台x86机器上,在Raspbeery Pi上,OS2应用程序通过Fast DDS中间件与x86机器上的PX4的仿真环境连接。

对于第一种构型,我采用二进制的办法安装ROS2,本文没有介绍这种安装的具体步骤,可参考官网安装即可,基本没有出现问题。对于第二种构型,我采用源码级安装ROS2,本文介绍了具体的安装步骤。

注:本文没有介绍如何安装Fast DDS,在这里介绍。

版本说明:

x86 + ubuntu 20.04 server

raspberry pi 3B+ + ubuntu 20.04 server,32G

ROS2 foxy,2020发布

ROS2PX4集成,需要

  • 安装Fast DDS

  • 安装ROS2

  • 建立ROS2工作空间

  • 做一次安装检查(可选)

1.安装ROS2

可以安装二进制代码(参见),也可以安装源代码编译形成可执行程序(参见),在一般的x86 ubuntu机器上直接安装二进制的就可以了。在Raspberry Pi 3B+这种ARM机器上安装源码然后再编译形成可执行程序会消耗一些时间,源码安装的好处是所有ros2的东西都安装上了,尽管也许你并不需要那么多功能

把ROS2装在Raspberry Pi 3B+,花了10多个小时

  • 增加ROS2的apt资源

sudo apt update && sudo apt install curl gnupg2 lsb-release

其中:curl是从网上获取linux工具的软件,gnupg2是从网上获取资源通讯时的加密机制,lsb-release命令获取linux的版本等信息。

然后授权获取ros资源:

sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key  -o /usr/share/keyrings/ros-archive-keyring.gpg

把apt能够获取的ros资源列表增加到apt资源列表中:

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
  • 安装开发工具和ros工具:

sudo apt update && sudo apt install -y \build-essential \cmake \git \libbullet-dev \python3-colcon-common-extensions \python3-flake8 \python3-pip \python3-pytest-cov \python3-rosdep \python3-setuptools \python3-vcstool \wget
# install some pip packages needed for testing
python3 -m pip install -U \argcomplete \flake8-blind-except \flake8-builtins \flake8-class-newline \flake8-comprehensions \flake8-deprecated \flake8-docstrings \flake8-import-order \flake8-quotes \pytest-repeat \pytest-rerunfailures \pytest
# install Fast-RTPS dependencies
sudo apt install --no-install-recommends -y \libasio-dev \libtinyxml2-dev
# install Cyclone DDS dependencies
sudo apt install --no-install-recommends -y \libcunit1-dev
  • 获取ROS2源代码

建立一个工作空间然后下载所有资源源代码:

mkdir -p ~/ros2_foxy/src
cd ~/ros2_foxy
wget https://raw.githubusercontent.com/ros2/ros2/foxy/ros2.repos
vcs import src < ros2.repos

最后这条语句是要下载若干个项目的源代码,但是github.com根本连不上,或者下载速度极慢,所以需要把ros2.repos文件中的网址都换成快一点的网址即可,捡到一个还不错:hub.fastgit.xyz,不能保证不过期。

  • 用rosdep安装系统依赖资源

sudo rosdep init
rosdep update
rosdep install --from-paths src --ignore-src -y --skip-keys "fastcdr rti-connext-dds-5.3.1 urdfdom_headers"
  • 在工作空间中构建代码

cd ~/ros2_foxy/
colcon build --symlink-install

一共311个程序编译,这是安装过程最花时间的地方,其实也用不了那么多功能,编到最后实在编不动了,这小树梅派就停在那里,时间在计数,就是不前进了,记住停在哪里了,ctrl+c中断,就用touch COLCON IGNORE去掉了

system_tests/test_commnuication

rviz_default_plugin

然后重新执行上面语句,还好是增量编译,顺利,整个编译就完成了,花了10多个小时,当然如果是好一点的机器肯定会快。编译完,sd卡消耗掉10多个G。所以建议sd卡要32G以上。另外为你的ubuntu的swap文件留1G的空间,如果没有设置swap,可能编译不过去。

  • 建立环境

定位setup脚本

. ~/ros2_foxy/install/local_setup.bash
  • 运行例子程序“talker-listener”

打开一个终端:

. ~/ros2_foxy/install/local_setup.bash
ros2 run demo_nodes_cpp talker

打开另一个终端:

. ~/ros2_foxy/install/local_setup.bash
ros2 run demo_nodes_py listener

这个例子是要证明一个C++编写的程序发布消息,一个python语言编写的程序可以听到这个消息。

测试例子通过,没什么问题。

2.建立工作空间

注:本人x86笔记本ubuntu中用二进制的办法安装了ROS2, 以下建立工作空间与安装测试是在x86笔记本上进行。

先安装如下工具:

安装colcon编译工具

sudo apt install python3-colcon-common-extensions

安装C++矩阵运算库

sudo apt install ros-foxy-eigen3-cmake-module

注:二进制安装没有问题,源码级安装不需要这一步。

安装python依赖库

sudo pip3 install -U empy pyros-genmsg setuptools
sudo apt-get install python3-genmsg

建立工作空间所在目录

$mkdir -p ~/px4_ros_com_ros2/src

克隆ROS2PX4microRTPS Bridge源代码

$ 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

构建工作空间

工作空间包括microRTPS Bridge中间件,在PX41.13版本中,确认以下两个文件在内容上是一致的:

PX4-Autopilot/msg/tools/urtps_bridge_topics.yaml
px4_ros_com_ros2/src/px4_ros_com/templates/urtps_bridge_topics.yaml

注意:ROS2接受的是PascalCase格式的话题名。msg/tools/uorb_to_ros_urtps_topics.py程序可以将urtps_bridge_topics.yaml文件中对话题的下划线表示法转换成PascalCase表示法。PX4接受的是下划线表示法,ROS这边接受的是Pascal表示法,所谓PascalCase如例所示:sensor_combined转换成SensorCombined。

$ cd ~/px4_ros_com_ros2/src/px4_ros_com/scripts
$ source build_ros2_workspace.bash

注:如果是二进制安装的ROS2(我在x86笔记本上就是二进制ROS2安装), 执行source build_ros2_workspace.bash没有问题,但是如果ROS2是源码编译安装(我在Raspberry Pi上就是源码级ROS2安装),执行此语句会出错。

问题一由于ROS2在树梅派上是源码级安装,执行这个bash文件时出现如下提示:

- No ROS 2 distro installed or not installed in the default directory.

所以,在执行build_ros2_workspace.bash时需要加选项,由于在树梅派上安装的ros2是源码安装的,编译结果被安装在ros2_foxy/install目录中,这样需要执行下面语句:

$ source build_ros2_workspace.bash --ros_distro foxy --ros_path ~/ros2_foxy/install/setup.bash

其中:

选项--ros_distro指定ros2的版本,我安装的是foxy版本。

选项—ros_path是指定ros2的安装目录以及其中的setup.bash名字,我的ros2安装目录是~/ros2_foxy/install,加上setup.bash名字。

问题二这个bash在调用generate_microRTPS_bridge.py生成microRTPS_bridge相关源代码时,这个py程序用ros-foxy-fastrtps判断fastrtps的版本号。因为我的ros2是源码级安装,不需要安装ros-foxy-fastrtps这个软件包,由于找不到这个软件包这个py程序就蹦出来了,还好把错误写在~/px4_ros_com_ros2/build/px4_ros_com/micrortps_bridge.log中。这与官网上报告的错误一样build_ros2_workspace.bash failed #123。说明这个程序在这个地方是为ROS2二进制安装准备的,而没有测试过源码安装。

解决办法是,修改generate_fastrtps.py这个程序,直接对变量fastrtps_version赋值成2.1.1

语句 fastrtps_version = ‘2.1.1’。再运行这个构建过程,正常了。

3. 安装测试

注:由于PX41.121.13版本对yaml文件处理的方式稍有变化,带来了不兼容。目前下载的ROS2 foxyPX4 1.13是可以匹配的,但是ROS2 foxyPX4 1.12不匹配.

3.1 启动gazebo仿真环境

$ make px4_sitl_rtps gazebo

gazebo仿真环境启动后自动启动了micrortps_client,等待连接的micrortps_agent缺省地设置为本机:127.0.0.1。如果micrortps_agent是在一个有wifi连接的树梅派上运行,那么连接这个agent则需要指定这个树梅派的ip地址,假设地址是192.168.3.18。需要重新启动micrortps_client,如下:

先停止

pxh> micrortps_client stop
再启动
pxh> micrortps_client start -t UDP -i 192.168.3.18

3.2 启动microRTPS代理

$ source ~/px4_ros_com_ros2/install/setup.bash
$ micrortps_agent -t UDP

micrortps_agent如果运行在树梅派上,树梅派又与你的宿主机之间有wifi连接,那么可以试一下在宿主机中运行PX4的软件仿真,让micrortps_agent与仿真环境下的micrortps_client连接,不过需要在运行micrortps_client时指定树梅派的ip地址。如:3.1节所述。

3.3. 启动接收sensor_combined话题数据的应用程序

$ source ~/px4_ros_com_ros2/install/setup.bash
$ ros2 launch px4_ros_com sensor_combined_listener.launch.py

如果成功,则ROS2就装好了。

为PX4建立ROS2环境,x86与树梅派相关推荐

  1. 【基于mini2440开发板的交叉编译环境及内核树配置.

    在学习linux驱动开发过程中,交叉编译环境的配置及内核树的生成无疑是对linux不是十分了解的新人面前的一堵墙.高高大大的墙... 笔者在初探这一方向时,就在这2个问题上苦恼了很久.查阅无数资料,大 ...

  2. SharePoint 2010在WIN7系统下建立开发环境

    SharePoint 2010在WIN7系统下建立开发环境 (MSDN上有比较详细的介绍,地址:http://msdn.microsoft.com/en-us/library/ee554869%28o ...

  3. Fedora9建立交叉编译环境

    如下图所示,建立交叉编译环境 PATH=$PATH: /opt/FriendlyARM/toolschain/4.5.1 /bin 注意 :冒号后面不能有空格 参考文档:友善之臂--Tiny6410 ...

  4. AR502H-CN开发笔记18:快速建立开发环境

    本系列文章将向大家讲述华为网关AR502H的开发方法. 本文介绍快速建立开发环境的方法. 1.安装VirtualBox. 2.安装ubuntu-16.04.6,离线安装.内存4GB,硬盘50G. 3. ...

  5. Modelsim SE-64 10.4建立UVM环境

    Modelsim建立UVM环境 在Modelsim SE-64 10.4 中建立UVM环境,使用的UVM是UVM1.1d 如果安装的是Modelsim SE-64 10.4版本的话,UVM的库已经给编 ...

  6. 简单快速建立pytorch环境YOLOv5目标检测 模型跑起来(超简单)

    简单快速建立pytorch环境+实现YOLOv5目标检测 模型跑起来(超简单) 一.下载yolov5模型代码: yolo代码 提取码:2022 下载后解压 二.简单快速创建pytorch环境: 1.条 ...

  7. 建立图书馆目录索引的树型目录,并显示书籍的相关信息

    建立图书馆目录索引的树型目录,并显示书籍的相关信息 编写主类,创建目录窗口 public class Example9_21{public static void main(String args[] ...

  8. linux内核优盘配置,mini2440建立交叉编译环境+配置linux内核

    mini2440建立交叉编译环境+配置linux内核 来源:IT165收集  发布日期:2014-09-22 20:37:16 (mini2440)建立交叉编译环境+配置linux内核 系统ubunt ...

  9. 编译mini linux,Ubuntu 下 Mini2440 建立交叉编译环境

    在 Ubuntu 下 Mini2440 建立交叉编译环境 mini2440光盘中提供了三个版本的arm-linux-gcc,它们的作用分别是: 3.4.1:用于编译内核 3.3.2:用于编译Qutop ...

最新文章

  1. 非香农类信息不等式_ICLR2020|北大图灵班本科生满分论文:计算约束下有用信息的信息论...
  2. java for loop_Java for循环执行了两次
  3. 《VMware Virtual SAN权威指南(原书第2版)》一1.5 什么是Virtual SAN
  4. 关于公司没有公网IP也没有动态IP,如何远程办公呢?
  5. Pycharm选择pyenv安装的Python版本
  6. mysql 根据总分排名
  7. vue 双向数据绑定
  8. oppoa1计算机记录删了怎么办,捡到oppoA1怎么解锁
  9. java走梅花桩_PGIS周中赛:梅花桩4队混战 PERO17杀饮恨 STK拿下本局
  10. 小刘同学的第一百二十二篇博文
  11. python超清壁纸_python爬虫 爬取超清壁纸代码实例
  12. 台式电脑里计算机里找不到驱动器,教大家为什么计算机找不到d驱动器和解决方案...
  13. python中的iter函数_如何使用python中iter函数?
  14. HuaWei ❀ IP源防护概述
  15. 论文投稿指南——中文核心期刊推荐(计算机技术)
  16. pcre_exec()详解
  17. win7更改文件夹背景图片和文件夹背景色
  18. Leetcode-D21-动态规划(二刷)-55. 跳跃游戏45. 跳跃游戏 II
  19. 论文:TransVG: End-to-End Visual Grounding with Transformers
  20. 【无标题】科普:万一免五是什么意思?万一免5的券商优势?股票ETF可转债

热门文章

  1. 学习爬虫之Scrapy框架学习(六)--1.直接使用scrapy;使用scrapy管道;使用scrapy的媒体管道类进行猫咪图片存储。媒体管道类学习。自建媒体管道类存储图片
  2. RGB转HSL、HSI
  3. 非单位时间的任务安排问题
  4. 怎么批量删除多个文件中的图片?
  5. Web前端学习笔记——HTML基础
  6. Hyperledger indy MacOS indy-node环境搭建(VirtualBox 版本)
  7. vlanif虚拟网关
  8. 解决:A SOAP 1.2 message is not valid when sent to a SOAP 1.1 only endpoint.
  9. 电源电路设计:详解线性电源和开关电源
  10. 静态时序分析 第二章 基础知识