ros2学习日志(01)—工作空间与节点
Published: Post views:一、ros2学习日志(01)—工作空间与节点
1.0 写在前面
作为一个搞机器人的,现在才学ros2,有点汗颜。。。看了很多教程,主要是[鱼香ros]: (http://fishros.com/#/fish_home)
和[古月居]: (https://www.guyuehome.com/),决定自己练习一番,顺便记录一下,以备后续查阅。
爱因斯坦说过:“无论如何,我都确信,上帝不会掷骰子。” 但是今天我们要在ros2中创建一个上帝,并让它掷骰子。
1.1 创建工作空间
首先创建一个工作空间(workspace),建立src
文件夹,cd
到src
下,输入下面的代码:
ros2 pkg create god --build-type ament_python --dependencies rclpy
-
代码解析:
-
ros2
表明是ros2的环境 -
pkg create
是ros2下的一个命令,意思是package create,即创建一个包(package) -
god
是创建的包(package)的名字 -
--build-type
是声明一个build type的参数,具体参数是ament_python
,意思是建立的包的类型是python包。 -
--dependencies
也是声明一个依赖的参数,具体参数是rclpy
,表明新建的包(package)依赖rclpy
这一个库- rcl的全称是ROS Client Library,ROS客户端库,提供了ROS话题、服务、参数、Action等接口
- rclpy是指rcl对应的python版本
-
“可以在终端用
ros2 pkg create -h
”来看可以声明哪些参数。如下图。
-
完成后的文件结构如图所示:
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() # 关闭客户端库,必备步骤
代码解析补充:
-
self.get_logger().info
中get_logger()
是定义在rclpy.node
中的一个方法,返回一个logger消息。
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!
1.4编译运行
cd到工作空间目录下,切记是工作空间,在本例中是ros2_ws下,进行编译,然后source,切记!!
colcon build
source install/setup.bash
然后运行:
ros2 run god god1
显示了一条INFO日志,GodNode初始化成功,说明我们成功运行了节点。
ros2 run
的使用说明:ros2 run package_name executable_name
- 注意:本例中包的名字是god,即god文件夹;executable_name是god1,是setup.py中”god1=god.god:main”,不是god.py的名字,切记!
至此,第一个节点成功运行。
Categories: 机器人技术
Comments