鱼香ros2(九)python编程
一、面向对象编程1、概念面向对象编程都可以创建类类是对事务的封装。2、实例化实例化就是使用提供的参数以PersonNode为模版生成node。3、继承通过继承创建一个新的类。二、代码编写1、关于类这是一个空类的说明class是关键字声明一个类_init_方法是一个特殊方法该方法在创建该类的对象时会被调用。当需要给该类添加属性时一般会通过_init_参数来传递初始值。在_init_方法中添加了参数selfnameage其中name是str(字符串类型)age是int整数类型self是python类内部的方法的第一个默认参数代表他本身。在_init_方法后新添加了eat方法eat方法括号里面有个f表示占位符可以将传入的值替代到{}里。然后添加了main方法我们进行实现并对他调用。一定要记得在setup.py文件进行注册将自己刚刚新建的节点放进去。接着ros2功能包的四部曲注册→构建→source第一新节点的增加时才需要→运行以上流程不清楚的可以去看看我的“鱼香ros2六……”图片上面有下面的图片是最后启动成功后的截图2、继承定义一个作家类WriterNode很明显作家是属于人的拥有PersonNode的基本属性和方法即刚刚PersonNode里的name、age以及方法eat当时请注意因为main方法与class关键字同级所以main方法不属于PersonNode类。我们无须在WriterNode里重复定义PersonNode的基础信息因此我们就可以使用继承来完成这个类当然WriterNode会有自己独特的方法比如写作等就像程序员自己独特的方法“编程”这边作家独特的属性没想到就给个书名正常面向对象编程书名的属性应该是在书这个类的这里为了介绍继承先展示引用一个“书名”属性。这张截图有几个错误正确查看下图接着重复ros2功能包的四部曲注册→构建→source第一新节点的增加时才需要→运行三、继承ros2的PersonNode导入rclpy库和Node类并让PersonNode集成Node在_init_中传入父节点最后在eat方法中改用ros2的logger来输出接着构建运行。想了解rclpy相关函数请参考“鱼香ros2四……”WriterNode改成ros2节点四、多线程与回调函数import requests小说下载库的导入python有的库但是需要手动装入。如果等会启动你无法导入或者你的系统里没有装这个库就要手动装入。输入命令sudo apt install python3-request截图证明我之前已经下载了。threadingpython版本的线程库。callback统计的字数。start_download开始下载。threadthreading.Thread(targetself.download,args(url,callback))threading.Thread()新建线程对象target目标函数args参数集合thread.start()启动线程默认线程是没有启动的。threading.get_ident()现成编号。使用命令自己创建小说章节。防止网上下载版权问题。启动当前小说服务器python3 -m http.server当前这个服务不要关闭打开新的终端启动我们的learn_thread.py可以看到三个线程在一起跑。以上就是python多线程的例子。线程有好处但是也有坏处线程数量过多会影响系统的调度ros2中默认我们只在一个线程中进行数据的处理和调度。所以ros2节点是比较高效的任务比较简单不需要开多线程但如果你有需要比如你的代码中加入了很多复杂的处理还有一些额外需要异步来完成的事情这个时候就要考虑多线程了。