栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

ROS2 自学笔记:节点

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ROS2 自学笔记:节点

节点是执行具体任务的一个进程,是机器人的“细胞”,具有以下特点:
1 节点为独立的可执行文件
2 节点可以使用不同编程语言
3 节点可以分布式运行在不同主机
4 节点通过节点名称进行管理

节点的生命周期:
1 编程接口初始化
2 创建节点并初始化
3 实现节点功能
4 销毁节点并关闭接口

示例:hello world输出
面向过程版本:

import rclpy
from rclpy.node import Node
import time

def main(args=None):
	rclpy.init(args=args)
	node = Node("node_helloworld")

	while rclpy.ok():
		node.get_logger().info("Hello World")
		time.sleep(0.5)

	node.destroy_node()
	rclpy.shutdown()

程序说明:
1 from rclpy.node import Node
我们这个程序作为一个节点,因而要引入Node库
2 rclpy.init(args=args)
初始化python接口,所有程序在主方法里都要加这一行
3 node = Node(“node_helloworld”)
在引入Node库后,创建一个Node对象node,其中参数"node_helloworld"为该节点名称,在程序运行时通过node_helloworld来调用该节点
4 while rclpy.ok():
rclpy.ok()条件代表ROS2系统正常运行,因此在该程序里除非强制退出(如ctrl + C)会一直打印Hello World
5 node.get_logger().info(“Hello World”)
该方法在终端打印"Hello World"
6 node.destroy_node()
在打印完成后,删除该节点释放内存
7 rclpy.shutdown()
关闭python接口

对于python文件,还需要定义初始化文件:
(以下为setup部分)

entry_points={
	'console_scripts': [
		'node_helloworld	= learning_node.node_helloworld:main'
	]
},

在这里声明node_helloworld节点入口点在learning_node文件夹,node_helloworld文件,main函数下

利用面向对象实现hello world

import rclpy
from rclpy.node import Node
import time

class HelloWorldNode(Node):
	def __init__(self, name):
		super().__init__(name)
		while rclpy.ok():
			self.get_logger().info("Hello World")
			time.sleep(0.5)

def main(args=None):
	rclpy.init(args=args)
	node = HelloWorldNode("node_helloworld_class")
	node.destroy_node()
	rclpy.shutdown()

在这里,我们建立一个HelloWorldNode类作为节点对象node

1 def init(self, name):
super().init(name)
调用父类方法进行初始化

在setup文件里进行入口声明:

entry_points={
	'console_scripts': [
		'node_helloworld	= learning_node.node_helloworld:main',
		'node_helloworld_class = learning_node.node_helloworld_class:main'
	]
},

在对程序进行修改后一定要重新编译。因为ROS2读取的是install文件夹下面的程序而每次编译会把src下面的程序复制到install下,如果没有编译会导致运行的还是旧版程序

额外内容:
1 用colcon build编译时出现以下权限报错:

看报错信息是没有创建日志文件的权限,但是如果加上sudo 又会有其他报错内容。这里直接开root权限就可以解决
2 ROS2打开摄像头:
在设置里把USB设置改为USB3.1
在下方摄像头选项里找到摄像头

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/980144.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号