当前位置: 首页 > news >正文

ROS 2机器人操作系统与Gazebo机器人仿真

在ROS 2系统中,驱动多台机器人涉及多个关键组件和概念,这些组件协同工作以实现多机器人系统的有效控制和协调。多机器人系统通常涉及协同工作和任务分配。ROS 2通过服务、参数服务器和自定义消息等功能,实现任务分配和协同工作的有效管理,例如,一个中心节点可以分配任务给多台机器人,并收集和汇总任务执行的结果。以下通过两个群机器人的控制案例,介绍利用ROS 2实现多机器人控制的方法。
4.3.1 案例:随机游走
利用ROS 2的通信机制,在TurtleSim在仿真环境中创建多个小海龟,并使这些小海龟在仿真环境中随机游走,效果如图4-6所示。

图4-6 随机游走
实现多个小海龟的随机游走,需要先创建多个小海龟,然后需要向创建的各个小海龟发布控制速度的话题。创建小海龟可通过在Launch文件里调用/spwan服务实现,根据命名空间创建控制各个小海龟运动的节点。具体的实现步骤如下:
1.编写控制节点
创建控制一个小海龟随机游走的random_walk.py节点,代码如下:

ros2_ws4/src/turtle_exercise/turtle_exercise/random_walk.py

import rclpy
from rclpy.node import Node
from geometry_msgs.msg import Twist
import random

class RandomWalk(Node):
def init(self):
super().init('random_walk')
self.turn = False if random.random() < 0.5 else True
self.current_msg = Twist()
self.walk = self.create_timer(3, self.random_speed)
self.cmd_publisher = self.create_publisher(Twist, 'cmd_vel', 10)

def random_speed(self):msg = Twist()if self.turn:sign = 1 if random.random() < 0.5 else -1msg.angular.z = random.uniform(1.0  ,  2 * 1.0 ) * sign  msg.linear.x = 0.0self.walk.cancel()self.walk = self.create_timer(random.uniform(0, 2.0), self.random_speed)else:msg.angular.z = 0.0msg.linear.x = 1.0self.walk.cancel()bu = random.uniform(2.5, 4.5)self.walk = self.create_timer(bu, self.random_speed)self.turn = not self.turnself.cmd_publisher.publish(msg)

def main(args=None):
rclpy.init(args=args)
node = RandomWalk()
try:
rclpy.spin(node)
except Exception:
rclpy.shutdown()
exit(0)
rclpy.shutdown()

if name == 'main':
main()
以上代码定义了一个继承自Node的RandomWalk类,主要功能是:
(1)在类初始化方法方法__init__()。定义变量self.turn表示机器人是否转向,并初始化为随机的布尔值。定义变量self.current_msg,并初始化为一个空的Twist消息对象,用于存储当前的运动指令。创建一个定时器self.walk,每隔3s触发一次self.random_speed()回调函数,实现机器人的随机移动。创建了一个话题发布者self.cmd_publisher,发布Twist消息到'cmd_vel'话题,控制小海龟的运动。
(2)定时器回调函数random_speed()。如果变量self.turn为True,则表示当前要转向,随机选择一个方向(正向或反向),设置线速度设置为0,生成一个随机的角速度;如果self.turn为False,则表示当前直行,设置角速度为0,线速度设置为1。self.walk.cancel()取消当前的定时器,根据不同情况重新创建一个定时器,以实现不同的定时运动间隔。最后,使用self.cmd_publisher.publish(msg)发布生成的Twist消息,控制机器人的运动。
2.编写Launch文件
编写Launch文件启动所需的节点,完成多个小海龟的生成多并使其随机游走。创建random_walk_launch.py文件,代码如下:

ros2_ws4/src/turtle_exercise/launch/random_walk_launch.py

from launch import LaunchDescription
from launch_ros.actions import Node
from launch.actions import ExecuteProcess
import random

def generate_launch_description():
turtle_num = 10
ld = LaunchDescription()

sim = Node(package='turtlesim',executable='turtlesim_node',name='sim')
ld.add_action(sim)for i in range (turtle_num):name = 'turtle' + str(i+1)turtle = Node(package='turtle_exercise',executable='random_walk',namespace=name)ld.add_action(turtle)x=random.random()*11y=random.random()*11cmd=f'x: {x}, y: {y}, name: {name}'ep=ExecuteProcess(cmd=[['ros2 service call ','/spawn ' ,'turtlesim/srv/Spawn ','"{' + cmd + '}"',]], shell=True)ld.add_action(ep)return ld

在以上代码中,利用Python语言中的循环创建了控制小海龟的节点和生成小海龟的服务调用,并通过对控制节点命名空间的设置使控制节点与特定的小海龟建立联系,对小海龟实现控制。
3.运行仿真
编译和安装功能包后,运行Launch文件,命令如下:
ros2 launch turtle_exercise random_walk_launch.py
上述命令的运行效果如图4-6所示,在仿真环境中生成多个小海龟,并使小海龟们进行随机游走。

http://www.gsyq.cn/news/17184.html

相关文章:

  • 完整教程:BUUCTF[ACTF2020 新生赛]Include 1题解
  • LINUX之TCP内核参数解析
  • 实用指南:基于langchain的简单RAG的实现
  • 2025双氧水厂家权威推荐榜:优质生产与稳定供应实力之选
  • 英国AI数据中心发展规划:技术挑战与产业反馈
  • 2025 年工业风机厂家最新推荐排行榜:涵盖离心高温防腐耐磨防爆等类型设备实力厂商精选高温/防腐/耐磨/防爆/除尘/不锈钢/锅炉风机厂家推荐
  • 2025 年最新推荐!种植牙医院权威榜单:聚焦连锁品牌与万级手术室,助您精准选靠谱口腔机构西宁种植牙口腔医院/西宁种植牙齿美容/西宁种植牙美容医院推荐
  • 2025 年最新推荐西安路灯厂家排行榜:市政 / LED / 智慧 / 太阳能 / 农村路灯优质企业全景指南
  • 2025 最新红绿灯厂家推荐排行榜:实力厂家技术与口碑深度解析,交通信号设备优选指南交通信号/路口红绿灯厂家推荐
  • Claude Code完整安装部署指南:支持Windows/Linux/macOS三平台详细教程
  • 2025 年淋膜机厂家最新推荐排行榜:覆盖纸张 / 无纺布 / 高速 / 全自动等多类型设备,精选优质企业助力精准选购
  • 2021年度十大前沿科技研究盘点
  • 2025 最新推荐:全国开锁公司口碑排行榜权威甄选,含智能锁专项服务与紧急上门品牌详解全国/汽车保险柜/汽车锁/保险柜/智能/快速上门开锁公司推荐
  • CSP - J 讲义内容与CSP - S 讲义内容对比
  • h5的aliplayer-min.js 加密视频会走到debugger - 教程
  • python“锈化”库替代,性能更快的库
  • docker B站学习 - 实践
  • 在AI技术唾手可得的时代,挖掘新需求成为制胜关键——某知名自动化脚本工具需求洞察
  • 白箱算力与AI元人文:一场从“求解”到“创造”的范式革命
  • vm ubuntu22安装docker
  • 重装系统后 D 盘软件搜不到?3 步搞定快捷方式与搜索问题
  • PVS 可见性剔除示意图
  • Ambari安装Hadoop
  • 数据仓库中的“时间旅行者”:深入理解渐变维度(SCD)与拉链表
  • MOVEit网络攻击波及普华永道与安永,供应链安全再响警钟
  • Penchick Online Mathematical Olympiad, Qualifying Test 1, III.4
  • 多区域多 VLAN 网络搭建与访问控制及服务器部署实验
  • Tina_Linux_系统软件 开发指南
  • 实用指南:C++ 建造者模式:简单易懂的设计模式解析
  • Python中的数据结构