ROS控制多台机器人实现多机协同
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工具包包含了三块内容:Broadcaster
,Listener
,TF转换工具
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控制多台机器人实现多机协同相关推荐
- 如何使用ROS控制真实UR5机器人
PC端系统:Ubuntu 18.04 ros版本:melodic polyscope版本:3.14 机器人:UR5/CB3 以下步骤亲测可用 1.Ubuntu18.04 安装ros-melodic 最 ...
- ROS学习笔记-多机器人通信(1)-实现两台机器通信
ROS是一个分布式的计算环境.一个正在运行的ROS可以在多个机器人之间分布成几十甚至上百个节点.取决于系统的配置方式,任何节点可能需要随时与任何其他节点进行通信,为实现使用同一个master控制多台机 ...
- 机器人跳街舞 机智过人_揭秘《机智过人》400台机器人热舞的黑科技
原标题:揭秘<机智过人>400台机器人热舞的黑科技 2017年12月29日播出的<机智过人>年度盛典,以400台小型人形机器人的街舞表演作为开场.在开场舞蹈中,这些机器人跟随节 ...
- 机器人抓取(二)—— ROS 控制 onrobot RG2 / RG6 机械手(第二代)
机械臂为UR5 CB3 .机械手onrobot第二代rg6夹抓.上位机为Jetson AGX Xavier ubuntu 18.04. 接上篇:机器人抓取(一)-- ROS MoveIt! 程序控制真 ...
- ros机器人的上位机和下位机怎么通信
ROS 机器人的上位机和下位机通信是通过 ROS 网络通信机制实现的.上位机和下位机都是 ROS 节点,它们通过发布和订阅消息来进行通信.上位机可以发布控制命令,而下位机可以发布传感器数据.这种通信方 ...
- qwidget多个窗口同步_【好人BUG】本机多组控制 一台电脑使用一个帐号登录多个(省钱) !...
一台电脑,可以用同一个好人帐号登录N个,达到控制一台电脑分组控制多个窗口同步操作. 这个好人BUG,你是否知道!给你省钱-->--> --------------------------- ...
- ROS 教程之 navigation : 用 move_base 控制自己的机器人(1)
前言: 相信大家在用<ROS by example>学习ROS的过程中,基本上都是使用书本中的例程,在终端输入几行别人已经写好的代码,看看仿真效果.可是这样一来,笔者在跟着书本初略过了一遍 ...
- 使用ROS melodic下 控制真实UR5机器人 手把手教程
背景如题 参考:https://blog.csdn.net/weixin_37806591/article/details/119387696 https://blog.csdn.net/Dawn_y ...
- 带相机PLC1200 SCL梯形图混编立体库机器人码垛机伺服视觉程序 包括2台西门子PLC1215程序和2台西门子触摸屏TP700程序
带相机PLC1200 SCL梯形图混编立体库机器人码垛机伺服视觉程序 包括2台西门子PLC1215程序和2台西门子触摸屏TP700程序 PLC和基恩士相机视觉定位Modbus TCP通讯(SCL语言) ...
最新文章
- mysql工具navicat用户授权_Navicat使用教程:在Navicat Premium中管理MySQL用户 - 第4部分:权限管理器工具...
- BZOJ 3160 FFT+Manacher
- MICROSOFT SQL SERVER 2005 SEPTEMPTER CTP下载
- python 使用标准库连接linux实现scp和执行命令
- 地址已在使用 java_java – UDP地址已经在使用?
- 力扣102. 二叉树的层序遍历(JavaScript)
- Bailian1833 POJ1833 排列【全排列】
- HDOJ--1879--继续畅通工程
- python 路径格式化_「原创」「python自学笔记」python编码规范
- 编程入门之C语言入门
- 推荐:HP大中华区总裁孙振耀退休十五天后九大感言
- 通过正则表达式提取泰坦尼克号字幕里的所有台词
- 初中女生数学不好能学计算机,初中女生必看:学好数学的方法及窍门
- 726. 原子的数量
- html多张图片无缝滚动播放,jQuery实现的多张图无缝滚动效果【测试可用】
- 安装truffle的前提条件(nodejs和npm),truffle的webpack案例测试,webpack项目中的报错
- srand rand RAND_MAX
- Linux系统学习笔记二
- ChinaSoft 论坛巡礼 | 软件工程教育论坛
- Tim Sweeney解释为什么Unreal Engine 4全面转向C++