1870浏览
查看: 1870|回复: 6

[教程] 小龟机器人Python教学案例

[复制链接]
本帖最后由 捣腾一个机器人 于 2023-6-7 17:24 编辑

前言:
小龟机器人可以轻松学习机器人编程,不管是图形化编程,还是Python编程、Web编程,它都行。小龟同时开发了一体化编程平台,通过浏览器就可以直接进行编程,省去了下载安装的烦恼,让广大师生可以更轻松更愉快的学习机器人。

本文介绍小龟的Python机器人编程案例,辅以图形化编程帮助参考理解,主要由两部分组成:

1、Python教学案例介绍在教学上的实际应用;

2、Python编辑器介绍在线和离线双模式下的使用方法。


小龟机器人Python教学案例


案例1 使用超声波模块实现近距离告警提示
知识点:

变量、循环、逻辑、音频

Python代码:
  1. d = None
  2. while True:
  3.   sleep(0.001)
  4.   d = car.hcsr04(A1, A2)
  5.   if d <= 10:
  6.     car.buzzer.fire()
  7.   else:
  8.     car.buzzer.music('''1=''')
  9.   sleep(1)
复制代码

图形化编程:

小龟机器人Python教学案例图1

案例2 跑马灯

知识点:

列表、色彩

Python代码:
  1. i = None
  2. for i in [int('0x' + '#ff0000'[1:], 16),
  3.       int('0x' + '#33ff33'[1:], 16),
  4.       int('0x' + '#000099'[1:], 16),
  5.       int('0x' + '#000000'[1:], 16)]:
  6.   sleep(0.001)
  7.   car.led.on(i)
  8.   sleep(0.75)
复制代码


图形化编程:

小龟机器人Python教学案例图2

案例3 小车精准右转90度

知识点:

角度积分、绝对值、逻辑、电机运动

Python代码:
  1. import math
  2. car.motion.start_offset()
  3. car.motion.start_rpy()
  4. car.right(30)
  5. while True:
  6.   sleep(0.001)
  7.   if math.fabs(car.motion.rpy()[2]) >= 90:
  8.     car.stop()
  9.     break
复制代码

图形化编程:

小龟机器人Python教学案例图3

案例4 按键控制LED灯

知识点:

循环、逻辑、色彩、人机互动

Python代码:
  1. while True:
  2.   sleep(0.001)
  3.   sleep(0.01)
  4.   if (car.touch.is_pressed(A)) and (car.touch.is_pressed(B)):
  5.     car.led.on(int('0x' + '#0000ff'[1:], 16))
  6.   elif car.touch.is_pressed(B):
  7.     car.led.on(int('0x' + '#ff0000'[1:], 16))
  8.   elif car.touch.is_pressed(A):
  9.     car.led.on(int('0x' + '#33ff33'[1:], 16))
  10.   else:
  11.     car.led.off()
复制代码

图形化编程:

小龟机器人Python教学案例图4

案例5 WS2812灯组逐个亮起

知识点:

变量递增、WS2812

Python代码:
  1. E7_81_AF_E7_BB_841 = None
  2. i = None
  3. _E7_81_AF_E7_BB_841 = [0x000000] * 64
  4. def hex2rgb(color):
  5.     r = color >> 16
  6.     g = color >> 8 & 0x00FF
  7.     b = color & 0x0000FF
  8.     return (r,g,b)
  9. def set_brightness(brightness,r,g,b):
  10.     r = r*brightness//100
  11.     g = g*brightness//100
  12.     b = b*brightness//100
  13.     return (r,g,b)
  14. def rgb2hex(r,g,b):
  15.     return r << 16 | g << 8 | b
  16. def breathe(l, color, start_led=0, end_led=64, speed = 0.02, breathe_times=1, min_rightness=0, max_rightness=64, pin="A1"):
  17.     rgb_color = hex2rgb(color)
  18.     for k in range(breathe_times):
  19.         for i in range(min_rightness, max_rightness):
  20.             rgb_color_brightness = set_brightness(i, *rgb_color)
  21.             hex_color = rgb2hex(*rgb_color_brightness)
  22.             for j in range(start_led, end_led):
  23.                 l[j] = hex_color
  24.             car.ws2812.write(pin, l)
  25.             sleep(speed)
  26.         for i in range(max_rightness, min_rightness-1, -1):
  27.             rgb_color_brightness = set_brightness(i, *rgb_color)
  28.             hex_color = rgb2hex(*rgb_color_brightness)
  29.             for j in range(start_led, end_led):
  30.                 l[j] = hex_color
  31.             car.ws2812.write(A1, l)
  32.             sleep(speed)
  33. for i in range(1, 65):
  34.   sleep(0.001)
  35.   _E7_81_AF_E7_BB_841[i-1] = int('0x' + '#3366ff'[1:], 16)
  36.   car.ws2812.write(A1, _E7_81_AF_E7_BB_841)
  37.   sleep(0.02)
复制代码

  图形化编程:

小龟机器人Python教学案例图5

案例6 舵机组并行运动

知识点:

舵机运动、舵机组运动、串行控制、并行控制

Python代码:
  1. car.servo([S1,S2,S3,S4],[
  2.   [0.5, 0.5, 45,45,45,45],
  3.   [0.5, 0.5, 135,135,135,135],
  4.   [0.5, 0.5, 90,90,90,90],])
复制代码

图形化编程:

小龟机器人Python教学案例图6


案例7 在屏幕指定坐标位置显示文字

知识点:

坐标、屏幕显示

Python代码:
  1. car.screen.print(str('ABC'), 0, 0)
复制代码

  图形化编程:

小龟机器人Python教学案例图7

案例8 四足前进运动

知识点:

舵机组运动、四足步态

Python代码:
  1. import math
  2. class Dog:
  3.     def __init__(self, pins, values, directions, leg_length, leg_space, leg_space_offside):
  4.         self.pins = pins
  5.         self.values = values
  6.         self.directions = directions
  7.         self.leg_length = leg_length
  8.         self.leg_space = leg_space
  9.         self.leg_space_offside = leg_space_offside
  10.     def xpos(self, x1, x2, x3, x4, t1=0.5, t2=0):
  11.         v1 = self.values[0]
  12.         v2 = self.values[1]
  13.         v3 = self.values[2]
  14.         v4 = self.values[3]
  15.         o1 = self.x2offset(x1)
  16.         o2 = self.x2offset(x2)
  17.         o3 = self.x2offset(x3)
  18.         o4 = self.x2offset(x4)
  19.         d1 = self.directions[0]
  20.         d2 = self.directions[1]
  21.         d3 = self.directions[2]
  22.         d4 = self.directions[3]
  23.         return [t1, t2, v1 + d1 * o1, v2 + d2 * o2, v3 + d3 * o3, v4 + d4 * o4]
  24.     def zpos(self, z1, z2, z3, z4, t1=0.5, t2=0):
  25.         v1 = self.values[0]
  26.         v2 = self.values[1]
  27.         v3 = self.values[2]
  28.         v4 = self.values[3]
  29.         o1 = self.z2offset(z1)
  30.         o2 = self.z2offset(z2)
  31.         o3 = -self.z2offset(z3)
  32.         o4 = -self.z2offset(z4)
  33.         d1 = self.directions[0]
  34.         d2 = self.directions[1]
  35.         d3 = self.directions[2]
  36.         d4 = self.directions[3]
  37.         return [t1, t2, v1 + d1 * o1, v2 + d2 * o2, v3 + d3 * o3, v4 + d4 * o4]
  38.     def set_x(self, dx, t=0.5):
  39.         car.servo(self.pins, [
  40.             self.xpos(-dx, -dx, -dx, -dx, t)
  41.         ])
  42.         sleep(t)
  43.     def set_z(self, height, t=0.5):
  44.         _h = self.leg_length + height
  45.         car.servo(self.pins, [
  46.             self.zpos(_h, _h, _h, _h, t)
  47.         ])
  48.         sleep(t)
  49.     def x2offset(self, dx):
  50.         offsetRad = math.asin(dx/self.leg_length)
  51.         offsetDeg = offsetRad * (180 / math.pi)
  52.         return offsetDeg
  53.     def z2offset(self, dz):
  54.         offsetRad = math.acos(dz/self.leg_length)
  55.         offsetDeg = offsetRad * (180 / math.pi)
  56.         return offsetDeg
  57.     def rotate_x(self, deg, t=0.5):
  58.         rad = deg * (math.pi / 180)
  59.         h = self.leg_space_offside / 2 * math.sin(rad)
  60.         _l = self.leg_length / 1.414
  61.         car.servo(self.pins, [
  62.             self.zpos(_l + h, _l - h, _l + h, _l - h, t)
  63.         ])
  64.         sleep(t)
  65.     def rotate_y(self, deg, t=0.5):
  66.         rad = deg * (math.pi / 180)
  67.         h = self.leg_space / 2 * math.sin(rad)
  68.         _l = self.leg_length / 1.414
  69.         car.servo(self.pins, [
  70.             self.zpos(_l + h, _l + h, _l - h, _l - h, t)
  71.         ])
  72.         sleep(t)
  73.     def go(self, dx, interval=0.5, keep=1):
  74.         times = keep / (interval*4)
  75.         _times = math.floor(times)
  76.         for i in range(times):
  77.             car.servo(self.pins, [
  78.                 self.xpos(0,dx,0,-dx, interval),
  79.                 self.xpos(dx,dx,0,-dx, interval),
  80.                 self.xpos(dx,0,-dx,0, interval),
  81.                 self.xpos(dx,dx,-dx,0, interval),
  82.             ], 0)
  83.             sleep(interval*4)
  84.         car.servo(self.pins, [self.xpos(0,0,0,0, interval)])
  85.     def back(self, dx, interval=0.5, keep=1):
  86.         times = keep / (interval*4)
  87.         _times = math.floor(times)
  88.         for i in range(times):
  89.             car.servo(self.pins, [
  90.                 self.xpos(0,dx,0,-dx, interval),
  91.                 self.xpos(0,dx,0-dx,-dx, interval),
  92.                 self.xpos(dx,0,-dx,0, interval),
  93.                 self.xpos(dx,0,-dx,-dx, interval),
  94.             ], 0)
  95.             sleep(interval*4)
  96.         car.servo(self.pins, [self.xpos(0,0,0,0, interval)])
  97.     def left(self, dx, interval=0.5, keep=1):
  98.         times = keep / (interval*4)
  99.         _times = math.floor(times)
  100.         for i in range(times):
  101.             car.servo(self.pins, [
  102.                 self.xpos(0,dx,0,-dx, interval),
  103.                 self.xpos(-dx,dx,0,-dx, interval),
  104.                 self.xpos(-dx,0,dx,0, interval),
  105.                 self.xpos(-dx,dx,dx,0, interval),
  106.             ], 0)
  107.             sleep(interval*4)
  108.         car.servo(self.pins, [self.xpos(0,0,0,0, interval)])
  109.     def right(self,dx, interval=0.5, keep=1):
  110.         times = keep / (interval*4)
  111.         _times = math.floor(times)
  112.         for i in range(times):
  113.             car.servo(self.pins, [
  114.                 self.xpos(dx,0,-dx,0, interval),
  115.                 self.xpos(dx,-dx,-dx,0, interval),
  116.                 self.xpos(0,-dx,0,dx, interval),
  117.                 self.xpos(dx,-dx,0,dx, interval),
  118.             ], 0)
  119.             sleep(interval*4)
  120.         car.servo(self.pins, [self.xpos(0,0,0,0, interval)])
  121. pins = [S1, S2, S3, S4]
  122. values = [90, 90, 90, 90]
  123. dirs = [-1, +1, -1, +1]
  124. leg_len = 34
  125. leg_space=45
  126. leg_space_offside=95
  127. dog = Dog(pins, values, dirs, leg_len, leg_space, leg_space_offside)
  128. dog.go(15,0.5,3)
复制代码

图形化编程:
小龟机器人Python教学案例图8


案例9 小车通过识别二维码运动


知识点:

机器视觉、图像处理、变量、逻辑、循环、文本

Python代码:
  1. code = None
  2. car.vision.on('Y')
  3. while True:
  4.   sleep(0.001)
  5.   car.vision.snap()
  6.   code = car.vision.qrcode()
  7.   if code == 'GO':
  8.     car.go(30, 2)
  9.     sleep(2)
  10.   if code == 'LEFT':
  11.     car.left(30, 2)
  12.     sleep(2)
  13.   sleep(1)
复制代码

图形化编程:

小龟机器人Python教学案例图9



小龟机器人Python编辑器


在线模式:

登录网址:http://guidan.com/ide2/

离线模式:

1、连接小龟机器人自身热点:xiaogui-xxxx或小车-xxxx(固件版本不同显示差异,若提示该网络不能上网请选择继续使用该网络)

2、登录:192.168.4.1,页面显示如下

小龟机器人Python教学案例图10

3、点击Python即可进行Python教学和练习

小龟机器人Python教学案例图11






WedJune-202306071040..png

花生编程  中级技匠

发表于 2023-8-8 22:51:08

厉害厉害
回复

使用道具 举报

花生编程  中级技匠

发表于 2023-8-8 22:52:11

赞赞赞赞赞!
回复

使用道具 举报

三春牛-创客  初级技神

发表于 2023-8-9 09:21:45

厉害厉害
回复

使用道具 举报

三春牛-创客  初级技神

发表于 2023-8-9 09:22:48

不错,教程很详细!
回复

使用道具 举报

星某小号  见习技师 来自手机

发表于 2023-9-1 17:50:32

谢谢分享谢谢分享
回复

使用道具 举报

星某小号  见习技师 来自手机

发表于 2023-9-1 17:50:56

教程太详细了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail