ROS2学习笔记 - 1、编写运行第一个程序

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
  1. 让配置立即生效
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/                        # 最新编译日志的软链接
相关推荐
LinXunFeng11 小时前
Obsidian - 使用 Share Note 分享笔记并自部署
前端·笔记·github
通信小呆呆5 天前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
H__Rick5 天前
自动对焦学习-3
人工智能·学习·计算机视觉
Daisy Lee5 天前
量化学习-第1章-什么是量化金融
学习·金融·datawhale
Alsn865 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
YM52e5 天前
买菜计算器小应用 - HarmonyOS ArkUI 开发实战-PC版本
学习·华为·harmonyos·鸿蒙·鸿蒙系统
小雨下雨的雨5 天前
HarmonyOS ArkUI训练营入门-组件掌握系列-Animation 动画效果实现-PC版本
学习·华为·harmonyos·鸿蒙
闪闪发亮的小星星5 天前
高斯光以及高斯光公式解释
笔记
cqbzcsq5 天前
CellFlow虚拟细胞论文阅读
论文阅读·人工智能·笔记·学习·生物信息
YangYang9YangYan5 天前
2026初入职场学习数据分析的价值
学习·数据挖掘·数据分析