欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > ros_note02

ros_note02

2025/4/19 14:24:45 来源:https://blog.csdn.net/qq_44348970/article/details/147238637  浏览:    关键词:ros_note02

note02

节点

ROS2中每一个节点只负责一个单独的模块化功能

如:一个节点负责控制车轮转动,一个节点负责从激光雷达获取数据,一个节点负责定位

通信方式:

  1. 话题:topic
  2. 服务:services
  3. 动作:Action
  4. 参数:parameters

节点相关的CLI(command-Line Interface)

  1. 列出所有节点:ros2 node list
  2. 查看节点的详细信息:ros2 node info <node_name>
  3. 列出所有Toic:ros2 topic list
  4. 运行节点:ros2 run <package_name> <executable_name>

工作空间

一个工作空间下有多个功能包,一个功能包可以有多个节点

ros2 run <功能包名字> <可执行文件>

工作空间:ROS2 工作空间是一个包含所有项目文件的目录结构,用于组织和管理ROS2项目

创建c++功能包:

ros2 pkg create my_cpp_package --build-type ament_cmake --dependencies rclcpp std_msgs
  1. --build-type: 指定构建类型,ament_cmake 用于C++,ament_python 用于Python
  2. --dependencies: 指定功能包的依赖项(如 rclcpprclpystd_msgs 等)

列出功能包可执行文件:

ros2 pkg executableseg:
ros2 pkg executables turtlesim

列出所有的包:

ros2 pkg list

编译功能包:

cd ~/ros2_ws
colcon build --packages-select my_robot_package

手动编译:

eg:

my_package/
├── CMakeLists.txt
├── package.xml
└── src/└── my_node.cpp

CMakeLists.txt 文件

cmake_minimum_required(VERSION 3.5)
project(my_package)find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(std_msgs REQUIRED)add_executable(my_node src/my_node.cpp)
ament_target_dependencies(my_node rclcpp std_msgs)install(TARGETSmy_nodeDESTINATION lib/${PROJECT_NAME})ament_package()

package.xml 文件

<package format="3"><name>my_package</name><version>0.0.0</version><description>A simple ROS2 package</description><maintainer email="user@todo.todo">user</maintainer><license>TODO</license><depend>rclcpp</depend><depend>std_msgs</depend>
</package>

my_node.cpp 文件

#include "rclcpp/rclcpp.hpp"int main(int argc, char *argv[]) {rclcpp::init(argc, argv);auto node = std::make_shared<rclcpp::Node>("my_node");RCLCPP_INFO(node->get_logger(), "Hello, ROS2!");rclcpp::spin(node);rclcpp::shutdown();return 0;
}

手动编译命令

# 创建工作空间
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src# 添加功能包
cp -r /path/to/my_package .# 安装依赖
sudo apt install ros-<ros2-distro>-rclcpp ros-<ros2-distro>-std-msgs# 配置环境
cd ~/ros2_ws
source /opt/ros/<ros2-distro>/setup.bash# 配置构建
mkdir -p build/my_package
cd build/my_package
cmake ../../src/my_package -DCMAKE_INSTALL_PREFIX=../../install/my_package# 编译
make# 安装
make install# 运行节点
source ../../install/my_package/setup.bash
ros2 run my_package my_node

colcon 是 ROS2 中用于构建和管理工作空间的工具,它自动化了许多编译和安装的步骤


域的概念来源于 ROS2 底层使用的 DDS(Data Distribution Service) 通信中间件

DDS中,不同逻辑网络共享物理网络的主义机制称为Domain_ID

  1. 同一域上的ROS2节点可以自由地相互发现并发送消息,不同域则不能
  2. ROS2节点默认使用域ID为0

端口、进程和ROS2节点:

  1. DDS参与者
    1. 每个 ROS2 节点在启动时,会创建一个 DDS 参与者
    2. 每个 DDS 参与者需要占用两个端口(一个用于单播,一个用于多播)
  2. 端口分配:
    1. 随着 ROS2 节点数量的增加,占用的端口数量也会增加
    2. 如果端口耗尽,新的节点将无法分配端口,导致通信失败
  3. 进程与端口
    1. 每个 ROS2 节点通常运行在一个独立的进程中
    2. 每个进程(即每个节点)需要占用两个端口

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词