[开源]蜘蛛机器人V2

2020-02-11 10:17发布

本帖最后由 Gorgon_Meducer 于 2014-10-28 12:01 编辑



- 2014-10-28 致歉

     由于我个人在团队管理实践上的重大错误,V2版蜘蛛可靠性不足以完成今日举行的产品展示,最终影响了飞思卡尔产品
     的展示计划。在这里,我真心的向阿莫致歉,向相信我,期待蜘蛛项目的广大坛友致歉,向飞思卡尔(上海)致歉。
    我们认识到自己能力的不足,后续将继续在硬件驱动能力上进行改进,降低机器人对电源系统的依赖。

                                                                                                                  特此致歉:王卓然(傻孩子)

     P.S 此次飞思卡尔展会将使用蜘蛛V1进行演示。


- 2014-10-23 V2版蜘蛛改进

     a. 由于驱动电路考虑不足,发现蜘蛛在joints_calibration()时由于所有的关节顺势运动时电流过大会导致驱动电路保护,
         导致很多时候无法正常工作。显然现在修改驱动电路已经来不及了,只能修改代码,让所有关节顺次启动,从而避免
         峰值电流。

  1. static void joints_calibration(joint_t *ptJoints, joint_no_t tIndex)
  2. {
  3.     if (NULL == ptJoints) {
  4.         return ;
  5.     }

  6.     switch (tIndex) {
  7.         case RIGHT_BACK_LEG_0:
  8.             JOINT_CFG(
  9.                 ptJoints[RIGHT_BACK_LEG_0],
  10.                 RIGHT_BACK_LEG_0,
  11.                 70,                         //!< offset
  12.                 110,                        //!< start angle
  13.                 200,                        //!< end angle
  14.                 270,                        //!< Max Angular Speed
  15.                 225,                        //!< Reset Position
  16.             );break;

  17.         case RIGHT_MIDDLE_LEG_0:
  18.             JOINT_CFG(
  19.                 ptJoints[RIGHT_MIDDLE_LEG_0],
  20.                 RIGHT_MIDDLE_LEG_0,
  21.                 54,                     //!< offset
  22.                 81,                     //!< start angle
  23.                 171,                    //!< end angle
  24.                 270,                    //!< Max Angular Speed
  25.                 180,                    //!< Reset Position
  26.             );break;

  27.         case RIGHT_FRONT_LEG_0:
  28.             JOINT_CFG(
  29.                 ptJoints[RIGHT_FRONT_LEG_0],
  30.                 RIGHT_FRONT_LEG_0,
  31.                 50,                     //!< offset
  32.                 40,                     //!< start angle
  33.                 130,                    //!< end angle
  34.                 270,                    //!< Max Angular Speed
  35.                 135,                    //!< Reset Position
  36.             );break;

  37.         case LEFT_FRONT_LEG_0:
  38.             JOINT_CFG(
  39.                 ptJoints[LEFT_FRONT_LEG_0],
  40.                 LEFT_FRONT_LEG_0,
  41.                 220,                     //!< offset
  42.                 0,                      //!< start angle
  43.                 270,                    //!< end angle
  44.                 270,                    //!< Max Angular Speed
  45.                 45,                      //!< Reset Position
  46.             );break;

  47.         case LEFT_MIDDLE_LEG_0:
  48.             JOINT_CFG(
  49.                 ptJoints[LEFT_MIDDLE_LEG_0],
  50.                 LEFT_MIDDLE_LEG_0,
  51.                 215,                     //!< offset
  52.                 0,                      //!< start angle
  53.                 270,                    //!< end angle
  54.                 270,                    //!< Max Angular Speed
  55.                 0,                      //!< Reset Position
  56.             );break;

  57.         case LEFT_BACK_LEG_0:
  58.             JOINT_CFG(
  59.                 ptJoints[LEFT_BACK_LEG_0],
  60.                 LEFT_BACK_LEG_0,
  61.                 195,                    //!< offset
  62.                 0,                      //!< start angle
  63.                 270,                    //!< end angle
  64.                 270,                    //!< Max Angular Speed
  65.                 315,                      //!< Reset Position
  66.             );break;

  67.         case RIGHT_BACK_LEG_1:
  68.             JOINT_CFG(
  69.                 ptJoints[RIGHT_BACK_LEG_1],
  70.                 RIGHT_BACK_LEG_1,
  71.                 35,                    //!< offset
  72.                 0,                      //!< start angle
  73.                 270,                    //!< end angle
  74.                 270,                    //!< Max Angular Speed
  75.                 225,                     //!< Reset Position
  76.             );break;

  77.         case RIGHT_MIDDLE_LEG_1:
  78.             JOINT_CFG(
  79.                 ptJoints[RIGHT_MIDDLE_LEG_1],
  80.                 RIGHT_MIDDLE_LEG_1,
  81.                 40,                    //!< offset
  82.                 0,                      //!< start angle
  83.                 270,                    //!< end angle
  84.                 270,                    //!< Max Angular Speed
  85.                 225,                     //!< Reset Position
  86.             );break;

  87.         case RIGHT_FRONT_LEG_1:
  88.             JOINT_CFG(
  89.                 ptJoints[RIGHT_FRONT_LEG_1],
  90.                 RIGHT_FRONT_LEG_1,
  91.                 33,                    //!< offset
  92.                 0,                      //!< start angle
  93.                 270,                    //!< end angle
  94.                 270,                    //!< Max Angular Speed
  95.                 225,                     //!< Reset Position
  96.             );break;
  97.             
  98.          case LEFT_BACK_LEG_1:
  99.             JOINT_CFG(
  100.                 ptJoints[LEFT_BACK_LEG_1],
  101.                 LEFT_BACK_LEG_1,
  102.                 235,                    //!< offset
  103.                 0,                      //!< start angle
  104.                 270,                    //!< end angle
  105.                 270,                    //!< Max Angular Speed
  106.                 315,                     //!< Reset Position
  107.             );break;

  108.         case LEFT_MIDDLE_LEG_1:
  109.             JOINT_CFG(
  110.                 ptJoints[LEFT_MIDDLE_LEG_1],
  111.                 LEFT_MIDDLE_LEG_1,
  112.                 240,                    //!< offset
  113.                 0,                      //!< start angle
  114.                 270,                    //!< end angle
  115.                 270,                    //!< Max Angular Speed
  116.                 315,                     //!< Reset Position
  117.             );break;

  118.         case LEFT_FRONT_LEG_1:
  119.             JOINT_CFG(
  120.                 ptJoints[LEFT_FRONT_LEG_1],
  121.                 LEFT_FRONT_LEG_1,
  122.                 245,                    //!< offset
  123.                 0,                      //!< start angle
  124.                 270,                    //!< end angle
  125.                 270,                    //!< Max Angular Speed
  126.                 315,                     //!< Reset Position
  127.             );break;

  128.         case LEFT_BACK_LEG_2:
  129.             JOINT_CFG(
  130.                 ptJoints[LEFT_BACK_LEG_2],
  131.                 LEFT_BACK_LEG_2,
  132.                 328,                    //!< offset
  133.                 0,                     //!< start angle
  134.                 270,                    //!< end angle
  135.                 270,                    //!< Max Angular Speed
  136.                 45,                     //!< Reset Position
  137.             );break;

  138.         case LEFT_MIDDLE_LEG_2:
  139.             JOINT_CFG(
  140.                 ptJoints[LEFT_MIDDLE_LEG_2],
  141.                 LEFT_MIDDLE_LEG_2,
  142.                 332,                    //!< offset
  143.                 0,                     //!< start angle
  144.                 270,                    //!< end angle
  145.                 270,                    //!< Max Angular Speed
  146.                 45,                     //!< Reset Position
  147.             );break;

  148.         case LEFT_FRONT_LEG_2:
  149.             JOINT_CFG(
  150.                 ptJoints[LEFT_FRONT_LEG_2],
  151.                 LEFT_FRONT_LEG_2,
  152.                 323,                    //!< offset
  153.                 0,                     //!< start angle
  154.                 270,                    //!< end angle
  155.                 270,                    //!< Max Angular Speed
  156.                 45,                     //!< Reset Position
  157.             );break;

  158.         case RIGHT_BACK_LEG_2:
  159.             JOINT_CFG(
  160.                 ptJoints[RIGHT_BACK_LEG_2],
  161.                 RIGHT_BACK_LEG_2,
  162.                 312,                    //!< offset
  163.                 0,                     //!< start angle
  164.                 270,                    //!< end angle
  165.                 270,                    //!< Max Angular Speed
  166.                 135,                     //!< Reset Position
  167.             );break;

  168.         case RIGHT_MIDDLE_LEG_2:
  169.             JOINT_CFG(
  170.                 ptJoints[RIGHT_MIDDLE_LEG_2],
  171.                 RIGHT_MIDDLE_LEG_2,
  172.                 311,                    //!< offset
  173.                 0,                     //!< start angle
  174.                 270,                    //!< end angle
  175.                 270,                    //!< Max Angular Speed
  176.                 135,                     //!< Reset Position
  177.             );break;

  178.         case RIGHT_FRONT_LEG_2:
  179.             JOINT_CFG(
  180.                 ptJoints[RIGHT_FRONT_LEG_2],
  181.                 RIGHT_FRONT_LEG_2,
  182.                 312,                    //!< offset
  183.                 0,                     //!< start angle
  184.                 270,                    //!< end angle
  185.                 270,                    //!< Max Angular Speed
  186.                 135,                     //!< Reset Position
  187.             );break;
  188.     }

  189. }
  190. ...

  191. IMPLEMENT_FSM(SpiderTask)
  192.     NO_INIT static uint8_t s_hwJointsCount;
  193.     PRIVATE STATE(Spider_Init) BEGIN
  194.         s_hwJointsCount = CEREBEL_JOINTS_COUNT;
  195.         //! initialize servo service
  196.         SERVO.Init ();
  197.         SERVO.Start ();
  198.         
  199.         CS_SET_EVENT(&s_wDelayEvent);
  200.         
  201.         TRANSFER_TO_STATE(Spider_Joints_Init);
  202.         EXIT_STATE;
  203.     END
  204.     PRIVATE STATE(Spider_Joints_Init) WAIT_EVENT_BEGIN(&s_wDelayEvent)
  205.         
  206.         if (s_hwJointsCount) {
  207.             request_for_delay_ms(250);
  208.             joints_calibration(s_tJoints, s_hwJointsCount - 1);
  209.             s_hwJointsCount--;
  210.         } else {

  211.             //! initialize cerebel layer
  212.             CEREBEL_CFG(&s_tJoints);
  213.             TRANSFER_TO_STATE(Spider_Task);
  214.         }

  215.         REFLEXIVE_STATE;
  216.     END
  217.     PRIVATE STATE(Spider_Task) BEGIN

  218.         CALL_ACTION(Spider_Go_Front);
  219.         REFLEXIVE_STATE;
  220.     END
  221. END_IMPLEMENT_FSM
复制代码
    b. 增加一个异步的毫秒级精确延时服务,主要是前面关节初始化的时候需要在每个关节之间插入非阻塞的延时。
       这也展示了状态机架构下如何配合调度器实现任务和时间的同步(应用代码参考a):


  1. NO_INIT static event_t s_wDelayEvent;
  2. static volatile uint32_t s_wDelayCounter = 0;

  3. void request_for_delay_ms(uint32_t wDelayMs)
  4. {
  5.     SAFE_ATOM_CODE(
  6.         s_wDelayCounter = wDelayMs;
  7.     )
  8. }

  9. ISR(SysTick_Handler)
  10. {
  11. ...

  12.     if (s_wDelayCounter) {
  13.         s_wDelayCounter--;
  14.         if (!s_wDelayCounter) {
  15.             CS_SET_EVENT(&s_wDelayEvent);
  16.         }
  17.     }

  18. ...
  19. }
复制代码
    c. v1.2工程模板下载 SpiderRobot_Template(v1.2).rar (1.17 MB, 下载次数: 257) 2014-10-27 11:04 上传 点击文件名下载附件
   


- 2014-10-23 凌晨 V2版蜘蛛初步完成

    历经磨难,原本以为很容易搞定的新版蜘蛛机器人,总算是搞定了——上视频:
    V41023-025542.part1.rar (15 MB, 下载次数: 886) 2014-10-23 03:09 上传 点击文件名下载附件
    V41023-025542.part2.rar (15 MB, 下载次数: 843) 2014-10-23 03:10 上传 点击文件名下载附件
    V41023-025542.part3.rar (3.22 MB, 下载次数: 528) 2014-10-23 03:10 上传 点击文件名下载附件
    数字舵机是0~270度的,非常精准,校准只需要处理offset即可。另外由于安装的原因,坐标系又被迫做了镜像,
    回头软件上考虑加入处理,避免这种坐标系上的差异存在。
    睡了,好困,其它内容明天再补充。
   
工程下载 SpiderRobot_Template(v1.1).rar (551.88 KB, 下载次数: 343) 2014-10-23 03:12 上传 点击文件名下载附件



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
99条回答
步之道
1楼-- · 2020-02-16 16:50
果断先下视频来看一下,看完来赞傻孩子。
ggchao
2楼-- · 2020-02-16 17:09
shahaizi,真牛
步之道
3楼-- · 2020-02-16 21:22
 精彩回答 2  元偷偷看……
qufuta
4楼-- · 2020-02-17 02:30
蜘蛛最重要的就是能够不打滑,并且能够适应各种路面。。。
kutf
5楼-- · 2020-02-17 07:57
armok 发表于 2014-10-23 11:43
超过2000元成本,你确认舍得买?

2-3千没有问题的,可以先款后货,什么时候出套件?能不能在12月份之前推出?
kutf
6楼-- · 2020-02-17 07:58
步之道 发表于 2014-10-23 20:30
相当棒,和上一代比起来,V2至少看起来很有范,因为蜘蛛的腿是金属所以在地板上会有滑动现象,如果演示的时 ...

脚上裹一点塑料垫片,应该就不会滑动了

一周热门 更多>