无计可施

实在是没有办法了,一时半会儿还琢磨不明白boost的多线程和信号,原本想的美美的程序,只能用最简陋的方式执行一个最简陋的任务,要执行新任务还得重新写代码~~~ > <,具体流程是怎么回事下面的图片说话

 走向操场西北角

 

走向操场西南角

 继续向西南

 到达西南角,开向正南

走向操场东南角

到达东南角,走向机电馆北门

 到达目的地

岁月催老

前几天听到楼下一个女的,估计已经不是女生了,走过一路哼着潇洒走一回,大惊,回到寝室慌里慌张找出来叶倩文的潇洒走一回来听,觉得不过瘾,还巴巴的从verycd上下了叶倩文的不少专辑来。听起来,还是那个年代的曲子好,感情饱满,唱功扎实。从初中之后,几乎就没有在听过两千年之后的曲子——伍芳和王心雅会有两千年之后的专辑。硬盘上一大堆黄莺莺徐小凤大妈级的专辑。

而且还有一个毛病,听到一首曲子觉得好听就单曲循环,开了外放寝室同学就受不了,然而乐此不疲,感觉越听越有味道,尤其喜欢潇洒走一回里面的琵琶伴奏。

白天琢磨了整整一天的一串动作怎么实现,前两天好不容易搭起来一个多线程模型,今天在机器人上死活都读取不了更新数据,晚上在实验室坐了一会儿,原想去搞点机械设计和电控的内容给论文用的,看着还是不死不活的那个多线程程序心里很恼火,于是七点多也很快回来了。期间Y闯进来,原来她不知道今天W老师出差了,晚上不开会,我也是早上才猛然醒悟今天晚上是不开会的,其实W老老早就说这两周不开会什么的,也没在意。觉得Y身上依然洋溢着学生时代青葱岁月的味道,这半年都被操到生不如死了,勉强跟人说话能提兴致,不过一般也就是一两句话,大嗓门说多了理所当然的也就是萎靡了。碰到Y反而要跟着她的调门跑,一连串连笑带侃都觉得有点体力不支了 ><

晚上幸亏碰到Z,没想到他十一点多我都会寝室了,他还在实验室,赶紧抓住他问了问那个多线程的程序,回到寝室终于发现那个子线程代码是重复执行的——Z看了看我的多线程实现方式,淡淡的飘出一句:对调函数,下层数据一更新就通知回调函数处理一下~~~奶奶的,文档说的明明白白了,都用了CALL BACK函数做示例,居然没有醒悟过来,脑子里一直想着windows的线程不是介个样纸的啊~~~之前用过的pThread也不是这个样纸的啊~~~真是戳瞎了两只老虎眼~

下面是晚上最后编译的一次程序的几个顺序截图,多少有了点眉目,实在不想解释了,关于多线程的模型在最后面gang一下。感谢Z,只要你缺钱,明年给你掏一年的域名租金。

顺便说一下,Y同学可能会比较垂涎最后两张图,这两图里player thread及其之上的几个组件都是player运行的内部组件, player thread下面的的几个方框只是客户控制程序,如果加上真正的device物理硬件,那就是完整的一个机器人控制装配图了——在软件上说装配图貌似也蛮合理的其实~

下面是一张单线程处理的框架,跟一张多线程处理的框架,地球人都知道多线程减轻了单个程序的载荷,更加高效地利用处理器。但是要记住啊,同学们,这里第二张图里面的子线程是他妈回调函数啊,主函数里面的player.read();执行一边,所有挂上去的子线程函数都被叫唤一边啊~今天一天,到现在,后半夜,算了算了,睡觉~

单线程

多线程

唉,听着潇洒走一回舍不得,听会儿在睡觉吧

茶几倒了

人走背字,凉水都塞牙,茶几倒了,人生处处是悲剧。昨天还以为是自己学艺不精,装了个Ubuntu就进不去XP,昨天瞎鼓捣了一番好歹是把XP又给重新装上了,还以为是那人的电脑原先的磁盘文件系统的毛病。没想到今天在自己电脑上重装了一下Ubuntu,没想到也进不去的XP了。

可算是吃足了脸皮薄的亏了,联想的台式机就是这种不正常的隐藏分区设置,装了linux就容易进不去xp,其实xp没有被损坏——所以昨天就该给经销商打电话,昨天就不该充好汉。

明天去买本opencv的书,原本是希望实验室买的,但是谁知道W老哪些书恩准哪些不恩准呢,自己买了也带不走。本来么,实验室的编程能力那么差,就应该多买些编程基础的书,偏偏W老心思不在编程上,机器人这玩意又是自己大包大揽弄上身的,自己破费就自己破费吧。今天照着一个入门文档用opencv读了一个图片,尽快和player绑定起来。基本思路是Camera->Player->Client using OpenCV,希望这个思路没有错的。

 FigDes:用OpenCV读入OpenCV的logo再反色

 FigDes:这个图片已经是一周之前的事情了吧,那时候刚刚把Client程序和Player Sever连上,兴奋的不得了。

大吃一惊

N久没来更新GR上的NEU订阅列表和Freunden订阅列表也N久没有更新,只有今天NEU列表和Freunden列表分别有一则更新姗姗来迟,甚感安慰。过完年之后回来连着出来好几件事跳出来,吓得人心惊肉跳,加上W老师要做的机器人也让人愁眉不展,于是更加寝食难安。

———————————————
刚刚给不太熟悉的W小姐回复了一篇关于钢水结晶控制系统设计的邮件,那些控制传递函数的数学根本就不懂,也不关心,其实她是要建立一个钢水结晶液位控制的系统,我比较关心就是各个单元的输入输出关系,至于单元里面做什么就是怎么看懂数学变换和把数学符号组织成MATLAB脚本的问题。本人觉得,这个系统最后还是要用Simulink做下持续的仿真检验。至于各个单元里面的数学怎么看懂,要靠W小姐自己的修为。
———————————————
其实刚刚还给sourceforge的mailing list重新递交了一份自己使用player/stage的问题,因此回到写这篇文章已经很晚了。
———————————————

接着说寝室难安的事情。一边是毕业设计临近,最近几个月才刚刚着手做机器人的系统,所有的一切都重头开始学,包括linux,包括player架构的机器人,包括stage仿真环境的——Player本身即便玩的在精通,也只不过是一组API的空壳,没有实际人脸识别模块,没有语音交互的模块,根本拿不出手说这是机器人。而W老师急于要看到人脸识别和交互的结果,之前有一个windows上用的人脸识别的SDK不要钱,叫做,叫做什么,哦叫做Luxand,以后根本不能让机器人上用。一者是因为windows的,更加让人不齿的事情是要是不给钱一个授权序列号只能用一个月,这怎么玩玩啊。所以眼下这个windows的程序只能粗粗的执行以下人脸记忆和比别,看到熟人了说一声“hello, mike”,“hello, hanmeimei”,根本不能朝Linux上迁移。

另外一件心烦的事情就是,这件事情很重要,机器人必需有一个担当系统集成和消息发布的类似HAL的机制,有这个机制,后续开发的模块才可以按部就班的朝这个系统上添加。这个类似HAL的程序是部署在POSIX系统上,什么linux,unix,mac应该都可以,唯独没有windows,但是现在也可以在windows下用了。问题在于这个windows对于嵌入式系统没什么好口碑,到时候人家都用linux,谁管windows上的用户。偏偏W老不,理解为何本人这么固执要把系统方向定在linux上,她是觉得Linux开发太难了,生怕学生干不了——可那有什么办法呢?现在机械不编程,就只能回家种地抱孩子了。急急火火吃完晚饭就去找老W,跟她提建议从学生跟她打招呼开始就要催促他们学C,要不然这个机器人一百年都出不来。

再者心烦的就是一旦选定了Linux,linux上语音处理的软件开发包太少,英文的一箩一大堆,但是支持中文的寥寥无几——当然前提是不要钱的,都没好意思跟W老提什么什么模块是要钱的——其实科大开发讯飞就支持在Linux上二次开发,只不过是收钱的。怕她嫌贵。好几天,google得嘴里连起了两个水泡,终于确认CMU的sphinx和另外一个eSpeak的开源项目支持中文语音识别和TTS,心里在稍稍放松点。至于图像处理,那个Luxand压根就是个蹩脚货,也即便是在linux上可以用,也不能用。今天晚上会寝室前在自己的笔记本上装了个OpenCV,尝试一下,希望几年之后的师弟师妹向嵌入式迁移的时候这么大的函数库不会成为累赘。

另外晚上有件喜事,让人愁白头发的Player sever connection failed的问题晚上回寝室之前终于有了点眉目,但是本人感觉那是不靠谱的做法——哪有一个客户端程序启动的时候必须先在另外一个terminal里面显式的启动sever,还要带一个.cfg文件用player命令启动sever,正常应该是client程序请求操作系统或者别的什么启动sever,然后在建立client和sever之间的connection。但是好歹是连接上了,心里半块石头落地了。

最近心惊肉跳的事情,确实,蛮多。现实两周前L说她回家领证了,着实大吃一惊,只有半年硕士就毕业了,而且还只见了对方两面,自己就做主把婚事定了——很难理解,L真是艺高人胆大,须眉汗颜。

另外一件事是昨天,哦不,前天才听说的。其实很早就听说下一届有个超牛的女生,年级第一,跟着某L老师做事,有一回L老师带她去外地出差,没想到回来发现误了学校内推考试的事情。原来嘛,人情,说一说,这姑娘不读研可惜了,更何况不是她自己不想读,是因为跟着老师出去做项目不得已耽误的内推考试,求学院法外施仁,给姑娘一条生路。无奈这个L老师跟上面有些疙瘩,这个姑娘读研的事情终于是黄掉了。前天猛地一声惊雷听说这个姑娘今年考研给考回来了,还考得很高——而且居然本人还认识她:原来她就是当年大名鼎鼎的C小姐——当时记得有两个同乡的,一个C,另外一个师弟,本人怂恿他们去信息双控那边做硕士生,那边的氛围比这边好,不知道那个师弟最后有没有做成。反正这个可怜的C小姐,因为上层的矛盾,白白丢掉了白读一场研究生的机会。从C小姐毕业那阵子开始,几个老乡之间就再也没有她的消息,本人当时其实不知道闹得沸沸扬扬的错过内推考试事件就是她,大伙都以为她偷偷摸摸跑回宁波老家种地抱孩子去再也不出山了。没想到今年她考研了,之前,直到现在,都一直在工作,工作日(他们那所谓的工作日都是周一到周六)都是早上七八点干到晚上七八点,就那么点剩下的事情看看书,英语政治压根没复习,回来一鸣惊人,还误打误撞撞到本人现在的实验室来了,大吃一惊。据本人了解的那点事情,估计C是不会编程的了,要是会编程,那也算是可造之才。现在感慨,这世界真小——当年误了我同乡C小姐前程的那位L老师,还跟坐在本人身后那个研一小妹妹的有点亲~

唉,这是何苦。

感慨一下,现在图书馆找书真是越来越难找了

明了明了

这篇文章的草稿其实早就存了,前阵子生活懈怠,于是上周末一连三天,看了三天红楼梦,加上之前几天断断续续看得二三十回,把整本红楼梦娄底又翻了一遍。上一次通读红楼梦都是十年前的事情了,忘了是初一还是初二,懵懵懂懂囫囵吞枣,之后再看红楼梦的时候都是随便在中间翻两页,也不舍得从第一页开始翻,暗地里觉得从第一页开始翻显得不专业。这次从第一页开始翻纯粹是不想干正事,发个大心从头看。

总算是搞明白些情节,之前知道红楼梦里面说过秦可卿跟公公扒灰,但都是从别人那看来说秦可卿跟公公扒灰的,究竟红楼梦在哪回哪节说的,不知道。这次特意留意了一下。原来红楼梦——至少市面上常见的印本上——对这一节没有明着说,是借着焦大的醉话说的,第八回末了王熙凤带着贾宝玉吃完酒从宁府回荣府,正好赶上焦大喝醉了闹事,曹雪芹这么写的:

焦大越发连贾珍都说出来了,乱嚷乱叫说:“我要往祠堂哭太爷去。那里承望到如今生下这些畜牲来!每日家偷狗戏鸡,扒灰的扒灰,养小叔子的养小叔子,我什么不知道?咱们胳膊折了往袖子里藏!”

这句话交代过之后就开始说王熙凤跟贾蓉也是远远的听见了,便都装作没听见。很隐晦的把贾珍贾蓉父子勾引儿媳婶子的奸情抖露了出来。据说另有考证在石头记原本里是有贾珍和秦可卿通奸的直接描写的,只是在如今的红楼梦版本里面没有见到而已。反倒是觉得这样隐晦地写很好,可以让人寻味。

小说嚒,本来嘛,让人玩味玩味就罢了,没有多少大道理好讲的,有些人偏偏要把红楼梦里面的人物跟曹家的族谱对上号,不知道说什么好。

看红楼梦跟看西游记很不同,看西游记越看越冷清,因为说的都不是人事,说的太远,看的人不会投入,缺乏临场感,但是红楼梦说的却是人最关心的事情,情欲,看着看着就容易把自己看进去。讨论自己本人在红楼梦里面愿意扮演谁的角色是件稀松平常的事情,但是要讨论自己在西游记里面扮演谁,就很显得乖张了。红楼梦的情节熟络了,就很乐意把喜欢的段落再看一遍,再到书面去照一遍风月宝鉴——要说到西游记的哪回哪节里面当一回孙悟空,就显得怪诞了。

第一次读红楼梦的时候越看到林黛玉要死就越舍不得,直到最后命薄黄泉还巴望着曹雪芹——当时还不知道有高鹗这茬——给林黛玉颗还魂丹,让她起死回生好让我们皆大欢喜。但是现在看就不觉得了,觉得薛宝钗这样的女人才是上品,林黛玉心眼太小,除了自己就没有别人,还是不招惹的为好。除了薛宝钗,史湘云和贾探春也属上品,一个憨直,一个耿直,心里摆的是正谱——现在唯独林黛玉太多,史湘云贾探春这样的,反倒是不好找了。

红楼梦一气写了一箩女人,着重写的男人却只有贾宝玉一个,这一点让男人很惶恐——这人太虚了,实际生活根本找不着这样的男人,他脑子里只有两个主意,女人都是上品,功名都是下品,这回事情没法说,从社会逻辑看,男人不拼命,哪有女人养尊处优的地位;男人要都不争名利,那社会就要回到母系社会了,生养得是女人做,劳力也要女人出。中国的封建社会和礼教能延续这么多年,至今上层政治是已经改头换面了,但是底层的道德框架却还是原来那套,足见得这套规范的稳定性——虽然越来越多的人不认同了,男女的事情已经变得越发不可收拾了。还能怎样呢,爱咋咋地吧。

Player/Stage中对于.world文件中所涉及的model模块是这么说的:

Summary and default values

    model
    (
    pose [ 0.0 0.0 0.0 0.0 ]
    size [ 0.1 0.1 0.1 ]
    origin [ 0.0 0.0 0.0 0.0 ]
    velocity [ 0.0 0.0 0.0 0.0 ]
update_interval 100

    color “red”
    color_rgba [ 0.0 0.0 0.0 1.0 ]
    bitmap “”
    ctrl “”

    # determine how the model appears in various sensors
    fiducial_return 0
    fiducial_key 0
    obstacle_return 1
    ranger_return 1.0
    blob_return 1
    ranger_return 1.0
    gripper_return 0

    # GUI properties
    gui_nose 0
    gui_grid 0
    gui_outline 1
    gui_move 0 (1 if the model has no parents);

    boundary 0
    mass 10.0
    map_resolution 0.1
    say “”
    alwayson 0

    stack_children 1
    )

update_interval int (defaults to 100)   The amount of simulated time in milliseconds between calls to Model::Update(). Controls the frequency with which this model’s data is generated.

update_interval 这个参数的意思看不懂,郁闷,关键这个Model::Update()函数在哪,干嘛用的。

前阵子好奇,想看看苹果啃了之后究竟能怎么生锈,于是这个苹果啃了之后放了五天——扔了。