Docker内开发使用PX4-ROS2

一、前言

(一)版本信息

        操作系统:Ubuntu20.04

        PX4:v1.14

        ROS2:foxy

        镜像版本:latest

(二)参考文档

官网文档和知乎网友的经验分享

ROS 2 User Guide | PX4 User Guide

PX4 Docker Containers | PX4 User Guide

踩坑总结(4)——基于Docker的ROS2+PX4开发

https://zhuanlan.zhihu.com/p/520752548


(三)实现结果

px4_ros2_in_docker_0801


(四)预备知识

1、Docker基本操作指令、概念

2、ROS2基本概念、指令

3、PX4与ROS2架构(了解即可)

4、一个较为良好的网络环境,git指令正常运行,科学上网

这点很重要,不然过程中会出现千奇百怪的问题,大部分的原因是git clone 下载源码期间没有下载完全,导致出现缺少依赖的情况


二、步骤

(一)安装下载

1、Docker安装,及镜像下载

Docker相当于一个简单地虚拟机,之后的操作都在docker容器里进行,故先进行Docker的安装以及镜像的下载。

(1)Docker安装
安装:

推荐使用小鱼的一键安装,或者官方给的安装教程:

#小鱼的一键安装,跟随指引安装即可
wget http://fishros.com/install -O fishros && . fishros
#----------------------------------------------
#官网脚本教程
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh
测试:

可以使用简单的hello指令进行测试,命令为:

docker run hello-world
(2)镜像拉取
安装
docker pull px4io/px4-dev-ros2-foxy

这里选择的版本是ros2-foxy的版本,执行之后会进行下载。

没有网络问题的话即可下载完成。 

进入容器

最简单的是直接通过 run 命令进入,但是有许多后边需要设置的内容,可以先按照这个进入

# enable access to xhost from the container 
#上边这句话是官网给的注释,我不太懂
xhost +

# Run docker and open bash shell
#run里边的一些具体参数可暂时不管,需要用到的时候会讲
docker run -it --privileged \
--env=LOCAL_USER_ID="$(id -u)" \
-v /tmp/.X11-unix:/tmp/.X11-unix:ro \
-e DISPLAY=:0 \
--name=px4-ros px4io/px4-dev-ros2-foxy:latest bash

 至此完成Docker部分的安装下载,第一步较为简单,网络问题正常的话一般不会出错。

如果出现下载较慢的情况可以用科学上网的方法。

2、PX4源码下载

没有网络问题的话情况较为简单

mkdir src
cd src
git clone https://github.com/PX4/PX4-Autopilot.git
cd PX4-Autopilot

3、ROS2 示例代码下载

官网给了几个示例代码,方便测试使用下载如下

下载一个msg文件夹,一个ros_com文件夹,后续会用到

mkdir -p ~/ws_sensor_combined/src/
cd ~/ws_sensor_combined/src/
git clone https://github.com/PX4/px4_msgs.git
git clone https://github.com/PX4/px4_ros_com.git

(二)编译执行

使用指令进入到docker容器内部进行后续操作

dcoker exec -it px4_foxy bash

1、拷贝源文件

上述下载内容均为本地下载,没有传到docker容器里(采用这种方法的原因是因为在docker内部下载总是会出现各种各样的问题)

故需要通过指令将源文件拷贝到容器内。

docker cp 主机路径 容器id:目的容器内路径 

根据自己下载的路径实现即可。 

2、编译px4

这一步非常容易出现错误尽量跟着教程走。

注意以下步骤是在容器内部进行的

docker exec -it px4_foxy bash
cd /src/PX4-Autopilot/
make px4_sitl gazebo-classic

一般等待时间较久,出现问题的话建议重新下载PX4的源码重新进行编译,一般大家都是卡在这一步!! 

3、编译ros2

# 新开一个Terminal
docker exec -it px4_foxy bash

# 以下为docker内的bash操作
cd ~/ws_sensor_combined/src/

source /opt/ros/foxy/setup.bash
colcon build

一般这步问题不大。 

4、Micro XRCE-DDS 代理和客户端

要使 ROS 2 与 PX4 通信,uXRCE-DDS 客户端必须在 PX4 上运行,并连接到在配套计算机上运行的微型DDS代理。所以需要设置

git clone https://github.com/eProsima/Micro-XRCE-DDS-Agent.git
cd Micro-XRCE-DDS-Agent
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig /usr/local/lib/

编译完成之后即可打卡端口,用于连接到模拟器上运行的uXRCE-DDS客户端的设置启动代理

MicroXRCEAgent udp4 -p 8888

至此,源码都已经下载编译完成。之后进行测试。 

(三)测试实现

打开三个终端,进入容器内部。

终端一

进入PX4源码文件夹,进行编译

make px4_sitl gazbo-classic

编译正常则会出现gazebo界面

终端二

设置DDS代理服务

进入DDS源码文件夹,进行设置

MicroXRCEAgent udp4 -p 8888

终端三

进入ros文件夹,运行示例

ros2 launch px4_ros_com sensor_combined_listener.launch.py

三、结语

经过自己一个月的学习,对Docker、PX4、以及ROS 2有一点点自己的理解,但才疏学浅难免会出现各种错误,欢迎大家批评指正!

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值