ROS控制多台机器人的思路与实现

  • 1. 实现思路
    • 1.1 两台机器人跟随
    • 1.2 多台机器人编队
  • 2 TF工具的使用
    • 2.1 什么是TF
    • 2.2 TF的构成
    • 2.3 向TF工具广播发送自己位置
    • 2.4 向TF工具收听获取坐标关系
  • 3 通过turtlesim实现
  • 4. 如何同时运行多台Turtlebot
    • 4.1 通过命名空间
  • 5. Demo——双机跟随

1. 实现思路

1.1 两台机器人跟随

首先先来缕一缕思路,如果要实现turtlebot2跟随turtlebot1,则需要知道两台机器人之间的位置和姿态的关系。

具体如何获得机器人各自的 位姿坐标 关系,可以通过SLAM建图、里程计、全局相机、动作捕捉设备等等,获取坐标后可以通过广播的方式发给ROS中的 TF工具。之后通过订阅 TF工具 中两机器人的关系即可。

之后通过两机器人之间的位姿关系可获得两机器人的 距离姿态角差值,通过PID控制分别发布 速度角速度 指令,实现机器人的跟随控制。

1.2 多台机器人编队

1.1 中思路,可分别获取多机器人间的坐标关系,此时可以通过 TF工具 中的 静态坐标关系广播 获取所需队形各自位置的坐标,之后如上节一样,每台机器人去跟随自己所需到达的对应坐标即可。

2 TF工具的使用

  • TF工具的讲解见:ROS学习记录(5)——TF工具的使用与练习

2.1 什么是TF

TF是Transformations Frames的缩写。在ROS中,是一个工具,提供了坐标转换等方面的功能。

说白了TF工具就是帮助你完成坐标转换的一个工具,有了它就不用去计算各个坐标系之间的转换了,学过机器人学的应该会对此感受颇深。

2.2 TF的构成

在ROS中,TF工具包包含了三块内容:BroadcasterListenerTF转换工具

ROS中提供的是TF转换工具。转换是通过两个部分来完成的。

  • Broadcaster 负责向TF工具广播 参照物自己的位置 关系
  • Listener 负责向TF工具查看 想要知道的 两个物体间的相对坐标

TF工具底层是通过向量来去实现的。

2.3 向TF工具广播发送自己位置

部分代码

from tf.broadcaster import TransformBroadcaster
from tf.transformations import quaternion_from_eulerbroadcaster = TransformBroadcaster()def pose_callback(msg):if not isinstance(msg, Pose):return# 机器人在参考坐标系的位置msg.x和msg.y,姿态msg.thetatranslation = (msg.x, msg.y, 0)rotation = quaternion_from_euler(0, 0, msg.theta)       # 欧拉角 ->  四元素broadcaster.sendTransform(translation, rotation, rospy.Time().now(), "child", "parent")     # 发广播

其中 quaternion_from_euler 将欧拉角转换为四元素:欧拉角,旋转矩阵。其中欧拉角:roll:x、pitch:y、yaw:z。

sendTransform 中传入的几组数分别为:

  • translation:描述位置
  • rotation:通过四元素来描述姿态
  • Time().now():time,打上时间戳
  • "child":子坐标系(机器人坐标系)
  • "parent":父坐标系(机器人的参考坐标系)

2.4 向TF工具收听获取坐标关系

部分代码

# 获取相对位置信息的listener
listener = TransformListener()rate = rospy.Rate(10)
while not rospy.is_shutdown():try:transform = listener.lookupTransform("target_frame", "source_frame", rospy.Time())except:rate.sleep()continuex, y, z = transform[0]         # 获取位置quat = transform[1]      # 获取姿态 (四元素) -> rpyroll, pitch, yaw = euler_from_quaternion(quat)

lookupTransform 中传入的几组数分别为:

  • "target_frame":参考坐标系
  • "source_frame":求解的坐标系
  • rospy.Time():获得最近的相对位置
    返回的数据为:
  • 位置:[x, y, z]
  • 姿态:[roll, pitch, yaw, w]

3 通过turtlesim实现

待补充

4. 如何同时运行多台Turtlebot

4.1 通过命名空间

启动launch时,前面加上ROS_NAMESPACE='xx',这样的话启动的机器人应该就自带一个命名空了,它所接受的信息都要带xx/前缀,这样可以做到多个机器人分别控制,如:

ROS_NAMESPACE=robot1 roslaunch turtlebot3_bringup turtlebot3_robot.launch --screen
ROS_NAMESPACE=robot2 roslaunch turtlebot3_bringup turtlebot3_robot.launch --screen
ROS_NAMESPACE=robot3 roslaunch turtlebot3_bringup turtlebot3_robot.launch --screen

之后再运行rosrun前也加上命名空间即可对应不同的机器人了

ROS_NAMESPACE=robot1 rosrun turtlebot3_teleop turtlebot3_teleop_key
ROS_NAMESPACE=robot2 rosrun turtlebot3_teleop turtlebot3_teleop_key
ROS_NAMESPACE=robot3 rosrun turtlebot3_teleop turtlebot3_teleop_key

5. Demo——双机跟随

这里放上@清晨的光明的demo

  • 代码地址:
    Github
    码云

ROS控制多台机器人实现多机协同相关推荐

  1. 如何使用ROS控制真实UR5机器人

    PC端系统:Ubuntu 18.04 ros版本:melodic polyscope版本:3.14 机器人:UR5/CB3 以下步骤亲测可用 1.Ubuntu18.04 安装ros-melodic 最 ...

  2. ROS学习笔记-多机器人通信(1)-实现两台机器通信

    ROS是一个分布式的计算环境.一个正在运行的ROS可以在多个机器人之间分布成几十甚至上百个节点.取决于系统的配置方式,任何节点可能需要随时与任何其他节点进行通信,为实现使用同一个master控制多台机 ...

  3. 机器人跳街舞 机智过人_揭秘《机智过人》400台机器人热舞的黑科技

    原标题:揭秘<机智过人>400台机器人热舞的黑科技 2017年12月29日播出的<机智过人>年度盛典,以400台小型人形机器人的街舞表演作为开场.在开场舞蹈中,这些机器人跟随节 ...

  4. 机器人抓取(二)—— ROS 控制 onrobot RG2 / RG6 机械手(第二代)

    机械臂为UR5 CB3 .机械手onrobot第二代rg6夹抓.上位机为Jetson AGX Xavier ubuntu 18.04. 接上篇:机器人抓取(一)-- ROS MoveIt! 程序控制真 ...

  5. ros机器人的上位机和下位机怎么通信

    ROS 机器人的上位机和下位机通信是通过 ROS 网络通信机制实现的.上位机和下位机都是 ROS 节点,它们通过发布和订阅消息来进行通信.上位机可以发布控制命令,而下位机可以发布传感器数据.这种通信方 ...

  6. qwidget多个窗口同步_【好人BUG】本机多组控制 一台电脑使用一个帐号登录多个(省钱) !...

    一台电脑,可以用同一个好人帐号登录N个,达到控制一台电脑分组控制多个窗口同步操作. 这个好人BUG,你是否知道!给你省钱-->--> --------------------------- ...

  7. ROS 教程之 navigation : 用 move_base 控制自己的机器人(1)

    前言: 相信大家在用<ROS by example>学习ROS的过程中,基本上都是使用书本中的例程,在终端输入几行别人已经写好的代码,看看仿真效果.可是这样一来,笔者在跟着书本初略过了一遍 ...

  8. 使用ROS melodic下 控制真实UR5机器人 手把手教程

    背景如题 参考:https://blog.csdn.net/weixin_37806591/article/details/119387696 https://blog.csdn.net/Dawn_y ...

  9. 带相机PLC1200 SCL梯形图混编立体库机器人码垛机伺服视觉程序 包括2台西门子PLC1215程序和2台西门子触摸屏TP700程序

    带相机PLC1200 SCL梯形图混编立体库机器人码垛机伺服视觉程序 包括2台西门子PLC1215程序和2台西门子触摸屏TP700程序 PLC和基恩士相机视觉定位Modbus TCP通讯(SCL语言) ...

最新文章

  1. mysql工具navicat用户授权_Navicat使用教程:在Navicat Premium中管理MySQL用户 - 第4部分:权限管理器工具...
  2. BZOJ 3160 FFT+Manacher
  3. MICROSOFT SQL SERVER 2005 SEPTEMPTER CTP下载
  4. python 使用标准库连接linux实现scp和执行命令
  5. 地址已在使用 java_java – UDP地址已经在使用?
  6. 力扣102. 二叉树的层序遍历(JavaScript)
  7. Bailian1833 POJ1833 排列【全排列】
  8. HDOJ--1879--继续畅通工程
  9. python 路径格式化_「原创」「python自学笔记」python编码规范
  10. 编程入门之C语言入门
  11. 推荐:HP大中华区总裁孙振耀退休十五天后九大感言
  12. 通过正则表达式提取泰坦尼克号字幕里的所有台词
  13. 初中女生数学不好能学计算机,初中女生必看:学好数学的方法及窍门
  14. 726. 原子的数量
  15. html多张图片无缝滚动播放,jQuery实现的多张图无缝滚动效果【测试可用】
  16. 安装truffle的前提条件(nodejs和npm),truffle的webpack案例测试,webpack项目中的报错
  17. srand rand RAND_MAX
  18. Linux系统学习笔记二
  19. ChinaSoft 论坛巡礼 | 软件工程教育论坛
  20. Tim Sweeney解释为什么Unreal Engine 4全面转向C++

热门文章

  1. 使您JavaScript代码更加健壮
  2. android studio 热部署,Android Studio 你不知道的调试技巧
  3. python中字典删除元素
  4. 跨域请求的三种解决方案
  5. 春运抢票:“12306”的架构到底有多牛逼?
  6. Ubuntu抽风(二)
  7. 如何设置电子表格的表头不动,剩下的单元格滑动?
  8. 课程目标以及课堂作业
  9. 怎么把电脑硬盘文件恢复回来?跟着我这么做
  10. mysql中DML语句