ROS2机器人少年创客营:Python第三课

ROS2机器人少年创客营:Python第三课

课程名称

机器人的工具箱------函数与模块化思维

课程目标
  • 理解函数概念:学会将重复的代码块封装成"工具",理解"一次编写,多次调用"的优势。
  • 掌握参数传递:理解如何给函数"喂料"(输入参数),让同一个工具处理不同的任务。
  • 理解返回值:学会从函数中获取处理结果,打通数据流动的闭环。
  • 建立模块化思维:初步接触"分而治之"的编程思想,为ROS2的"节点"概念做铺垫。
核心内容

为什么要用函数?

  • 痛点分析
    • 如果你要让机器人走一个正方形,你需要写4次"前进"和4次"转弯"。
    • 如果要把正方形改成六边形,你得复制粘贴更多代码。
    • 如果"转弯"的逻辑变了(比如要转得更平滑),你得修改8个地方。太麻烦了!
  • 函数的定义
    • 比喻:函数就是给机器人的一套"专用工具"或"必杀技"。
    • 例子 :你不需要每次都告诉机器人"抬腿、前伸、下压、摩擦地面",你只需要定义一个工具叫走路()
    • 好处:代码复用、易于修改、逻辑清晰。

定义与调用:制造工具与使用工具

  • 定义函数(制造工具)
    • 使用def关键字。

    • 语法

      python 复制代码
      def 工具名称():
          # 这里写具体的步骤
          print("正在执行任务...")
    • 注意:定义时,工具不会立刻运行,只是被"存"进了工具箱里。

  • 调用函数(使用工具)
    • 语法工具名称()
    • 场景:当你需要执行任务时,喊出工具的名字,它就会工作。

参数:让工具更灵活

  • 概念
    • 如果只有一个做咖啡()函数,它只能做一种口味。
    • 加上参数:做咖啡(糖量, 水量)。这样同一个函数,根据你给的参数不同,能做出不同的咖啡。
  • ROS2关联
    • 以后我们会写一个转向(角度)的函数。告诉它90度,它就转90度;告诉它180度,它就转180度。

返回值:不仅仅是执行,还要反馈

  • 概念
    • 你给洗衣机(函数)衣服和水(参数),它洗完后会给你一个结果:洗干净的衣服。
    • 在编程中,这就是return
  • 应用
    • 函数计算距离(起点, 终点),最后return一个数字,告诉你具体多少米。
实践环节

任务:打造"万能绘图仪"

  • 场景:我们要控制海龟(机器人)画图形。不要直接写移动代码,而是先制造"画笔工具"。

  • 步骤1:定义基础工具

    • 定义一个函数draw_square(边长)
    • 在函数内部,使用for循环(复习第二课),让机器人前进边长,然后右转90度,重复4次。
  • 步骤2:定义高级工具

    • 定义一个函数draw_polygon(边数, 边长)
    • 利用数学知识(360度除以边数),计算每次转弯的角度。
  • 步骤3:调用与组合

    • 在主程序中,依次调用这些工具:
      • draw_square(100) ------ 画一个大正方形。
      • draw_polygon(6, 50) ------ 画一个六边形。
      • draw_polygon(3, 80) ------ 画一个三角形。
  • 代码示例

    python 复制代码
    import time # 引入时间库,为了演示效果
    
    # 模拟机器人动作的函数(代替真实的硬件控制)
    def move_forward(distance):
        print(f" 前进 {distance} 米")
        time.sleep(1) # 模拟耗时
    
    def turn_right(angle):
        print(f" 右转 {angle} 度")
        time.sleep(0.5)
    
    # --- 定义我们的万能工具 ---
    
    def draw_square(size):
        print(f"--- 开始画正方形,边长: {size} ---")
        for i in range(4):
            move_forward(size)
            turn_right(90)
        print(" 正方形画完!\n")
    
    def draw_polygon(sides, size):
        print(f"--- 开始画多边形,边数: {sides}, 边长: {size} ---")
        # 计算每次转弯的角度:360 / 边数
        angle = 360 / sides
        for i in range(sides):
            move_forward(size)
            turn_right(angle)
        print(f" {sides}边形画完!\n")
    
    # --- 主程序:像搭积木一样使用工具 ---
    
    print(" 机器人绘图系统启动...")
    
    # 任务1:画个小的正方形
    draw_square(50)
    
    # 任务2:画个六边形
    draw_polygon(6, 40)
    
    # 任务3:画个大的正方形
    draw_square(100)
    
    print(" 所有绘图任务完成!")
课后总结

今天我们学会了"偷懒"的智慧。通过函数,我们将复杂的动作打包成了简单的指令。在ROS2中,每一个"节点"其实就是一个超级复杂的函数集合。掌握了函数,你就掌握了模块化编程的钥匙。

课后思考

如果我们把draw_square函数写在另一个文件里,现在的程序还能用吗?(引出下节课的内容:模块与库的导入)。

相关推荐
Tisfy7 小时前
LeetCode 3418.机器人可以获得的最大金币数:动态规划
leetcode·机器人·动态规划
Derrick__17 小时前
Android混淆和加密技术
android·jvm·python
J2虾虾7 小时前
Java使用jcifs读取Windows的共享文件
java·开发语言·windows
gzroy8 小时前
Dify插件开发--Markdown+Mermaid转Docx
python·dify插件
kobesdu8 小时前
ROS Flutter GUI App:跨平台机器人可视化控制界面使用记录
flutter·机器人·ros
421!8 小时前
C 语言学习笔记——11(函数指针与指针函数)
c语言·开发语言·笔记·单片机·学习
Dxy12393102168 小时前
Python如何使用正则判断是否是姓名
数据库·python·mysql
cch89188 小时前
汇编与C语言:底层对话VS高效指挥
c语言·开发语言·汇编
♪-Interpretation8 小时前
第七节:Python的内置容器
开发语言·python