目录
一、安装依赖
- 确保有一个支持UTF-8的locale设置。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
-
设置源
sudo apt update && sudo apt install curl gnupg2 lsb-release
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
sudo sh -c 'echo "deb [arch=amd64,arm64] http://packages.ros.org/ros2/ubuntu `lsb_release -cs` main" > /etc/apt/sources.list.d/ros2-latest.list'
-
安装相关的工具包和依赖
sudo apt update && sudo apt install -y \
build-essential \
cmake \
git \
python3-colcon-common-extensions \
python3-lark-parser \
python3-pip \
python-rosdep \
python3-vcstool \
wget
# install some pip packages needed for testing
python3 -m pip3 install -U \
argcomplete \
flake8 \
flake8-blind-except \
flake8-builtins \
flake8-class-newline \
flake8-comprehensions \
flake8-deprecated \
flake8-docstrings \
flake8-import-order \
flake8-quotes \
pytest-repeat \
pytest-rerunfailures \
pytest \
pytest-cov \
pytest-runner \
setuptools
注意:可以通过python3 -V查看python3链接的版本,如果是python3.9后续的编译可能会有问题
# install Fast-RTPS dependencies
sudo apt install --no-install-recommends -y \
libasio-dev \
libtinyxml2-dev
二、源码下载
-
创建工作空间并进行下载源码
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
wget https://raw.githubusercontent.com/ros2/ros2/dashing/ros2.repos
vcs import src < ros2.repos
-
用rosdep安装依赖项
sudo rosdep init
rosdep update
rosdep install --from-paths src --ignore-src --rosdistro dashing -y --skip-keys "console_bridge fastcdr fastrtps libopensplice67 libopensplice69 rti-connext-dds-5.3.1 urdfdom_headers"
- 编译
cd ~/ros2_ws/
colcon build --symlink-install
三、测试
运行talker-listener例子测试是否成功安装
-
新终端,执行以下命令:
. ~/ros2_ws/install/local_setup.bash
ros2 run demo_nodes_cpp talker
- 新终端,执行以下命令:
. ~/ros2_ws/install/local_setup.bash
ros2 run demo_nodes_cpp listener
四、Q&S
Q1:编译报错
ERROR:colcon:colcon build: Duplicate package names not supported:
原因:有删除vcstool import的情况下重复import了一次
解决:把src文件夹里面你从ros2的github下载的东西都删除,再做一次vcs import src < ros2.repos
Q2:rosdep update失败
原因: www.rawgithubusercontent.com被墙了,导致下载失败
解决:资源代理;网站https://ghproxy.com/支持github的资源代理,可以用此代理加速rosdep对Github的访问,进而解决rosdep update失败问题。
rep3.py
__init__.py
sources_list.py
五、源码结构
ROS2源码中的rcl和rclcpp
RCL和RCLCPP是ROS2中两个重要的库,分别对应于ROS中的roscpp和roslib。他们都是ROS2中重要的工具库。
RCL库是ROS2中的C语言实现,它提供了一组API来访问ROS2节点的底层实现;RCL的主要功能包括:节点管理、时钟管理、参数管理和发布与订阅管理。
RCLCPP库是ROS2中的C++实现,它基于RCL库,提供了易用的C++ API,方便开发者使用。RCLCPP的主要功能包括:
- 节点管理:创建、销毁节点,获取节点信息等;
- 时钟管理:获取系统时间、获取ROS时钟、修改时间等;
- 参数管理:获取、设置参数等;
- 发布与订阅管理:创建、销毁发布者和订阅者,发布消息、接受消息等;
- 服务管理:创建、销毁服务、调用服务等;
- 定时器管理:创建、销毁定时器,设置定时等。