ROS2 创建python包

1、创建python包
ros2 pkg create --build-type ament_python 'demo' --dependencies rclpy

以上指令为创建一个名为demo的python功能包。

2、创建可执行文件

demo/demo路径下新建demo.py文件。

3、引用可执行文件

setup.py文件的最下放的entry_points属性,引入可执行文件:

entry_points={
	'console_scripts': [
		'demo = demo.demo:main'   #change
	],
},
4、引用msgs

一般来说,在主文件demo.py的开始引用即可,比如

from nav_msgs.msg import Odometry

如果报错,没有找到该msgs,则到package.xml文件中,添加

<exec_depend>nav_msgs</exec_depend> #change
<test_depend>ament_copyright</test_depend>
5、sub/pub topic主程序
5.1 sub topic
import rclpy
from rclpy.node import Node
from std_msgs.msg import String

class DemoSub(Node):
	def __init__(self):
	super().__init__('sub_node')
	self.subscription = self.create_subscription(String, 'topic', self.listenerCB, 10)
	
	def listenerCB(self, msg):
		self.get_logger().info('I heard: "%s"' % msg.data)	

def main(args=None):
	rclpy.init(args=args)
	demo_sub = DemoSub()
	rclpy.spin(demo_sub)
	demo_sub.destroy_node()
	rclpy.shutdown()

if __name__ == '__main__':
	main()
5.2 pub topic
class DemoPub(Node):
	def __init__(self):
		super().__init__('pub_node')
		self.publisher_ = self.create_publisher(String, 'topic', 10)
		timer_period = 0.5 # seconds
		self.timer = self.create_timer(timer_period, self.timerLoop)
		self.i = 0
		
	def timerLoop(self):
		msg = String()
		msg.data = 'Hello World: %d' % self.i
		self.publisher_.publish(msg)
		self.get_logger().info('Publishing: "%s"' % msg.data)
		self.i += 1

def main(args=None):
	rclpy.init(args=args)
	demo_pub = DemoPub()
	rclpy.spin(demo_pub)
	demo_pub.destroy_node()
	rclpy.shutdown()

if __name__ == '__main__':
	main()
6、tips

有的时候,python中修改了一个数值,重新编译后,可能编译器没有发现修改的地方,有可能不执行修改后的值。所以,为了保险起见,如果比较小的改动,把install和build中相应包的文件删除后再编译,确保编译器一定是按修改后的代码来编译的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值