大家好,我是喜欢各种拆机的小鱼,今天又拆了个 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上运行。
明天看看能不能控制这个机器人!