[开源]蜘蛛机器人V2
本帖最后由 Gorgon_Meducer 于 2014-10-28 12:01 编辑- 2014-10-28 致歉
由于我个人在团队管理实践上的重大错误,V2版蜘蛛可靠性不足以完成今日举行的产品展示,最终影响了飞思卡尔产品
的展示计划。在这里,我真心的向阿莫致歉,向相信我,期待蜘蛛项目的广大坛友致歉,向飞思卡尔(上海)致歉。
我们认识到自己能力的不足,后续将继续在硬件驱动能力上进行改进,降低机器人对电源系统的依赖。
特此致歉:王卓然(傻孩子)
P.S 此次飞思卡尔展会将使用蜘蛛V1进行演示。
- 2014-10-23 V2版蜘蛛改进
a. 由于驱动电路考虑不足,发现蜘蛛在joints_calibration()时由于所有的关节顺势运动时电流过大会导致驱动电路保护,
导致很多时候无法正常工作。显然现在修改驱动电路已经来不及了,只能修改代码,让所有关节顺次启动,从而避免
峰值电流。
static void joints_calibration(joint_t *ptJoints, joint_no_t tIndex)
{
if (NULL == ptJoints) {
return ;
}
switch (tIndex) {
case RIGHT_BACK_LEG_0:
JOINT_CFG(
ptJoints,
RIGHT_BACK_LEG_0,
70, //!< offset
110, //!< start angle
200, //!< end angle
270, //!< Max Angular Speed
225, //!< Reset Position
);break;
case RIGHT_MIDDLE_LEG_0:
JOINT_CFG(
ptJoints,
RIGHT_MIDDLE_LEG_0,
54, //!< offset
81, //!< start angle
171, //!< end angle
270, //!< Max Angular Speed
180, //!< Reset Position
);break;
case RIGHT_FRONT_LEG_0:
JOINT_CFG(
ptJoints,
RIGHT_FRONT_LEG_0,
50, //!< offset
40, //!< start angle
130, //!< end angle
270, //!< Max Angular Speed
135, //!< Reset Position
);break;
case LEFT_FRONT_LEG_0:
JOINT_CFG(
ptJoints,
LEFT_FRONT_LEG_0,
220, //!< offset
0, //!< start angle
270, //!< end angle
270, //!< Max Angular Speed
45, //!< Reset Position
);break;
case LEFT_MIDDLE_LEG_0:
JOINT_CFG(
ptJoints,
LEFT_MIDDLE_LEG_0,
215, //!< offset
0, //!< start angle
270, //!< end angle
270, //!< Max Angular Speed
0, //!< Reset Position
);break;
case LEFT_BACK_LEG_0:
JOINT_CFG(
ptJoints,
LEFT_BACK_LEG_0,
195, //!< offset
0, //!< start angle
270, //!< end angle
270, //!< Max Angular Speed
315, //!< Reset Position
);break;
case RIGHT_BACK_LEG_1:
JOINT_CFG(
ptJoints,
RIGHT_BACK_LEG_1,
35, //!< offset
0, //!< start angle
270, //!< end angle
270, //!< Max Angular Speed
225, //!< Reset Position
);break;
case RIGHT_MIDDLE_LEG_1:
JOINT_CFG(
ptJoints,
RIGHT_MIDDLE_LEG_1,
40, //!< offset
0, //!< start angle
270, //!< end angle
270, //!< Max Angular Speed
225, //!< Reset Position
);break;
case RIGHT_FRONT_LEG_1:
JOINT_CFG(
ptJoints,
RIGHT_FRONT_LEG_1,
33, //!< offset
0, //!< start angle
270, //!< end angle
270, //!< Max Angular Speed
225, //!< Reset Position
);break;
case LEFT_BACK_LEG_1:
JOINT_CFG(
ptJoints,
LEFT_BACK_LEG_1,
235, //!< offset
0, //!< start angle
270, //!< end angle
270, //!< Max Angular Speed
315, //!< Reset Position
);break;
case LEFT_MIDDLE_LEG_1:
JOINT_CFG(
ptJoints,
LEFT_MIDDLE_LEG_1,
240, //!< offset
0, //!< start angle
270, //!< end angle
270, //!< Max Angular Speed
315, //!< Reset Position
);break;
case LEFT_FRONT_LEG_1:
JOINT_CFG(
ptJoints,
LEFT_FRONT_LEG_1,
245, //!< offset
0, //!< start angle
270, //!< end angle
270, //!< Max Angular Speed
315, //!< Reset Position
);break;
case LEFT_BACK_LEG_2:
JOINT_CFG(
ptJoints,
LEFT_BACK_LEG_2,
328, //!< offset
0, //!< start angle
270, //!< end angle
270, //!< Max Angular Speed
45, //!< Reset Position
);break;
case LEFT_MIDDLE_LEG_2:
JOINT_CFG(
ptJoints,
LEFT_MIDDLE_LEG_2,
332, //!< offset
0, //!< start angle
270, //!< end angle
270, //!< Max Angular Speed
45, //!< Reset Position
);break;
case LEFT_FRONT_LEG_2:
JOINT_CFG(
ptJoints,
LEFT_FRONT_LEG_2,
323, //!< offset
0, //!< start angle
270, //!< end angle
270, //!< Max Angular Speed
45, //!< Reset Position
);break;
case RIGHT_BACK_LEG_2:
JOINT_CFG(
ptJoints,
RIGHT_BACK_LEG_2,
312, //!< offset
0, //!< start angle
270, //!< end angle
270, //!< Max Angular Speed
135, //!< Reset Position
);break;
case RIGHT_MIDDLE_LEG_2:
JOINT_CFG(
ptJoints,
RIGHT_MIDDLE_LEG_2,
311, //!< offset
0, //!< start angle
270, //!< end angle
270, //!< Max Angular Speed
135, //!< Reset Position
);break;
case RIGHT_FRONT_LEG_2:
JOINT_CFG(
ptJoints,
RIGHT_FRONT_LEG_2,
312, //!< offset
0, //!< start angle
270, //!< end angle
270, //!< Max Angular Speed
135, //!< Reset Position
);break;
}
}
...
IMPLEMENT_FSM(SpiderTask)
NO_INIT static uint8_t s_hwJointsCount;
PRIVATE STATE(Spider_Init) BEGIN
s_hwJointsCount = CEREBEL_JOINTS_COUNT;
//! initialize servo service
SERVO.Init ();
SERVO.Start ();
CS_SET_EVENT(&s_wDelayEvent);
TRANSFER_TO_STATE(Spider_Joints_Init);
EXIT_STATE;
END
PRIVATE STATE(Spider_Joints_Init) WAIT_EVENT_BEGIN(&s_wDelayEvent)
if (s_hwJointsCount) {
request_for_delay_ms(250);
joints_calibration(s_tJoints, s_hwJointsCount - 1);
s_hwJointsCount--;
} else {
//! initialize cerebel layer
CEREBEL_CFG(&s_tJoints);
TRANSFER_TO_STATE(Spider_Task);
}
REFLEXIVE_STATE;
END
PRIVATE STATE(Spider_Task) BEGIN
CALL_ACTION(Spider_Go_Front);
REFLEXIVE_STATE;
END
END_IMPLEMENT_FSM
b. 增加一个异步的毫秒级精确延时服务,主要是前面关节初始化的时候需要在每个关节之间插入非阻塞的延时。
这也展示了状态机架构下如何配合调度器实现任务和时间的同步(应用代码参考a):
NO_INIT static event_t s_wDelayEvent;
static volatile uint32_t s_wDelayCounter = 0;
void request_for_delay_ms(uint32_t wDelayMs)
{
SAFE_ATOM_CODE(
s_wDelayCounter = wDelayMs;
)
}
ISR(SysTick_Handler)
{
...
if (s_wDelayCounter) {
s_wDelayCounter--;
if (!s_wDelayCounter) {
CS_SET_EVENT(&s_wDelayEvent);
}
}
...
}
c. v1.2工程模板下载
- 2014-10-23 凌晨 V2版蜘蛛初步完成
历经磨难,原本以为很容易搞定的新版蜘蛛机器人,总算是搞定了——上视频:
数字舵机是0~270度的,非常精准,校准只需要处理offset即可。另外由于安装的原因,坐标系又被迫做了镜像,
回头软件上考虑加入处理,避免这种坐标系上的差异存在。
睡了,好困,其它内容明天再补充。
工程下载
{:victory:}{:victory:}{:victory:}{:victory:}{:victory:}{:victory:} 深夜顶贴! 热烈祝贺!效果还不错! 睡的真晚,蜘蛛不错~ 大师加油~~~~ 大师 果断围观~{:lol:}{:lol:}{:lol:}{:lol:}{:lol:}{:lol:} 蜘蛛 走起! 好啊,又有新程序可用 支持,加油 好啊,祝您早日成功,硬件有没有改进?? 辛苦啦 ,大半夜还在研究 ! 感谢你的程序 大半夜还在研究 !我等楷模啊 谢谢分享...... 力挺巨作蜘蛛 力顶~下来瞻仰一下~ 蜘蛛真不错。 来看哈强大的蜘蛛。 足端貌似有点打滑,穿个橡胶小鞋应该会好点{:smile:} 谢谢LZ
最终硬件是用的哪一版的? 上次信息只知道是用金属陀机 走的很酷 现在10点,6小时前应该是4点左右,太辛苦了!帮顶! 支持一下 加油,加油! 为你的精神与工作态度喝彩!东西真心不错! 支持,学习编程风格 Ticl4 发表于 2014-10-23 09:29
足端貌似有点打滑,穿个橡胶小鞋应该会好点
打滑是必然的,这是系统性的“误差”,必然有打滑,因为现在的算法原理上就没有严格遵守昆虫运动的数学模型。 统一回复大家,硬件从骨架到舵机到驱动电路都更换了。完成的蜘蛛很重,感觉恐怕有3~4kg,手拿着有点吃力。
舵机很专业的样子,力量也很大。这次的蜘蛛平台从硬件资质上绝对不是玩具级的,算是准专业级的。现在的
运动控制算法用在这个蜘蛛上真心对不起它。后面我会实现精确的矢量运动控制算法,从根本上杜绝打滑,并
带来更细腻更灵活的运动方式。 holts2 发表于 2014-10-23 08:04
好啊,又有新程序可用
对你有帮助就好,多少给点使用反馈哦。
友情提示:此代码不可用于商业用途。注意保留版权信息哦。 深夜还在调程序啊 真是敬业啊 good job! 赞,什么时候出套件啊?准备入一个 Gorgon_Meducer 发表于 2014-10-23 10:57
对你有帮助就好,多少给点使用反馈哦。
友情提示:此代码不可用于商业用途。注意保留版权信息哦。 ...
没有硬件,纯学习,绝不会用于商业, 主要学习你的程序结构 挑不出毛病呀。 Gorgon_Meducer 发表于 2014-10-23 10:53
打滑是必然的,这是系统性的“误差”,必然有打滑,因为现在的算法原理上就没有严格遵守昆虫运动的数学模 ...
昆虫运动的数学模型
感情还有这么专业的术语,涨知识了 谢谢
求扫盲 armok 发表于 2014-10-23 11:43
超过2000元成本,你确认舍得买?
好吧,不得不承认这个价格有点高,而且仅仅是成本价。如果能出货价控制在2000左右的话,我可以承受。看舵机批量价格能不能便宜 现在的舵机是用“大扭力数字舵机1501”? 果断先下视频来看一下,看完来赞傻孩子。 shahaizi,真牛 相当棒,和上一代比起来,V2至少看起来很有范,因为蜘蛛的腿是金属所以在地板上会有滑动现象,如果演示的时候放在地毯上效果会更好。 蜘蛛最重要的就是能够不打滑,并且能够适应各种路面。。。 armok 发表于 2014-10-23 11:43
超过2000元成本,你确认舍得买?
2-3千没有问题的,可以先款后货,什么时候出套件?能不能在12月份之前推出? 步之道 发表于 2014-10-23 20:30
相当棒,和上一代比起来,V2至少看起来很有范,因为蜘蛛的腿是金属所以在地板上会有滑动现象,如果演示的时 ...
脚上裹一点塑料垫片,应该就不会滑动了 支持楼主!!! 顶楼主,都是夜猫子! 这个V2看起来结实多了{:victory:} kutf 发表于 2014-10-23 23:40
脚上裹一点塑料垫片,应该就不会滑动了
自己调试的时候裹点塑料垫子是可以的,但是演示怎么能裹塑料垫子呢,除了用点橡胶“鞋套”。不过还是放个垫子方便 大师加油{:victory:} 保持关注大师进度
支持一下 什么时候出套件,购买玩一下。站在巨人肩膀上 顶啊,又有玩的了。 不错,顶!要是代码能通俗点就好了,感觉封装的太多了,向linux风格去了 虽然看不懂还是顶一下吧 真心不错呀,支持。。。 本帖最后由 myqiang1990 于 2014-10-24 09:34 编辑
为何C语言要把它弄成这样?首先比较崇拜楼主~也比较尊敬~~我没仔细看~因为我没有楼主用的编译器也没装看代码的东西~只有一个DEV C++编译器~我只是扫了一眼~~但是我感觉代码有些地方还是不妥当~过多的将一些东西宏化,,让我想起了C专家编程里面一个趣闻~如图:
楼主代码:
/*! state machine implementation */
IMPLEMENT_FSM(DemoTask)
//! state: Demo_Init
PRIVATE STATE(Demo_Init) BEGIN
/*! put your application service code here */
GSP_PORTB.DIR |= PB22_MSK | PB21_MSK;
GSP_PORTE.DIR |= PE26_MSK;
GSP_PORTB.OUTSET = PB22_MSK | PB21_MSK;
GSP_PORTE.OUTSET = PE26_MSK;
IO_CFG(
{PB22,IO_WORKS_AS_FUNC1}, //!< LED Red
{PE26,IO_WORKS_AS_FUNC1}, //!< LED Green
{PB21,IO_WORKS_AS_FUNC1}, //!< LED Blue
);
TRANSFER_TO_STATE(Demo_Task);
REFLEXIVE_STATE;
END
//! state: Demo Task
PRIVATE STATE(Demo_Task) BEGIN
/*! put your none-blocked task code here */
breath_led();
//! for debug
console_task();
CALL_ACTION(Spider_Go_Front);
REFLEXIVE_STATE;
END
END_IMPLEMENT_FSM
C语言专家里面的一个趣闻:
学习楼主精神! myqiang1990 发表于 2014-10-24 09:30
为何C语言要把它弄成这样?首先比较崇拜楼主~也比较尊敬~~我没仔细看~因为我没有楼主用的编译器也没装看代 ...
可以提高效率的,尤其是一些经常被调用但是本身有不复杂的函数上,这时候例如栈操作所费的时间可能超过函数本身所需时间了,用宏可以把这些代码直接写进去,但是又没有多余开销,而且看上去还像用的函数。像是操作系统硬件抽象层就会经常用到类似的方法。 是的,我也同意“myqiang1990”的观点。 硬件改的话 是不是加大电容,这样瞬间可以提供电流 本帖最后由 myqiang1990 于 2014-10-24 14:37 编辑
dawanpi 发表于 2014-10-24 13:12
可以提高效率的,尤其是一些经常被调用但是本身有不复杂的函数上,这时候例如栈操作所费的时间可能超过函 ...
适当可以用__inline~~~~在我读过的代码中,我觉得UCOS的代码是非常优美的~十分清晰有条理~而且代码整整齐齐~看得十分舒服~~一读就懂~~ myqiang1990 发表于 2014-10-24 09:30
为何C语言要把它弄成这样?首先比较崇拜楼主~也比较尊敬~~我没仔细看~因为我没有楼主用的编译器也没装看代 ...
只要你看懂了代码要做什么事情,目的就达到了,至于你是否看懂了代码(知道背后的原理),这不是我关心的。
我是推崇黑盒子思想的,只要知道怎么用就可以了。毕竟底层的东西没有多少价值,而如何用别人提供的服务
设计出满足应用的东西——或者说关注于应用本身才是设计的最终目的。
你如果说你看这个代码不知道这个代码的意图,那么我们可以好好聊聊。 本帖最后由 Gorgon_Meducer 于 2014-10-24 15:37 编辑
myqiang1990 发表于 2014-10-24 14:20
适当可以用__inline~~~~在我读过的代码中,我觉得UCOS的代码是非常优美的~十分清晰有条理~而且代码整整齐 ...
有很多需要大量重复的结构性代码本身是没法用inline的,因为这只是代码片段。
另外用宏虽然看似和inline差不多,但inline很多时候是“强制”的,但用宏就赋予了编译器灵活处理的权利,
他可以inline——如果你选择速度优化的话,也可以不inline——通常是你选择size优化的时候。
宏的作用是给一些重复的代码片段赋予简单易懂的意义,同时也避免书写多次。你可以认为是一种模板,
这种模板当成为一定规模后,实际上确保了你过去用宏固定下来的“成功代码”不会在重写的时候出现
笔误或者偏差。
比如我写过一个宏模板用来产生FIFO的,用起来很方便,也不用担心每次为一个新的特定类型写FIFO
代码的时候会出现笔误或者逻辑错误。
再说个玩笑话:我觉得你属于C语言的“纯血派”。我则是强调实用主义的。我用宏并不是像你看到的文字
那样是为了追求像某种语言(最初我这么尝试过,但发现没有意义,也不好玩),我用宏的目标完全是
为了提高代码效率,降低出错效率,辅助编码规范——比如状态机写出来拥有统一格式之类的。
尤其是C不支持模板,而宏是唯一最接近这一概念的实现了。
计算机科学历来都是“唯心主义”泛滥的圣地,除了做应用与物理世界相连,或者解决数学高度相关的问题,
平时的计算机世界完全就是程序员说了算的。有影响的人可以这么解释一种语言,其它人可以附庸,也可以
提出自己的解释,最牛掰的人干脆自己创造一门语言——尤其是在自己的应用范围自己说了算的时候。
所以,“纯血派”嘛我只能笑笑。我影响我的范围,你影响你的。不过我还是很乐于沟通的。相对于其他直接
MARK的人,我真的非常开心有人说出自己的想法,认真的评论。从这点角度来说,你就是直接骂我,我都
是开心的——毕竟你说的有理有据,还专门耐心去截图。
真的,非常感谢,还请以后继续关注我的帖子。欢迎吐槽~真心的。做技术对事不对人~谢谢你。 kutf 发表于 2014-10-23 23:40
脚上裹一点塑料垫片,应该就不会滑动了
打滑是运动模型的问题,真的裹了东西那就不是打滑了,是舵机要堵转了。现在舵机很牛X,所以即便你裹了东西也会打滑的。
我曾把蜘蛛放在床上爬……你知道棉布的摩擦系数很大的。结果就是机器人罢工了,因为堵转电流太大,驱动电路直接保护了。 要是有KEIL C版本就好了。并且工程代码,太多的封装了,看起来不够直接。 顶牛人啊! Gorgon_Meducer 发表于 2014-10-24 15:27
有很多需要大量重复的结构性代码本身是没法用inline的,因为这只是代码片段。
另外用宏虽然看似和inline ...
恩~~每个人思维和风格习惯都不一样~100种人写同一功能可能会有100种不同写法~~能实现自己想要的功能就行~~
确实,只看懂了代码要做什么,但看不懂代码背后的原理(其实是封装吧)。不过挺喜欢这种格式的,刚好最近在看《UML+OOPC》。
另外,想问一下傻孩子老师,您是用什么编辑器编写代码的呢,电脑上没有可以打开您工程的IAR ijlc1314 发表于 2014-10-24 16:33
确实,只看懂了代码要做什么,但看不懂代码背后的原理(其实是封装吧)。不过挺喜欢这种格式的,刚好最近在 ...
用的就是IAR编辑的。 myqiang1990 发表于 2014-10-24 16:31
恩~~每个人思维和风格习惯都不一样~100种人写同一功能可能会有100种不同写法~~能实现自己想要的功能就行~ ...
求同存异,还期待你下一次来拍砖。 学习下运动控制算法 所有三台蜘蛛全部发货。发完之后看照片才发现好像有一台骨架安装错位了……汗……好在不影响运动。 我是来看蜘蛛人视频滴,哈哈 傻孩子幸苦了 做产品,辛苦了 wh9602 发表于 2014-10-27 06:42
做产品,辛苦了
到产品级的可靠性还早呢。只能保证十几分钟的演示。 更新v1.2工程模板下载 想整个套件玩玩,光看程序理解没有那么快
坐等老大的福利{:smile:} 更新致歉信。对不起大家。 傻孩子老师加油,一直在向您学习。相信您会有更完美的作品!顶你 也向傻孩子老师致歉的勇气致敬! 支持一下,继续加油!!! 没有容易的事,加油 同样感到遗憾。。。 支持一下,再接再厉。。。 支持开源 ,支持傻孩子老师 傻孩子牛人,今天展会目睹了蜘蛛机器人的风采。 学习学习 不错,学习了 支持,期待更好的产品 顶楼主 支持傻孩子!!!{:biggrin:}{:biggrin:}{:biggrin:} 支持傻孩子 支持和关注下 支持傻孩子 支持楼主 进度怎样? 支持老师! 你是我的偶像,加油。 支持,加油 六足机器人吗? 这个很牛的, 下载视频看看。。膜拜大神
页:
[1]
2