ROS笔记八(基于Python、Kinetic):gazebo初探——实现turtlebot移动并避开障碍

UR5双臂Gazebo仿真(Python) 近来在Gazebo上搭了一个ur5双臂仿真平台。 差不多就是以下这样。 使用rostopic list查看一下话题,如下 显然,采用/left_arm_controller/follow_joint_trajectory/goal和/right_arm_controller/follow_joint_trajectory/goal两个话题来控制双臂的运动。 现在的问题是,如何保证双臂运动的一致性,即如何能保证双臂能同时接受到以上两个消息。 思路一:设置/left_arm_controlle 阅读详情

前言:代码实现在gazebo7仿真环境中turtlebot机器人的自由移动并避开障碍物。

1.创建新的工作空间:

创建工作空间文件树:

$ mkdir -p ~/wanderbot_ws/src
$ cd ~/wanderbot_ws/src
$ catkin_init_workspace

创建一个“wanderbot”程序包:

$ cd ~/wanderbot_ws/src
$ catkin_create-pkg wanderbot rospy geometry_msgs sensor_msgs

依赖包:rospy(python编译)、geometry_msgs(用于传递机器人速度等数据)、sensor_msgs(用于传递机器人传感器数据)。

2.代码实现:

代码1:实现turtlebot移动和停止:

#!/usr/bin/env python
import rospy
from geometry_msgs.msg import Twist
#声明‘cmd_vel’的话题,消息类型为Twist,“queue_size=1”:rospy只缓冲一个消息
cmd_vel_pub = rospy.Publisher('cmd_vel', Twist, queue_size=1)
#节点初始化
rospy.init_node('red_light_green_light')
#创建一个Twist消息,初始值为零
red_light_twist = Twist() #停止消息流
green_light_twist = Twist() #移动消息流
#指定消息中linear沿着x方向速度
green_light_twist.linear.x = 0.5

driving_forward = False
light_change_time = rospy.Time.now()
#设置速率
rate = rospy.Rate(10)

while not rospy.is_shutdown():
  if driving_forward:
    #持续发布速度命令消息流
    cmd_vel_pub.publish(green_light_twist) 
  else:
    cmd_vel_pub.publish(red_light_twist)
  #检测系统时间,三秒周期性改变
  if rospy.Time.now() > light_change_time: 
    driving_forward = not driving_forward
    light_change_time = rospy.Time.now() + rospy.Duration(3)
  rate.sleep() 

 代码2:检测机器人前方障碍物的距离:

#!/usr/bin/env python

import rospy
from sensor_msgs.msg import LaserScan
#回调函数:将数据输出到终端
def scan_callback(msg):
  range_ahead = msg.ranges[len(msg.ranges)/2]
  print "range ahead: %0.1f" % range_ahead
#节点初始化
rospy.init_node('range_ahead')
#订阅‘scan’话题,消息类型LaserScan
scan_sub = rospy.Subscriber('scan', LaserScan, scan_callback)
rospy.spin()

 代码3:感知环境并移动

#!/usr/bin/env python

import rospy
from geometry_msgs.msg import Twist
from sensor_msgs.msg import LaserScan

def scan_callback(msg):
   #全局变量存储激光扫描器检测到的最小距离
  global g_range_ahead
  g_range_ahead = min(msg.ranges)

g_range_ahead = 1 
#订阅‘scan’话题,消息类型LaserScan
scan_sub = rospy.Subscriber('scan', LaserScan, scan_callback)
#发布‘cmd_vel’话题,消息类型Twist,只缓冲一个消息
cmd_vel_pub = rospy.Publisher('cmd_vel', Twist, queue_size=1)
#节点初始化
rospy.init_node('wander')
#获取系统当前时间
state_change_time = rospy.Time.now()
#前进/转向状态参数
driving_forward = True
#设置速率
rate = rospy.Rate(10)

while not rospy.is_shutdown():
  if driving_forward:
    # 如果机器人距离障碍小于0.8M或则运行时间大于30秒,停止前进并转向
    if (g_range_ahead < 0.8 or rospy.Time.now() > state_change_time):
      #停止
      driving_forward = False
      #转向
      state_change_time = rospy.Time.now() + rospy.Duration(5)
  
  else:
    if rospy.Time.now() > state_change_time:
      driving_forward = True # 完成转向,继续前进
      state_change_time = rospy.Time.now() + rospy.Duration(30)
  
  twist = Twist()
  if driving_forward:
    #指定前进时的线速度
    twist.linear.x = 1
  else:
    #指定转向时的角速度
    twist.angular.z = 1
  cmd_vel_pub.publish(twist)

  rate.sleep()

3.安装gazebo:

$ sudo apt-get install ros-kinetic-turtlebot-gazebo

4.打开gazebo:

打开gazebo:

$ roslaunch turtlebot_gazebo turtlebot_world.launch

因为系统没有模型文件,所以加载非常缓慢,点击下载模型库即可。下载完成后解压至~/.gazebo/models/目录下即可。

5.在gazebo中运行turtlebot:

打开新的终端:

$ cd ~/wanderbot_ws/src/wanderbot/src

增加可执行权限:

$ chmod +x wander.py

运行程序:

./wander.py cmd_vel:=cmd_vel_mux/input/teleop

这里使用ROS的重映射,因为turtlebot订阅‘Twist’消息的话题是cmd_vel_mux/input/teleop而不是cmd_vel。 

6.问题记录:

笔者在运行时候出现了下面的问题:

始终没找到办法解决,现在回想可能是在安装过程中:在终端最后一行出现File to patch:不明所以,Ctrl C也不能退出,最后强行关掉了终端。最后卸载了gazebo重新安装才得以解决。

安装完成后gazebo7所依赖的包如下:

 关于gazebo卸载:

$ sudo apt-get remove gazebo*
$ sudo apt-get remove libgazebo*
$ sudo apt-get remove ros-kinetic-gazebo*

直到终端执行dpkg -l | grep gazebo 没有输出即完全卸载。

ROS笔记九(基于Python、Kinetic):gazebo中通过键盘输入控制turtlebot机器人移动和转向 前言: Twist消息能描述所有的3D运动,在控制差分驱动的平面运动机器人时,只需要使用其中的两个参数:线性速度(前进/后退)和绕竖直轴的角速度。所以只需要简单地发送线速度(米每秒)和角速度(弧度每秒)命令。这里需要两个程序:一个程序用来监听键盘地敲击事件然后通过ROS消息发布出去,另一个订阅这个ROS消息并输出一个Twist消息,从而实现键盘输入控制机器人地自由移动。 1.键盘驱动: 使用Python的termios和tty库将终端设置成原始模式并捕获键盘敲击事件,然后将事件以std_msgs/st 阅读详情

相关推荐

用python规模化生成gazebo中 .world .png 和 .yaml文件

用python规模化生成gazebo中 .world .png 和 .yaml文件 首先,我们需要知道gazebo中基本的 .world 文件组成 然后我们将.world文件中的模型与 .png中的灰度图像进行对应,同时在 .yaml文件中进行坐标、分辨率等参数的对应。 最后我们开始生成 .world .png .yaml文件 一、三种文件的格式 1、.world文件(...

zlb_zlb的博客 1511

利用python程序控制gazebo里的关节

利用ros控制gazebo节点 一、 目标 如下图1是我在gazebo里弄的两个关节,和他们之间的节点,此次实践目标是用python程序,控制节点运行。如图2所示。 图1 图2 二、 步骤 1. model.urdf文件配置 红色蓝色两根关节就不讲了,可以看看urdf文件,主要关注gazebo插件配置部分 图3 a. joint部分 主要是配置关节的属性,比如关节连接点,旋转轴和旋转方式,具体配置看下图 b). trans部分 transmission是硬件抽象层中的一部分,配置都差不多,主要是

weixin_39566143的博客 3054

TurtleBot ROS建图实战:从TF坐标系到slam_gmapping调参

SLAM(同步定位与地图构建)是机器人自主导航的基础能力,其核心在于多传感器数据融合、坐标变换(TF)一致性与概率地图更新机制。在ROS生态中,TurtleBot作为经典教学平台,天然承载了2D激光SLAM的完整技术链路:以轮式里程计提供运动先验,激光雷达采集环境观测,通过slam_gmapping实现栅格地图构建。该过程深度依赖TF树闭环、topic消息时序对齐及节点参数物理意义理解,尤其在真实硬件约束下(如Atom CPU算力、URG-04LX测距精度、USB供电稳定性),参数调优不再抽象,而是与轮胎摩

weixin_34280237的博客 343

创建自定义gym环境,并用stablebaseline3

gym-gazebo安装 参考: ubuntu18.04 gym-gazebo安装 Gym入门–从安装到第一个完整的代码示例 OpenAI Gym接口概要 安装gym库_强化学习Gym库学习实践(一) 强化学习快速上手:编写自定义通用gym环境类+主流开源强化学习框架调用 gym一共可以创建多少种环境 import gym from gym import envs env_list = envs.registry.all() env_ids = [env_item.id for env_item in en

weixin_44562141的博客 4505

ROS笔记之Gazebo机器人仿真(八)—— 机器人导航避障仿真

1.引言   这章我们将介绍如何在Gazebo中实现机器人导航避障的仿真。 2.准备工作 (1)安装depthimage_to_laserscan功能包,主要功能是将深度图像转化为激光雷达数据。 (2)安装gmapping功能包。 (3)安装navigation功能包。 3.导航避障仿真 (1)在launch文件夹下创建gmapping_nav.launch &lt;?xml version="1...

_微尘_的博客 1万+

用于水下机器人仿真的GazeboROS软件包

用于水下机器人仿真的GazeboROS软件包

TurtleBot2+ROS Kinetic硬件驱动配置实战指南

ROS(Robot Operating System)作为机器人开发的事实标准,其核心价值在于统一硬件抽象与中间件通信。理解ROS驱动原理,关键在于掌握设备节点映射、内核模块兼容性及实时性调度机制。在真实嵌入式机器人平台如TurtleBot2上,ROS Kinetic并非单纯软件版本选择,而是与Kobuki底盘固件、CP2102串口芯片、Ubuntu 16.04内核深度耦合的技术栈。该组合保障了USB通信时序稳定性、`/dev/kobuki`设备持久化及`/odom`里程计时间戳精度,是实车SLAM、导航与

weixin_33672400的博客 389

C# 异步编程详解(Task,async/await)

同步和异步主要用于修饰方法。当一个方法被调用时,调用者需要等待该方法执行完毕并返回才能继续执行,我们称这个方法是同步方法;当一个方法被调用时立即返回,并获取一个线程执行该方法内部的业务,调用者不用等待该方法执行完毕,我们称这个方法为异步方法。异步的好处在于非阻塞(调用线程不会暂停执行去等待子线程完成),因此我们把一些不需要立即使用结果、较耗时的任务设为异步执行,可以提高程序的运行效率。

luxingyu329的博客 4155

TurtleBot入门:Ubuntu 16.04+ROS Kinetic系统级部署与状态机验证

机器人操作系统(ROS)是构建智能移动机器人的核心中间件,其本质是一套支持节点通信、坐标变换(TF)、传感器抽象与状态管理的分布式框架。理解ROS的分层架构——从底层硬件驱动、URDF建模、TF树发布,到上层导航栈(move_base、AMCL)——是实现物理小车可靠运动的前提。TurtleBot作为ROS经典教学平台,高度依赖特定软硬协同环境:Ubuntu 16.04内核(4.4)与ROS Kinetic的组合,不仅关乎软件兼容性,更直接决定Kobuki底盘的USB时序稳定性、激光雷达数据精度及实时控制链

weixin_30614109的博客 427

Pylon SDK C语言多相机采集的注意事项、关键设置及代码示例

前言 与单相机直接用句柄PYLON_DEVICE_HANDLE hdev进行操作所不同的是,在多相机连接采用索引值访问每个相机,对应句柄为PYLON_DEVICE_HANDLE hdev[deviceIndex] 。若连接N个相机设备,则索引值范围为[0,...,N-1]。显而易见,采用循环结构编程可以对多个相机采用同样的操作,包括参数设置、图像采集等。但多个相机的使用需要根据相机功能、相机与主机间的连接方式、网络适配器进行额外的设置。本文参考Pylon C开发者手册和Basler产品文档,对GigE类型

黑化咸鱼的博客 3089

Java:使用Java调用打印机进行打印(JPG、PDF和Word三种文件格式)

目录 一、Java的打印简介 二、Java打印实现 2.1 JPG图片文件格式打印实现 2.2 PDF文件格式打印实现 2.3 Word文件格式打印实现 2.3.1 Word文件采用jacob插件进行打印实现。 2.3.2 先将word转化为pdf文件,然后打印pdf(lz使用) 三、总结 一、Java的打印简介 在我们的实际工作中,经常需要实现打印功能。但由于历史原因,Jav...

vatxiongxiaohui的专栏 8万+

TurtleBot3 ROS导航实战:从TF校准到参数精调的工程化指南

TurtleBot 是 ROS 生态中最典型的移动机器人教学平台,其核心价值在于将 SLAM、导航栈、传感器融合等抽象概念具象为可调试、可验证的节点与参数。理解 ROS 的通信机制(如 topic、tf、node)是实现稳定导航的前提,而真实场景中的坐标系偏差、激光噪声、多机通信配置等问题,往往导致 move_base 异常旋转或定位漂移。本文聚焦 TurtleBot3 Waffle Pi 硬件平台与 ROS Melodic 软件栈,在 Gazebo 仿真与实机协同验证框架下,系统解析 TF 树校准、SLA

weixin_30265103的博客 447

串行通信原理及实验仿真

1. 处理器与外部设备通信的两种方式: 并行通信和串行通信 并行通信是指数据的各个位用多条数据线同时进行传输 优点:传输速度快 缺点:占用引脚资源多 串行通信是将数据分成一位一位的形式在一条传输线上逐个传输 优点:通信线路简单,占用引脚资源少 缺点:传输速度慢 2. 串行通信的通信方式: 同步通信和异步通信 同步通信:带有时钟同步信号的数据传输;发送方和接收方在同一时钟的控制下,同步传输数据。 异步通信:不同时钟同步信号的数据传输。发送方和接收方使用各自的时钟控制数据的发送和接收过程。 3. 串行通

gemengxia的博客 4323

Turtlebot3 project presentation --autonomy

cu icar Autononomy Dr. Krovi curse, presentation turtlebot3:https://www.turtlebot.com/ cost map:http://wiki.ros.org/costmap_2d exploring turtelbot 3 and ros, Ubuntu 1.604, install ros kinetic ...

jaz的专栏 391

深度解析:C# Modbus TCP协议解析与异常处理(工控上位机必备)

协议解析要精准:掌握MBAP头和PDU的结构,尤其是常用功能码的请求/响应格式,避免因字节处理错误导致通信失败;异常处理要全面:覆盖通信层、协议层、数据层的所有异常类型,针对工业场景制定重试、重连、滤波等策略;资源管理要规范:使用释放资源,采用连接池复用连接,避免端口泄露;工业场景要适配:结合工控现场的特点(网络波动、电磁干扰、设备忙),优化通信效率和数据处理逻辑。通过以上解析和策略,可确保C#上位机与工业设备的Modbus TCP通信具备高稳定性、高可靠性、高容错性,满足工控领域的严苛要求。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 997

【GameFramework扩展应用】6-5、GameFramework框架出包时增加版本信息Version.txt文件

框架在热更新的时候,会先去获取文件,然后获取版本号,对比版本号和资源大小,才会开始下载资源。但是,框架生成AssetBundle资源的包里面是没有这个文件的,只能我们新建一个文件,然后手动填入数据,非常麻烦。好消息是,框架把这些接口都留给我们了,我们只需要继承接口,重写函数,然后在打包的时候选择这个辅助器即可。下面就来看一下如何实现把。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 1041

TurtleBot ROS全景图实战:从空间采样到图像拼接

全景图在机器人视觉中并非仅用于展示,而是实现自主空间认知的基础技术——它依托相机标定、特征点匹配与单应性变换等几何原理,构建具备空间一致性的全局视图。该技术显著提升移动机器人在环境建模、路径规划与AR锚点定位中的实用性,尤其适用于TurtleBot等轻量级ROS平台。其核心价值在于以低计算开销达成高几何鲁棒性,避开OpenCV Stitcher的资源瓶颈,专注解决‘停-拍-转’式主动感知场景下的图像对齐问题。本文围绕turtlebot入门与turtlebot全景图两大高频实践需求,详解硬件协同、参数调优与故

weixin_34161064的博客 302

【文献笔记】CVPR 2023|Attention-Based Point Cloud Edge Sampling

优点能够有效采出点云数据的边缘点分类任务性能优越不足没有设计出一个更好的上采样方法,导致分割任务的性能略低只考虑了边缘特征,没有利用其他几何特征。

m0_55908255的博客 321

TurtleBot入门实操指南:软硬耦合系统搭建与故障排查

TurtleBot并非普通ROS机器人软件包,而是一个深度耦合Kobuki底盘、Kinect v1传感器与Ubuntu 14.04/ROS Indigo生态的机电系统。其核心原理在于硬件接口(USB供电能力、串口通信协议、TF坐标系对齐)与ROS中间件(节点发现心跳机制、costmap膨胀模型、AMCL定位约束)的严格协同。技术价值体现在教学可复现性、课程设计鲁棒性及嵌入式ROS工程落地可行性;典型应用场景包括高校机器人实验课、本科生课程设计平台搭建、ROS初学者物理世界验证。本文聚焦turtlebot入门

weixin_30619101的博客 398

R数据分析:潜在转化分析LTA的做法和解释(一)

之前给大家写了很多潜在类别分析的教程Mplus教程:如何做潜在类别分析LCAR数据分析:用R语言做潜类别分析LCAMplus数据分析:潜在类别分析(LCA)流程(详细版)R数据分析:再写潜在类别分析LCA的做法与解释,今天继续给大家拓展一步。 今天要介绍的就是潜在转换分析,这个东西就是LCA的纵向版本。是一个专门用来研究质变的统计技巧。有一句话叫做量变起质变,你怎么知道质变到底发生没有?就用潜在转换分析。 Latent transition analysis is an extension of...

Codewar的博客 7703

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Python 机器人学习手册:1~5

原文:ILearning Robotics using Python 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 计算机视觉 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 当别人说你没有底线的时候,你最好真的没有;当别人说你做过某些事的时候,你也最好真的做过。 一、机器人操作系统入门 本书的主要目的是教您如何从头开始构建自动移动机器人。 机器人将使用 ROS 进行编程,其操作将使用名为 Gazebo 的模拟器进行模拟。 在接下来的章节中,您还将看到使用 RO

龙哥盟 3874

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Python知识点发:基于Python工具,如何使用Gazebo进行机器人仿真

在机器人领域,仿真是一个重要的环节,它可以帮助开发者在不实际部署机器人硬件的情况下,验证算法和设计的有效性。Gazebo作为一款流行的仿真工具,提供了丰富的API和插件,支持多种编程语言,其中Python是最常用的语言之一。在此基础上,您可以进一步探索Gazebo的高级功能,如传感器数据处理、插件开发等,为您的机器人项目提供更全面的仿真支持。本文将详细介绍如何使用Python工具结合Gazebo进行机器人仿真,帮助读者快速上手Gazebo仿真环境,为机器人项目提供有力的测试和验证手段。

码农超哥的博客 1501

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

使用机器人操作系统 (ROS) 探索 Python 在机器人开发和控制中的功能

通过Python和ROS的结合,开发人员可以构建能够感知周围世界并与之交互的智能机器。随着机器人技术的不断发展,Python 和 ROS 无疑将继续在塑造该领域的未来方面发挥至关重要的作用

探索人工智能领域 2226

GAZEBO下基于python的键盘控制小程序

代码如下 #!/usr/bin/env python import roslib; roslib.load_manifest('teleop_twist_keyboard') import rospy from geometry_msgs.msg import Twist import sys, select, termios, tty msg = """ Reading from the ...

qq_16653189的博客 1208

小车在Gazebo仿真环境中无法进行避障

有些小伙伴刚进入公司可能需要使用公司自己小车的模型去进行一些算法验证或者其他方面的一些工作。而我们经常会git clone网上已经做好gazebo世界以及其他方面部署的小车,然后将其模型换成我们自己模型,就能运用他们的很多功能了。对模型进行迁移时,一定要注意参数配置名称是否的更换成我们自己模型的一些名称,否则会出现很多很多功能失效或者其他千奇百怪的问题。希望这篇帖子可以解决大家小车无法避障的问题。

m0_65512360的博客 888

python代码完成Gazebo场景模型生成与删除

在使用Gazebo进行仿真时,您可能需要动态生成和删除模型。ROS(Robot Operating System)提供了一套服务接口,使得这些操作变得简单而高效。本文将详细介绍如何在Gazebo中创建和删除模型。

lovely_yoshino的博客 6064
上一篇: ROS笔记七(基于Python、Kinetic):通信机制——动作(action)
下一篇: ROS笔记九(基于Python、Kinetic):gazebo中通过键盘输入控制turtlebot机器人移动和转向
进击的香皂
博客等级 码龄8年 34粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值