当前位置:   article > 正文

终于搞清楚这个扫地机用什么框架了!2024第八拆来了_扫地机软件架构

扫地机软件架构

大家好,我是喜欢各种拆机的小鱼,今天又拆了个 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

小鱼去查了一下,真的发现了这个开源库。

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

重点来了

c = playerc_client(None, 'localhost', 6665)
  • 1

6665 ,记得昨天扫描端口的时候看到的这个吗?

Not shown: 9998 closed tcp ports (conn-refused)
PORT     STATE SERVICE
22/tcp   open  ssh
6665/tcp open  irc
  • 1
  • 2
  • 3
  • 4

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
)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

这个的格式和昨天看到的这个扫地机器人上的一样

所以要分析昨天的文件,就要学会大概这个框架怎么用

利用这个框架,应该也能控制机器人动起来,拿到雷达数据之类的(你说改改能不能换个系统装ROS2呢?)

今天就简单的介绍下这个 Player 框架

跨平台机器人设备接口和服务器。

关于Player

Player是用于机器人控制的网络服务器。在您的机器人上运行,Player通过IP网络为机器人的传感器和执行器提供了一个干净简单的界面。您的客户端程序通过TCP套接字与Player通信,从传感器读取数据,向执行器写入命令,并动态配置设备。

Player支持各种机器人硬件。最初的Player平台是ActivMedia Pioneer 2系列,但支持其他几个机器人和许多常见的传感器。Player的模块化架构使得添加对新硬件的支持变得容易,活跃的用户/开发者社区贡献了新的驱动程序。

Player可以在Linux(PC和嵌入式)、Solaris、BSD和Windows上运行。

明天看看能不能控制这个机器人!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/744247
推荐阅读
相关标签
  

闽ICP备14008679号