1、ROS2开发环境准备
下面基于本地已经安装有Ubuntu虚拟机为前提、Ubutun安装教程
1.1、 安装必要工具
c
sudo apt update && sudo apt install curl gnupg lsb-release -y
1.2、添加 ROS 2 GPG 密钥
c
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
1.3、 创建独立的 ROS 2 源配置文件(使用阿里云镜像)
c
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] \
https://mirrors.aliyun.com/ros2/ubuntu noble main" | \
sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
配置好后、可以查看效果如下:

1.4、安装ROS 2
对于 Ubuntu 24.04,官方推荐的 ROS 2 版本是 Jazzy(2024年发布的 LTS 版本)
更新软件源
c
sudo apt update
安装 ROS 2 Jazzy 桌面完整版(推荐)
c
sudo apt install ros-jazzy-desktop -y
1.5、 配置环境变量
将ROS2的环境设置命令写入配置文件
c
echo source /opt/ros/jazzy/setup.bash >> ~/.bashrc
- 让配置立即生效
c
source ~/.bashrc
1.6、验证小乌龟是否可以正常运行
c
ros2 run turtlesim turtlesim_node

1.7、安装 Ubuntu 24.04 兼容的 Mesa 驱动
c
sudo apt install -y mesa-utils \
libgl1-mesa-dri \
libglapi-mesa \
libgles2 \
libegl1-mesa-dev
2、编写第一个 ROS2 程序
2.1、创建工作目录
c
mkdir ros2_workspace
2.2、在工作目录下创建功能包
创建 C++ 功能包
c
ros2 pkg create c_package --build-type ament_cmake --license Apache-2.0 --dependencies rclcpp std_msgs
运行结果如下:

创建 Python 功能包
c
ros2 pkg create python_package --build-type ament_python --license Apache-2.0 --dependencies rclpy std_msgs
运行结果如下:

2.3、规范化目录
为了使用官方推荐的编译工具 colcon 需要把目录再规范一下、搞成下图的样子:

先创建 src 目录,再移动进去
c
mkdir -p ~/ros2_workspace/src
mv ~/ros2_workspace/c_package ~/ros2_workspace/src/
mv ~/ros2_workspace/python_package ~/ros2_workspace/src/
2.4、第一个C++程序
在~/ros2_workspace/src/c_package/src/下创建第一个C++程序源文件: test.cpp 内容如下:
c
#include "rclcpp/rclcpp.hpp"
int main(int argc, char **argv)
{
rclcpp::init(argc, argv);
auto node = std::make_shared<rclcpp::Node>("cpp_node");
RCLCPP_INFO(node->get_logger(),"hello cpp node!");
rclcpp::spin(node);
rclcpp::shutdown();
return 0;
}
编辑 CMakeLists.txt
c
nano ~/ros2_workspace/src/c_package/CMakeLists.txt
添加如下信息至文件:
c
# ============================================
# 添加可执行文件(关键!)
# ============================================
add_executable(test_node src/test.cpp)
ament_target_dependencies(test_node rclcpp std_msgs)
# ============================================
# 安装可执行文件(关键!)
# ============================================
install(TARGETS
test_node
DESTINATION lib/${PROJECT_NAME}
)
修改后的效果如下:

要对程序进行编译、安装一个 colcon 的工具
c
sudo apt update
sudo apt install python3-colcon-common-extensions
安装成功后、切换至 ~/ros2_workspace 目录、编译第一个程序:
c
colcon build --packages-select c_package --event-handlers console_direct+
编译结果如下:

运行已经编译好的第一个程序:
加载环境
c
source ~/ros2_workspace/install/setup.bash
运行节点
c
ros2 run c_package test_node

🎉 成功了! ROS 2 C++ 节点已经正常运行了!
2.5、第一个python程序
在~/ros2_workspace/src/python_package/python_package/下创建第一个python程序源文件: test.py 目录结构如下:

编辑 test.py 内容如下:
c
import rclpy
from rclpy.node import Node
def main():
rclpy.init()
node = Node("python_node")
node.get_logger().info('Hello python node [info]')
node.get_logger().warn('Hello python node [WARN]')
rclpy.spin(node)
rclpy.shutdown()
编辑 ~/ros2_workspace/src/python_package/setup.py 为程序填加入口
c
entry_points={
'console_scripts': [
'test_node = python_package.test:main',
],
},
接下来就可以编译了:
c
colcon build --packages-select python_package --symlink-install
加载环境、运行
c
source ~/ros2_workspace/install/setup.bash
ros2 run python_package test_node
运行效果如下图:

2.6、完整目录结构
*** 编译后的完整的目录参考结构如下 ***
c
~/ros2_workspace/ # 工作空间根目录
│
├── 📂 src/ # 【源代码目录】所有功能包都在这里
│ │
│ ├── 📂 c_package/ # C++ 功能包
│ │ ├── 📄 CMakeLists.txt # CMake 构建配置
│ │ ├── 📄 package.xml # 包元信息(依赖、版本等)
│ │ │
│ │ ├── 📂 src/ # C++ 源文件目录
│ │ │ └── 📄 test.cpp # 在此处创建的第一个程序源文件
│ │ │
│ │ ├── 📂 include/ # 头文件目录(可选)
│ │ │ └── 📂 c_package/
│ │ │
│ │ └── 📂 launch/ # 启动文件目录(可选)
│ │ └── 📄 my_launch.py
│ │
│ └── 📂 python_package/ # Python 功能包
│ ├── 📄 setup.py # Python 包安装配置
│ ├── 📄 setup.cfg # 附加配置
│ ├── 📄 package.xml # 包元信息
│ │
│ ├── 📂 python_package/ # Python 模块目录(与包同名)
│ │ ├── 📄 __init__.py # Python 包标识
│ │ └── 📄 my_first_node.py # 你的 Python 节点代码
│ │
│ ├── 📂 resource/ # 资源文件
│ │ └── 📄 python_package
│ │
│ ├── 📂 launch/ # 启动文件(可选)
│ │ └── 📄 my_launch.py
│ │
│ ├── 📂 test/ # 测试文件
│ │ ├── 📄 test_copyright.py
│ │ ├── 📄 test_flake8.py
│ │ └── 📄 test_pep257.py
│ │
│ └── 📂 config/ # 配置文件(可选)
│ └── 📄 params.yaml
│
├── 📂 build/ # 【编译目录】colcon 自动生成
│ ├── 📂 c_package/ # C++ 包的编译中间文件
│ ├── 📂 python_package/ # Python 包的编译中间文件
│ └── 📄 ... # 其他编译产物
│
├── 📂 install/ # 【安装目录】colcon 自动生成
│ ├── 📂 c_package/ # C++ 包安装后的文件
│ │ ├── 📂 lib/
│ │ ├── 📂 share/
│ │ └── 📄 setup.bash # 环境变量脚本
│ │
│ ├── 📂 python_package/ # Python 包安装后的文件
│ │ ├── 📂 lib/
│ │ ├── 📂 share/
│ │ └── 📄 setup.bash
│ │
│ ├── 📄 setup.bash # 总环境变量脚本(source 这个)
│ ├── 📄 setup.sh
│ └── 📄 ...
│
└── 📂 log/ # 【日志目录】colcon 自动生成
├── 📄 build_2024-01-01_12-00-00.log
├── 📄 ...
└── 📂 latest/ # 最新编译日志的软链接