这是由在读于Tokyo Institute of Technology的博士生Liu Xinyu写的一篇文章,文章以机器人Quadlator II为实例,详细描述了如何使用嵌入式RTLinux OS组建机器人控制系统。这里是第一章。
使用嵌入式RTLinux OS组建机器人控制系统
第一章 基本系统
兄弟我要控制的机器人是一个4足12关节机器人(每足3关节),各个关节由直流电机驱动,直流电机自带了Encoder,以测量转速.核心控制计算机采用东京工业大学的产品化嵌入式系统,T.I.Tech Wire(就是第三产业的副产品.价格变态,约30万日元,比它好了不知多少倍的PDA才卖不到7万日元)以下简称TITechWire.同时一起购买了titechwire用的DAC模块,IO Counter模块,通讯模块,titechwire把计算好的转角指令(或者转矩)通过DAC输入电机驱动模块TITech Robot Driver. 这个driver利用pwm驱动电机,电机旋转后encoder的脉冲送入IO Counter模块,该模块在把角度送入titechwire.
在我的系统中,titechwire不进行复杂的运动姿态和控制算法计算.它把各个电机的角度打包利用socket通过无线LAN上传给PC机,该机器上运行我用Visual C++ 写的控制算法和姿态计算程序,程序把计算后各个电机应该转动的角度命令打包在通过Winsock传给titechwire.titechwire把12个关节的角度分配给各个titech robot dirver.如此循环.控制程序为了计算矩阵方便快速采用了Matlab数学库接口Matcom 4.5中的Matlib
关键词: TITech Wire, TITech-Wire, TITechWire.
在此之前,我已经有了利用Visual C++和Matlib在Windows 9x下直接控制ISA Bus的DA卡和Counter卡进行第一代机器人控制的经验.现在高层程序不变,底层移植到Linux上,中层程序改用网络通讯实现.
购入的titechwire系统有如下部分
- titechwire 主板
- titechwire cpu板
- titechwire PCMCIA接口板
- titechwire DAC模块
- titechwire ADC-IO-Counter模块
- tietchwire 模块间通讯组件
- 各部分用电缆连线若干
1.1组装
- 把titechwire的cpu板,插入到主板上,cpu板和现在计算机里的ram条插法相似,有一个不左右对称的缺口,这样不用担心插反.
- 如果有CF卡(Compact Flash),插入到背面,CF卡可以是type1或者type2的,单要求是5V,不能是3.3V,根据说明书,CF卡被自动当成D盘处理
- 把PCMCIA接口板,插到主板上,我的情况是,购买时PCMCIA卡已经插到主板上.
- 把无线网卡插入到PCMCIA接口板上
- 把电源连线插好,具体可以参考购买时的附件光盘,电源电缆有2根红线,并联接+5V,有2根黑线,并联接GND,注意直流电源至少要提供2A的电流,如果后面的电机功率比较大,则至少要3A电流.
- 连接RS232接口.附件的电缆中有一RS232接口线,一边为标准Desub 9 (male).一边是4线插口,连接titechwire主板.主板上有2个RS232接口,我建议接1,因为系统配置中/etc/inittab仅仅打开了串口1(后面会详细介绍)
以上步骤完成后,基本系统如图Fig. 1所示
Fig. 1 CPU板,主板,PCMCIA板,无线网卡组成基本系统
1.2 Run it to Test
Titechwire设计时,没有保留显示器接口,和键盘接口.因此无法利用外界键盘和显示器的方法,像对付普通pc机那样对付它.
titechwire 在购买时,一般预装了操作系统(可能是Windows 9X/NT,Linux),我买的这款预安装了RTLinux(我个人认为应该是Linux,RTLinux不算真正的操作系统,它只不过是寄生在Linux上的一组模块)
可以通过普通计算机运行模拟终端软件,经过RS232来控制titechwire.
首先你需要一条RS232接口电缆,把titechwire上的dsub9和计算机的串口连接起来.这条电缆可以购买,也可以自制.9
然后你需要一台普通pc机.(可以是linux也可以是Windows).先说Windows.
日本学生喜欢用一个软件tero term,其实根本没有必要.Windows自己带了必备的软件HyperTermial中文叫超级终端.
个人认为titechwire的说明资料真TM烂.除了自带光盘外,什么说明书,user guide统统没有.我只好问发明titechwire的实验室,串口的波特率是多少,结果是
- 波特率19200bps,
- 数据位8,
- 奇偶校验无,
- 停止位1
现在打开超级终端.设置好串口波特率等通讯格式,然后打开titechwire的电源,(titechwire上面根本没有电源开关,你只好给直流电源加一个开关)
titechwire的4个指示灯(LED)一阵狂闪后.Linux boot起来了.超级终端上开始显示整屏幕的启动信息…..NN的Linux启动就是罗嗦.
然后提示:
wsap32FE login:
让你输入帐户名,密码.
查阅了光盘所有的资料,还有包装盒子,没有一处著名了Root的密码. 我faint的一塌糊涂……只好打电话问生产商,结果密码是
TW1x520
肚子里用各种词汇骂了一通之后,先动手改密码
passwd
然后把密码改成Quadlator2 (我机器人的名字)
好了,到此为止,至少说明titechwire系统正常能run了
注意:不要使用titech的串口2,titechwire根本就把串口2封了,观察/etc/inittab文件,会发现这样的内容
#Serial lines
s1:12345:respawn:/sbin/agetty 19200 ttyS0 vt100
# s1:12345:respawn:/sbin/agetty 19200 ttyS1 vt100
看到了吧,串口2给注释调了.多黑!
1.3配置无线网络
必须配置无线网络!,否则太不爽了.理由主要如下
l 你要用自己写的程序控制机器人,titechwire仅仅自带了一个基本的操作系统.连编译器都没有(gcc).所以你不要指望在titechwire上写程序,并且编译(编辑器只有vi,不是vim你估计受不了)
l 要把写好程序的程序编译复制到titechwire上,光靠串口终端肯定没戏.你当然可以用CF卡.可是如果titech安装在机器人的肚子里后,每次都打开肚子,是在麻烦.
l 如果有了无线网后,你只要在pc机上写好程序,在ftp过去(有人喜欢用rcp).如果想直接控制他,可以用ssh(或者telnet,烂烂的titechwire竟然保留了telnet)
1.3.1基本网络配置
titechwire能够认出绝大多数无线网卡,这个比较舒服,查看/etc/pcmica/network.opts发现好多无线网卡的模块都有了.因此只要你有无线AP就可以了.
运行ifconfig
系统列出了lo和eth0,说明无线网卡已经工作了.ip是
192.168.100.43
可是我的pc在192.168.0.x的网段内.跑去问管理员,在router上做了一个映射,ok.无线就通了.在自己的pc上ping 192.168.0.43.一切正常
顺便说一句,如果你的无线AP不带router功能.那么你只好手动设置固定ip了.方法如下:
运行netcfg,系统说没有,运行netconfig系统说没有,在烂titechwire上,这些方便的工具都没有,你只好手动改配置文件.
不要指望用ipconfig eth0 ipaddr的方法来改ip那只能改一时,下次就不灵了.
编辑/etc/rc.d/rc.inet1
里面可以改你的ip设置
IPADDR=”192.168.100.43”
NETMASK=”255.255.255.0”
NETWORK=”192.168.100.0”
BROADCAST=”192.168.100.255”
GATEWAY=”192.168.100.1”
就成了.当然还要禁止掉dchp
编辑/etc/pcmcia/network
可以看到这样的内容
elif is_true $DHCP; then后面是调用dhcpcd启动去获取ip的脚本,说明要把$DHCP变量设置成NO
继续查看/etc/pcmcia/network.opts
会发现这样的行.
DHCP=”y”
把这个改成n就能不启动DHCP
1.3.2改一个酷点的hostname
每次启动都是命名我的机器名字是wasp32FE,是在太土鳖了.决心改一个酷点的hostname
尝试了改了很多配置文件,都不成,最后发现在这里
/etc/pcmcia/network.opts
DHCP_HOSTNAME=xxxxxxxxxxxxxxxx
把他注释掉,改成我的机器人名字
DHCP_HOSTNAME=”quadlator”
到此位置,基本上已经把titechwire最基本的东西配置好了.现在你可以在网络上任何一台计算机控制他.(ssh或者telnet,ftp等等).
使用嵌入式RTLinux OS组建机器人控制系统总介绍
|