赞
踩
大家好,我是喜欢各种拆机的小鱼,今天又拆了个 USB-CAN 隔离收发器,发现这个模块的隔离做的真的很不错。先放个图,后面抽空再给大家分享。
今天接着昨天的拆机,昨天放了一个配置文件 ruby_chassis.cfg 的内容,今天经过后台小伙伴的指导,知道了这个文件和机器人框架robot-player有关系。
这一点也很符合之前我们看到的动态链接库。
root@rockrobo:/opt/rockrobo/cleaner/lib# ls
libNavDriver.so libpkginfoapi.so libplayerdrivers.so libplayerutil.so librrlocale.so librubysupport.so
libblcommon.so libplayerc++.so libplayerinterface.so libplayerwkb.so librrlog.so libuart_api.so
libcares.so.2 libplayerc.so libplayerjpeg.so libroboipc.so librrslamdrv.so libuart_api.so.3
libcares.so.2.1.0 libplayercommon.so libplayertcp.so librrcurl.so.4 librubycompassdriver.so libuart_api.so.3.2.1
libchassisdriver.so libplayercore.so libplayerudp.so librrcurl.so.4.3.0 librubylaserdriver.so
小鱼去查了一下,真的发现了这个开源库。
https://github.com/playerproject/player
小鱼大概翻了一下代码,找了个简单的 Python 例子
这个例子是发送角速度线速度进行控制
import math from playerc import * # Create a client object c = playerc_client(None, 'localhost', 6665) # Connect it if c.connect() != 0: raise playerc_error_str() # Create a proxy for position2d:0 p = playerc_position2d(c,0) if p.subscribe(PLAYERC_OPEN_MODE) != 0: raise playerc_error_str() # Retrieve the geometry if p.get_geom() != 0: raise playerc_error_str() print 'Robot size: (%.3f,%.3f)' % (p.size[0], p.size[1]) # Create a proxy for laser:0 l = playerc_laser(c,0) if l.subscribe(PLAYERC_OPEN_MODE) != 0: raise playerc_error_str() # Retrieve the geometry if l.get_geom() != 0: raise playerc_error_str() print 'Laser pose: (%.3f,%.3f,%.3f)' % (l.pose[0],l.pose[1],l.pose[2]) # Start the robot turning CCW at 20 deg / sec p.set_cmd_vel(0.0, 0.0, 20.0 * math.pi / 180.0, 1)
重点来了
c = playerc_client(None, 'localhost', 6665)
6665 ,记得昨天扫描端口的时候看到的这个吗?
Not shown: 9998 closed tcp ports (conn-refused)
PORT STATE SERVICE
22/tcp open ssh
6665/tcp open irc
irc 服务,原来是player提供的
那我们连上后是不是可以直接控制呢?
明天试试
今天继续看看昨天的配置文件
继续看框架源码
在 config 里,随便打开一个配置文件,可以看到下面的内容
driver ( name "p2os" provides ["odometry::position:1"] port "/dev/ttyS0" ) driver ( name "sicklms200" provides ["laser:0"] port "/dev/ttyS1" ) driver ( name "mapfile" provides ["map:0"] filename "mymap.pgm" resolution 0.1 ) driver ( name "amcl" provides ["localize:0"] requires ["odometry::position:1" "laser:0" "laser::map:0"] ) driver ( name "vfh" provides ["position:0"] requires ["position:1" "laser:0"] safety_dist 0.1 distance_epsilon 0.3 angle_epsilon 5 ) driver ( name "wavefront" provides ["planner:0"] requires ["position:0" "localize:0" "map:0"] safety_dist 0.15 distance_epsilon 0.5 angle_epsilon 10 )
这个的格式和昨天看到的这个扫地机器人上的一样
所以要分析昨天的文件,就要学会大概这个框架怎么用
利用这个框架,应该也能控制机器人动起来,拿到雷达数据之类的(你说改改能不能换个系统装ROS2呢?)
今天就简单的介绍下这个 Player 框架
跨平台机器人设备接口和服务器。
关于Player
Player是用于机器人控制的网络服务器。在您的机器人上运行,Player通过IP网络为机器人的传感器和执行器提供了一个干净简单的界面。您的客户端程序通过TCP套接字与Player通信,从传感器读取数据,向执行器写入命令,并动态配置设备。
Player支持各种机器人硬件。最初的Player平台是ActivMedia Pioneer 2系列,但支持其他几个机器人和许多常见的传感器。Player的模块化架构使得添加对新硬件的支持变得容易,活跃的用户/开发者社区贡献了新的驱动程序。
Player可以在Linux(PC和嵌入式)、Solaris、BSD和Windows上运行。
明天看看能不能控制这个机器人!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。