找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 25009|回复: 30

自平衡机器人——NXTWAY

   火.. [复制链接]
发表于 2009-6-12 14:46:52 | 显示全部楼层 |阅读模式
前段时间很多人在问我这个机器人的程序怎么写,说老实话,我其实也是只知道个原理,真写的话,不一定写得出
这几天,腾出点空来了,给大家分享一下这个机器人。

搭建的图纸以前我发过了,地址如下
http://www.cmnxt.cn/viewthread.php?tid=32&extra=page%3D1

现在给出它的程序,用的NBC写的。我写了一些注释,方便朋友看,不影响使用

PS:需要注意的是,这个机器人对光线的要求很高,最好在较黑暗的地方测试,不然效果不如作者视频的好哦


  1. //------------------------------------------------
  2. // NXTway - Philo - www.philohome.com - 6/5/2006
  3. //------------------------------------------------
  4. dseg segment
  5. // Sensor values
  6. NVal word
  7. offset word
  8. err sdword
  9. errold sdword
  10. errdiff sdword
  11. errint sdword
  12. // Motor values
  13. theUF byte
  14. thePower sbyte
  15. theOM byte OUT_MODE_MOTORON+OUT_MODE_BRAKE
  16. theRM byte OUT_REGMODE_IDLE
  17. theRS byte OUT_RUNSTATE_RUNNING
  18. thePorts byte[] OUT_B, OUT_C  // motors B and C
  19. // pid coeffs
  20. kp sdword 30
  21. kd sdword 35
  22. ki sdword 5
  23. scale sdword 45
  24. // pid value
  25. pid sdword
  26. //temp var
  27. temp sdword
  28. // timer vars
  29. thenTick dword
  30. nowTick dword
  31. dseg ends
  32. thread main
  33. setin IN_TYPE_LIGHT_ACTIVE, IN_2, Type
  34.   // initialize motors
  35.   set thePower, 0
  36. set theUF, UF_UPDATE_SPEED+UF_UPDATE_MODE
  37. setout thePorts, OutputMode, theOM, RegMode, theRM, RunState, theRS, UpdateFlags, theUF, Power, thePower
  38. set theUF, UF_UPDATE_SPEED

  39.   // wait a bit to let sensor stabilize
  40. gettick nowTick
  41. add thenTick, nowTick, 100 // 等 100 ms
  42. Waiting:
  43. gettick nowTick
  44. brcmp LT, Waiting, nowTick, thenTick //如果nowTick小于thenTick时,跳到Waiting
  45.   // reads center value. NXTway must be balanced.
  46.   getin NVal, IN_2, NormalizedValue // More precise than PercentValue
  47.   mov offset, NVal
  48. Forever:
  49. getin NVal, IN_2, NormalizedValue // read sensor values
  50.   sub err, NVal, offset // Substract center value
  51.   brtst GT, ErrPos, err // 如果err大于0,跳到ErrPos
  52.   mul err, err, 16      // (less variation if far from surface)
  53.   div err, err, 10
  54. ErrPos:
  55.   sub errdiff, err, errold  // 计算微分错误
  56.   mov errold, err
  57.   
  58.   add errint, errint, err   // 计算积分错误
  59.   mul errint, errint, 2     // (with fast damping)
  60.   div errint, errint, 3
  61.   
  62.   mul pid, kd, errdiff      // 微分部分
  63.   mul temp, kp, err         // 比例部分
  64.   add pid, pid, temp        // Add Diff+Prop
  65.   mul temp, ki, errint      // 积分部分
  66.   add pid, pid, temp        // Add int
  67.   div pid, pid, scale       // Scale PID value
  68.   
  69.   // saturate over 100 and under -100
  70.   brcmp LT, under100, pid, 100   //pid小于100时,跳到under100
  71.   mov pid, 100
  72. under100:
  73.   brcmp GT, overMin100, pid, -100  //pid大于-100时,跳到overMin100
  74.   mov pid, -100
  75. overMin100:
  76.   mov thePower, pid          // Update motor power
  77. setout thePorts, UpdateFlags, theUF, Power, thePower
  78.   jmp Forever
  79.   exit
  80. endt
复制代码
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2009-6-19 13:36:12 | 显示全部楼层
请问这个代码是怎么写入NXT的呀!
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2009-6-21 21:56:26 | 显示全部楼层
程序怎么用?
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2009-6-22 16:53:11 | 显示全部楼层
程序是用NBC写的,需要用到软件 Bricx Command Center
这个软件可以到编程区里的nxc区下载
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2009-7-18 07:57:02 | 显示全部楼层
有兴趣
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2009-8-21 16:46:52 | 显示全部楼层
强啊!不知道能不能用nxt-g做(图标的那种)?
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2009-8-21 17:40:35 | 显示全部楼层
NXTG写什么的程序,估计就平衡不了了
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2009-12-12 06:12:05 | 显示全部楼层
感谢楼主分享。这个机器人是什么原理啊?用一个光传感器就可以单脚走了?真奇怪。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2010-1-23 11:07:49 | 显示全部楼层
能否用rxe程序发给我?(nxt编译后的程序)我不会用bricxcc
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2010-3-18 04:00:53 | 显示全部楼层
光传感器 在这里起的是什么作用
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2010-3-18 08:23:53 | 显示全部楼层
回复 8# asdf


    光感靠近地面的程度不同,会有不同的光值,通过计算光值的偏差然后以PID算法反馈速度给马达,就可以达到平衡的效果
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2010-3-18 08:24:30 | 显示全部楼层
回复 10# papa_bear


    光感起获取偏差的作用
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2010-3-18 08:25:37 | 显示全部楼层
回复 9# YOUJIE987


    看到有点晚,使用很简单,你可以去NXC区下载个教程就行,不行再问我。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2010-3-18 18:53:38 | 显示全部楼层
谢谢!
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2010-3-30 21:16:44 | 显示全部楼层
程序很复杂,看不懂
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|中文乐高 ( 桂ICP备13001575号-7 )

GMT+8, 2024-5-14 17:34 , Processed in 0.085416 second(s), 19 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表