ros2学习日志(01)—工作空间与节点

Published: less than 1 minute read, with 108 words. Post views:

一、ros2学习日志(01)—工作空间与节点


1.0 写在前面

作为一个搞机器人的,现在才学ros2,有点汗颜。。。看了很多教程,主要是[鱼香ros]: (http://fishros.com/#/fish_home)

和[古月居]: (https://www.guyuehome.com/),决定自己练习一番,顺便记录一下,以备后续查阅

爱因斯坦说过:“无论如何,我都确信,上帝不会掷骰子。” 但是今天我们要在ros2中创建一个上帝,并让它掷骰子。

1.1 创建工作空间

首先创建一个工作空间(workspace),建立src文件夹,cdsrc下,输入下面的代码:

ros2 pkg create god --build-type ament_python --dependencies rclpy
  • 代码解析

    1. ros2表明是ros2的环境

    2. pkg create是ros2下的一个命令,意思是package create,即创建一个包(package)

    3. god是创建的包(package)的名字

    4. --build-type是声明一个build type的参数,具体参数是ament_python,意思是建立的包的类型是python包。

    5. --dependencies也是声明一个依赖的参数,具体参数是rclpy,表明新建的包(package)依赖rclpy这一个库

      • rcl的全称是ROS Client Library,ROS客户端库,提供了ROS话题、服务、参数、Action等接口
      • rclpy是指rcl对应的python版本
    6. “可以在终端用ros2 pkg create -h”来看可以声明哪些参数。如下图。

      image-20220406112606295

完成后的文件结构如图所示:

image-20220406113016766

1.2 创建一个God节点

在src/god路径下,新建一个god.py文件,写入如下代码:

import rclpy #导入ros的客户端库,必备步骤
from rclpy.node import Node #rclpy.node是ros客户端库自带的Node类,用于创建节点

class GodNode(Node):  #采用面向对象(OOP)的方式建立node; 定义了一个GodNode的类,继承rclpy.node中的Node;
    def __init__(self,name):  #定义初始化方法;或者叫构造函数。。(构造函数是个人的理解,源自C++)
        super().__init__(name) #调用父类初始化,需要传入参数name,通常name是实例化的Node的名称,即节点名字;比如本例子中节点名字是 God
        self.get_logger().info("GodNode初始化成功!")  #get_logger().info是rclpy.node中的方法;
                                                              #在这里意思是,当这个GodNode节点实例化的时候,输出一句日志;
 
def main(args=None):  #main函数,程序执行的主入口
    rclpy.init(args=args)  # 初始化客户端库,必备步骤
    node=GodNode("God")  # 新建节点对象,必备步骤;传入God,将GodNode实例化
    rclpy.spin(node)   # spin循环节点,保持节点运行,检测是否收到退出指令(Ctrl+C),必备步骤
    rclpy.shutdown()  # 关闭客户端库,必备步骤

代码解析补充:

  1. self.get_logger().infoget_logger()是定义在rclpy.node中的一个方法,返回一个logger消息。

    image-20220406133151139

1.3 设置setup.py

新建一个节点后,需要在setup.py中告诉程序这个节点(Node)的入口。在setup.py最后,entry_point里面添加如下语句:

"god1=god.god:main" # 第一个god是文件夹的名称,第二个god是god.py文件的名字,后面的main是指入口为main函数

god1是指executable_name的名字!即下面ros2 run package_name executable_name中的executable_name!

image-20220406143337163

1.4编译运行

cd到工作空间目录下,切记是工作空间,在本例中是ros2_ws下,进行编译,然后source,切记!!

colcon build
source install/setup.bash   

然后运行:

ros2 run god god1

显示了一条INFO日志,GodNode初始化成功,说明我们成功运行了节点。

image-20220406143507808

  • ros2 run的使用说明:ros2 run package_name executable_name
  • 注意:本例中包的名字是god,即god文件夹;executable_name是god1,是setup.py中”god1=god.god:main”,不是god.py的名字,切记!

image-20220406142626422

至此,第一个节点成功运行。


Tags: ,

Categories:

Comments