编写python节点
提前需知
OOP是面向对象
POP是面向过程
大家可以去搜索一下,我感觉我讲不清楚(卑微)
准备阶段
准备阶段就是之前的文章写的那些内容,工作空间和功能包是已经创建好的,接下来就是进入vscode的编写阶段了,在这之前,我们先来验证一下前面的内容你是否学完了吧!
各位的tree树是不是跟我的一样呢?我印象中tree好像是要下载的,如果你的报错了,就去百度下载一下吧!对了,vscode也要自己安装调试好,这些都是我上学期搞好的,没有记录。不过,学习还是要有一些痛苦的嘛,自己努力了哦!
在终端中输入:code .
.代表当前层路径,…代表上一层路径,这样就直接进入vscode了!
正式开始
python文件书写
POP
接下来,在我们之前创建的robot_a的功能包里面开始编写我们的节点代码,先创建一个python文件,我们的代码是在里面写的,我这里创建的是pop_move.py(先实现移动的功能哦~)
1.先要导入我们需要的库,rclpy(客户端python的依赖库)和Node(从那个客户端里面的节点导入一个节点类)
import rclpy
from rclpy.node import Node
这个Node是一个类哦!学python的应该都懂吧!
2.再创建一个main函数,叫其他的应该也没什么问题:
def main(args=None):
我解释一下args是参数的意思,这里不需要传入参数,所以写None就可以
3.初始化客户端:
rclpy.init(args=args)
init应该很熟悉吧!初始化,将参数传入
4.创建节点:
move_pop_node=Node(‘pop_move’)
这里是创建一个Node类,move_pop_node是我们通过库里面的类创建的一个我们自己的节点类,而这个类需要我们传入一个参数表示这个节点的名字,所以这里我们创建了一个名为pop_move的move_pop_node节点
5.为了证明我的节点启动了,在这里添加一句话,节点启动就会提示你:
move_pop_node.get_logger().info(‘移动中’)
这是从节点中获取它的日志,然后输入一句话,‘移动中’。log不知道大家熟不熟悉,反正我最近在搞yolo的时候报错了,查到了这个日志,日志的后缀是log,当然,我还是不熟悉。
6.回旋你的节点:
rclpy.spin(move_pop_node)
大概是为了不让节点开启之后一下子就过去吧?(猜测)
7.关闭节点:
rclpy.shutdown()
完整代码如下:
import rclpy
from rclpy.node import Node
def main(args=None):
rclpy.init(args=args)
move_pop_node=Node(‘pop_move’)
move_pop_node.get_logger().info(‘移动中’)
rclpy.spin(move_pop_node)
rclpy.shutdown()
记得ctrl+s保存!!
OOP
前面一样,只是要创建自己的类:
class WriterNode(Node):
def init(self, name): #初始化名字
super().init(name) #将名字传入父类初始化
self.get_logger().info(‘移动中’)
再直接用自己创建的子类创建节点:
move_oop_node=WriterNode(‘oop_move’)
完整代码:
import rclpy
from rclpy.node import Node
class WriterNode(Node):
def init(self, name):
super().init(name)
self.get_logger().info(‘移动中’)
def main(args=None):
rclpy.init(args=args)
move_oop_node=WriterNode(‘oop_move’)
rclpy.spin(move_oop_node)
rclpy.shutdown()
告诉电脑节点在哪里
我们的节点就写完了,接下来,就是告诉电脑,你写的节点在哪里,进入setup.py文件,这里就记录了很多连接文件位置,在最后的’console_scripts’的[]里面写上你的节点位置。
‘[node ]=.<python文件>:<函数>’
解读一下就是节点在功能包下的文件的函数里面。
记得ctrl+s保存!!
编译代码(前面发生了修改,这里图片可能对应不上,但都是这么编译的)
用我们的colcon编译,过程跟之前一样,只是一定要注意要在工作空间下编译,这样生成的三个文件才跟src在一个目录下面。
然后,我们可以试着运行一下节点
最后再分一个终端,查看一下这个节点的信息
补充
如果你使用了什么包,需要在xml文件里面添加
结束!