YAOTU INSIGHTS

ROS2机器人开发入门|第3课:ROS2核心概念:Node(节点)

ROS2机器人开发入门|第3课:ROS2核心概念:Node(节点)
1. 前言上一课我们介绍了ROS2的版本信息了解到Humble是过去几年和当前的主流版本存量项目比较大同时也了解到Jazzy是官方当前主推的版本在实际应用中行业里的新项目已采用Jazzy版本。可以预见Jazzy是今后几年主流的版本基于此后面的课程我们以Jazzy为基础进行讲解。2. ROS2五大核心概念ROS2系统由多个节点组成节点之间通过不同通信方式交换数据。2.1准备工作配置环境2.1.1执行Source命令目的是加载ROS2系统级别的环境变量source/opt/ros/jazzy/setup.bash2.1.2将source命令加到shell启动脚本可省去每次执行上面的SOURCE操作echosource /opt/ros/jazzy/setup.bash~/.bashrc2.1.3检查环境变量printenv|grep-iROS2.2Node 节点ROS 中的每个节点都应负责单一的模块化功能例如控制车轮电机或发布来自激光测距仪的传感器数据。一个节点本质上就是一个进程。每个节点都可以通过主题、服务、动作或参数与其他节点发送和接收数据。打个比方整个 ROS2 机器人系统像一个公司每个节点就是一个员工员工各司其职通过消息互相沟通而不是所有人挤在一个工位干活。上图中展示了3个节点之间发送和接收数据的方式,通过Service和Topic进行通信。一个完整的机器人系统由许多协同工作的节点组成。在 ROS 2 中一个可执行文件C 程序、Python 程序等可以包含一个或多个节点。2.2.1Node 相关命令ros2 run语法ros2 runpackage_nameexecutable_name[--ros-args 节点参数]我们以官方小海龟为例启动turtlesim 节点ros2 run turtlesim turtlesim_node这里软件包名称是turtlesim可执行文件名是turtlesim_noderos2 node list新打开一个终端查看节点列表ros2nodelist这里turtlesim就是节点名称查看节点信息语法ros2nodeinfonode_nameros2nodeinfo /turtlesimros2 node info返回订阅者、发布者、服务和操作的列表即与该节点交互的 ROS 图连接。节点重映射–ros-args --remap __node:new_node_name重映射 运行时 “改名字、改地址”不改源代码。相当于再“复制”一个具有相同属性的节点只是名字或所属空间不同而不用改源码。ros2 run turtlesim turtlesim_node --ros-args--remap__node:my_turtle–remap可以简写为-r即–remap-r-r __node:xxx 用来修改节点名称即上面的–remap __node:my_turtle还可以修改所属命令空间-r __ns:/xxx再次查看节点列表新打开一个终端重映射的用途如果不做重映射想要改节点名、改话题名你只能打开 cpp/python 代码、修改字符串、重新 colcon 编译remap 是启动时动态修改运行一次可以换一套名字。应用场景 1同一台机器同时启动多个相同节点比如机器人上有两个一模一样的雷达驱动节点驱动两个同型号激光雷达。驱动包是同一个 pkg、同一个可执行文件代码里节点名默认叫lidar_driver。直接启动第二个会报错节点重名。解决方案remap 修改节点名同时重映射话题# 雷达1ros2 run lidar_driver pkg_node --ros-args-r__node:lidar_left-r/scan:/scan_left# 雷达2ros2 run lidar_driver pkg_node --ros-args-r__node:lidar_right-r/scan:/scan_right应用场景 2多机器人集群多机、多车两台机器人 robot1、robot2硬件、软件包完全一样底盘驱动、IMU、导航包都是同一套。如果话题都是/cmd_vel、/odom两台机器人的消息会混在一起robot1 的速度指令会发给 robot2。解决方案使用命名空间重映射隔离# robot1底盘节点ros2 run chassis_driver driver_node --ros-args-r__ns:/robot1# robot2底盘节点ros2 run chassis_driver driver_node --ros-args-r__ns:/robot23.小结上面我们介绍了ROS2中节点的概念、基础命令行和一些应用场景这些是节点的最基础的知识点关于怎样创建节点我们在后面的课程中介绍。欢迎在欢迎在留言区发表意见。