ROS2在ubuntu中的应用开发的一般过程和命令及安装
第一步:ROS2一键安装和VSCODE调试开发
1、感谢鱼香社区的工具,贡献特别大!根据ubuntu版本选择ROS2版本安装ROS2。同时安装VSCODE。
wget http://fishros.com/install -O fishros && . fishros
2、按照如下命令行方式打开VSCODE,方便调试
source install/setup.bash && code
第二步:使用工作空间(workspace)、包(package)和节点(node)管理
ROS2的项目
参考连接: https://www.yahboom.com/study/raspberry5 提取码:erwp
1、ROS2的项目文件树
ROS2工作空间的目录结构如下:
WorkSpace --- 自定义的工作空间。
|--- build:存储中间文件的目录,该目录下会为每一个功能包创建一个单独子目录。
|--- install:安装目录,该目录下会为每一个功能包创建一个单独子目录。
|--- log:日志目录,用于存储日志文件。
|--- src:用于存储功能包源码的目录。
|-- C++功能包
|-- package.xml:包信息,比如:包名、版本、作者、依赖项。
|-- CMakeLists.txt:配置编译规则,比如源文件、依赖项、目标文件。
|-- src:C++源文件目录。
|-- include:头文件目录。
|-- msg:消息接口文件目录。
|-- srv:服务接口文件目录。
|-- action:动作接口文件目录。
|-- Python功能包
|-- package.xml:包信息,比如:包名、版本、作者、依赖项。
|-- setup.py:与C++功能包的CMakeLists.txt类似。
|-- setup.cfg:功能包基本配置文件。
|-- resource:资源目录。
|-- test:存储测试相关文件。
|-- 功能包同名目录:Python源文件目录。
另外,无论是Python功能包还是C++功能包,都可以自定义一些配置文件相关的目录。
|-- C++或Python功能包
|-- launch:存储launch文件。
|-- rviz:存储rviz2配置相关文件。
|-- urdf:存储机器人建模文件。
|-- params:存储参数文件。
|-- world:存储仿真环境相关文件。
|-- map:存储导航所需地图文件。
|-- ......
上述这些目录也可以定义为其他名称,或者根据需要创建其他一些目录。
2、创建工作空间(workspace)的命令行
mkdir -p my_ws/src
cd my_ws
colcon build
3、创建功能包
命令行模板:
ros2 pkg create <package_name> --build-type <build-type> --dependencies <dependencies> --node-name <node-name>
创建C++功能包
ros2 pkg create pkg_helloworld_cpp --build-type ament_cmake --dependencies rclcpp --node-name helloworld
创建Python功能包
ros2 pkg create pkg_helloworld_py --build-type ament_python --dependencies rclpy --node-name helloworld
创建Python功能包 server intereface
ros2 pkg create pkg_interfaces --build-type ament_cmake --dependencies rosidl_default_generators sensor_msgs --license Apache-2.0
4、编译
在创建好的功能包中,我们可以继续完成代码的编写,之后需要编译和配置环境变量,才能正常运行:
cd ~/my_ws
# 编译环境ROS
source /opt/ros/foxy/setup.bash
# 编译工作空间所有功能包
colcon build
# 编译指定功能包(一个或多个)
colcon build --packages-select 功能包列表
#配置环境变量
source install/setup.bash
#清空历史以便于重新编译
rm -rf build install log
5、运行特定节点或查看通信接口定义的命令行
# 运行指定包内的指定节点
ros2 run pkg_helloworld_py helloworld
#查看通信接口定义
ros2 interface show pkg_interfaces/srv/Add
在 RDK3(基于 Ubuntu 20.04)上使用国内镜像源卸载并重新安装 ROS2 Foxy 的完整步骤:
步骤 1:卸载现有 ROS2 Foxy
# 1.1 停止所有 ROS 相关进程
ros2 daemon stop
# 1.2 移除所有 ROS2 Foxy 包
sudo apt remove ~nros-foxy-* && sudo apt autoremove
# 1.3 移除残留文件和配置
sudo rm -rf /opt/ros/foxy
rm -rf ~/.ros
rm -rf ~/.config/ros
sudo rm /etc/ros/rosdep/sources.list.d/20-default.list
# 1.4 清理环境变量
sed -i '/source \/opt\/ros\/foxy\/setup.bash/d' ~/.bashrc
sed -i '/ROS_DISTRO/d' ~/.bashrc
sed -i '/ROS_VERSION/d' ~/.bashrc
sed -i '/RMW_IMPLEMENTATION/d' ~/.bashrc
sed -i '/LD_LIBRARY_PATH/d' ~/.bashrc
sed -i '/PYTHONPATH/d' ~/.bashrc
# 1.5 更新环境
source ~/.bashrc
步骤 2:配置国内软件源
# 2.1 备份原有源列表
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 2.2 使用清华源替换(Ubuntu 20.04)
sudo sed -i 's@//.*archive.ubuntu.com@//mirrors.tuna.tsinghua.edu.cn@g' /etc/apt/sources.list
sudo sed -i 's@//.*security.ubuntu.com@//mirrors.tuna.tsinghua.edu.cn@g' /etc/apt/sources.list
# 2.3 更新系统
sudo apt update && sudo apt upgrade -y
sudo apt autoremove
步骤 3:使用国内镜像安装 ROS2 Foxy
# 3.1 安装基础依赖
sudo apt install -y \
curl \
gnupg2 \
lsb-release \
software-properties-common \
build-essential \
python3-pip \
python3-argcomplete
# 3.2 设置语言环境
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
# 3.3 添加国内 ROS2 镜像源(使用清华源)
sudo curl -sSL https://mirrors.tuna.tsinghua.edu.cn/rosdistro/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] https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
# 3.4 更新并安装 ROS2 Foxy
sudo apt update
sudo apt install -y ros-foxy-desktop python3-rosdep
步骤 4:配置 rosdep 使用国内源
# 4.1 配置 rosdep 使用清华源
export ROSDISTRO_INDEX_URL=https://mirrors.tuna.tsinghua.edu.cn/rosdistro/index-v4.yaml
sudo rosdep init --include-eol-distros
rosdep update
# 4.2 永久设置 rosdep 源
echo "export ROSDISTRO_INDEX_URL=https://mirrors.tuna.tsinghua.edu.cn/rosdistro/index-v4.yaml" >> ~/.bashrc
source ~/.bashrc
步骤 5:配置环境
# 5.1 添加环境变量
echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc
echo "export RMW_IMPLEMENTATION=rmw_fastrtps_cpp" >> ~/.bashrc
source ~/.bashrc
# 5.2 配置库路径
sudo sh -c 'echo "/opt/ros/foxy/lib" > /etc/ld.so.conf.d/ros-foxy.conf'
sudo ldconfig
# 5.3 创建必要的符号链接
sudo ln -sf /opt/ros/foxy/lib/librmw_fastrtps_cpp.so /usr/lib/
sudo ln -sf /opt/ros/foxy/lib/librclpy_common.so /usr/lib/
sudo ln -sf /opt/ros/foxy/lib/librcl.so /usr/lib/
sudo ldconfig
步骤 6:验证安装
# 6.1 测试核心功能
source /opt/ros/foxy/setup.bash
ros2 run demo_nodes_cpp talker
# 在另一个终端运行:
# ros2 run demo_nodes_cpp listener
# 6.2 检查版本
ros2 doctor --report
# 6.3 测试 Python 导入
python3 -c "import rclpy; print('rclpy version:', rclpy.__version__)"
步骤 7:重建工作区
# 7.1 创建工作区
mkdir -p ~/yahboomcar_ws/src
cd ~/yahboomcar_ws
# 7.2 设置国内 pip 源(可选)
mkdir -p ~/.pip
echo "[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn" > ~/.pip/pip.conf
# 7.3 安装依赖
source /opt/ros/foxy/setup.bash
rosdep install --from-paths src --ignore-src -y --skip-keys "fastcdr rti-connext-dds-6.0.1"
# 7.4 构建工作区
colcon build --symlink-install
# 7.5 运行你的节点
source install/setup.bash
ros2 run pkg_helloworld_py helloworld
国内镜像源参考列表
-
系统源:
-
清华:
https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ -
阿里云:
https://mirrors.aliyun.com/ubuntu/
-
-
ROS2 源:
-
清华:
https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu/ -
中科大:
https://mirrors.ustc.edu.cn/ros2/ubuntu/
-
-
rosdistro 源:
-
清华:
https://mirrors.tuna.tsinghua.edu.cn/rosdistro/ -
中科大:
https://mirrors.ustc.edu.cn/rosdistro/
-
-
pip 源:
-
清华:
https://pypi.tuna.tsinghua.edu.cn/simple -
阿里云:
https://mirrors.aliyun.com/pypi/simple/
-
常见问题解决方案
1. 如果安装速度慢:
# 使用 apt-fast 替代 apt
sudo add-apt-repository ppa:apt-fast/stable
sudo apt install apt-fast
sudo apt-fast install ros-foxy-desktop
2. 如果 rosdep 更新失败:
# 手动下载配置文件
sudo mkdir -p /etc/ros/rosdep/sources.list.d/
sudo curl -o /etc/ros/rosdep/sources.list.d/20-default.list https://mirrors.tuna.tsinghua.edu.cn/git/rosdistro/rosdep/raw/master/20-default.list
rosdep update
3. 如果构建工作区时依赖问题:
# 跳过有问题的依赖
rosdep install --from-paths src --ignore-src -y --skip-keys "KEY1 KEY2"
# 手动安装特定依赖
sudo apt install ros-foxy-PACKAGE_NAME
完整卸载脚本(使用国内源)
创建 clean_ros_foxy.sh:
#!/bin/bash
# 停止 ROS 进程
ros2 daemon stop > /dev/null 2>&1
# 卸载 ROS
sudo apt remove -y ~nros-foxy-*
sudo apt autoremove -y
# 清理文件
sudo rm -rf /opt/ros/foxy
rm -rf ~/.ros ~/.config/ros
sudo rm -f /etc/ros/rosdep/sources.list.d/20-default.list
sudo rm -f /etc/ld.so.conf.d/ros-foxy.conf
# 清理环境变量
sed -i '/ros/d' ~/.bashrc
sed -i '/RMW_IMPLEMENTATION/d' ~/.bashrc
sed -i '/LD_LIBRARY_PATH/d' ~/.bashrc
sed -i '/PYTHONPATH/d' ~/.bashrc
# 恢复国内源
sudo cp /etc/apt/sources.list.bak /etc/apt/sources.list
sudo apt update
echo "ROS Foxy 已完全卸载"
使用方式:
chmod +x clean_ros_foxy.sh
sudo ./clean_ros_foxy.sh
这些步骤使用了国内镜像源来加速下载和安装过程,特别适合在中国大陆地区的网络环境。如果在安装过程中遇到特定问题,可以根据错误信息调整对应的镜像源或安装参数。

浙公网安备 33010602011771号