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/                        # 最新编译日志的软链接
相关推荐
lizhihai_9918 小时前
股市学习心得-AI算力20大硬件四金刚
学习
卖芒果的潇洒农民18 小时前
【0417】学习路线
学习
xzal1218 小时前
python中,turtle基础知识笔记1
笔记·python·turtle
han_hanker19 小时前
RequestAttributes , ServletRequestAttributes学习
学习
weixin_5134499619 小时前
PCA、SVD 、 ICP 、kd-tree算法的简单整理总结
c++·人工智能·学习·算法·机器人
鱼鳞_20 小时前
Java学习笔记_Day29(异常)
java·笔记·学习
嵌入式小企鹅20 小时前
DeepSeek-V4昇腾首发、国芯抗量子MCU突破、AI编程Agent抢班夺权
人工智能·学习·ai·程序员·算力·risc-v
Amazing_Cacao21 小时前
CFCA精品可可产区认证课程风土解析(亚洲):撕开标签伪装,将微气候差异转化为可用变量
学习
我的xiaodoujiao21 小时前
API 接口自动化测试详细图文教程学习系列11--Requests模块3--测试练习
开发语言·python·学习·测试工具·pytest
九成宫21 小时前
IT项目管理期末复习——Chapter 8 项目质量管理
笔记·项目管理·软件工程