ROS机器人编程实践——读书笔记1

2023-05-16

目的:写一个最小基于ROS的机器人控制软件

一、写一个运动命令流,每秒10次,每三秒启动一次。在移动时,发送前进命令,速度0.5米每秒,停止时发送速度0米每秒。命名为

red_light_green_light.py

 

 

#!/usr/bin/env python
import rospy
from geometry_msgs.msg import Twist

cmd_vel_pub=rospy.Publisher('cmd_vel',Twist,queue_size=1)
rospy.init_node('red_light_green_light')

red_light_twist=Twist()
green_light_twist=Twist()
green_light_twist.linear.x=0.5

driving_forward=True
light_chang_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 light_chang_time > rospy.Time.now():
		driving_forward=not driving_forward
		light_chang_time=rospy.Time.now()+rospy.Duration(3)
	rate.sleep()

(1)queue_size=1,参数告诉rospy只缓冲一个消息。一旦节点发送的速率超过接收的频率,rospy就会将queue_size之外的消息扔掉。

 

(2)Twist消息中的linear(线性)速度的x分量。以0.5米每秒向前走。

(3)rospy.sleep(),代码1将继续进行。

接下来是测试:

1.设置为可运行的文件,在当前目录下 。$ chmod +x red_light_green_light.py

2.启动Gazebo,安装   $ sudo apt-get install ros-indigo-turtlebot-gazebo

3 .$ roslaunch turtlebot_gazebo turtlebot_world.launch

4.启动控制节点 $./red_light_green_light.py cmd_vel:=cmd_vel_mux/input/teleop

二、读取传感器数据

 Turtlebot深度传感器(Kinect)滤波之后以sensor_msgs/LaserScan的消息的形式发布到scan的话题上,但是该相机视角窄,最大检测距离很小,几乎是只能检测前面的障碍物,检测不到右侧的。这也是低成本深度相机的代价。

 $ roslaunch turtlebot_gazebo turtlebot_world.launch

 $ rostopic echo scan

读取的数据,这是通过topic响应的。

写一个完整的节点,这个节点输出正前方的障碍物到他的距离。

range_ahead.py

 

#!/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_sub=rospy.Subscriber('scan',LaserScan,scan_callback)
rospy.spin()

可以在Gazebo里拖动turtlebot显示数据。
三、写一个一和二的结合。

 

turtlebot往前走直到看到与它小于0.8m的障碍物,运行大于30秒,会旋转到一个新方向。

 

#!/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

sacn_sub=rospy.Subscriber('scan',LaserScan,scan_callback)
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:
		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()

1.$ chmod +x wander.py

 

2.启动控制节点 $./wander.py cmd_vel:=cmd_vel_mux/input/teleop2.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS机器人编程实践——读书笔记1 的相关文章

  • 从零开始构建嵌入式实时操作系统4——深入讲解任务切换

    1 前言 操作系统可以为我们执行丰富的应用程序 xff0c 可以同时满足我们的各种使用需要 操作系统之所以能同时完成我们各种需求 xff0c 是因为操作系统能并发执行多个用户的应用程序 事实上除了多核处理器系统中是真正的多任务并行之外 xf

随机推荐

  • Linux启动流程之ROM-CODE

    1 从哪里开始 xff1f 下图是AM335X核心板和功能框图 xff1a AM335X核心板的存储信息如下 xff1a AM335X核心板运行linux系统 xff0c 在这里提出一个问题 xff1a 上电后指令从哪里开始执行 xff1f
  • 全志V3S开发板星光闪烁(linux LED驱动)

    1 前言 本文描述了基于全志V3S开发板的LED驱动程序和测试应用程序的设计流程 通过本次实验我们可以控制V3S电路板上的LED xff0c 模拟星空的星星 xff0c 一闪一闪亮晶晶 xff01 2 设计流程概述 本次实验的设计步骤如下
  • 人脑能否重启?

    1 重启是什么 人脑能否重启 这个问题还不简单 xff0c 人睡眠后清醒就是重启 事实真的是如此简单吗 xff1f 我们先不急着给出结论 xff0c 前面提到 人睡眠后清醒就是重启 xff0c 这句话中有两概念 xff1a 1 睡眠和觉醒
  • 嵌入式技术之IAP,自从有了它老板再也不担心我的代码了!(中)

    上篇文章我们一起学习了IAP的工作原理和IAP包含的3个重要功能 xff1a 数据交互 数据存储和程序跳转 这3个重要功能称为 IAP的三板斧 xff0c 接下来我们看这三板斧具体完成哪些细节工作 xff0c 如何实现这三板斧 1 数据交互
  • 超导量子计算机

    1 超导量子计算机发展状况 2018年3月5日美国物理学会年会上 xff0c 谷歌展示了其正在测试的72量子位超导量子芯片Bristlecone 谷歌物理学家朱利安 凯利表示 xff0c 研讨团队希望初次运用更大的量子芯片来展现霸权 xff
  • Ubuntu 快速更换阿里源

    简介 xff1a 本文主要给大家讲解如何为Ubuntu更换阿里源 xff0c 通过以下四个步骤即可快速实现换源 镜像下载 域名解析 时间同步请点击 阿里巴巴开源镜像站 一 查看ubuntu的Codename lsb release a gr
  • 建造《流浪地球2》中要毁灭人类的超级量子计算机MOSS的核心量子技术是什么?

    1 流浪地球2 中的量子计算机 2023年中国最火的电影非 流浪地球2 莫属 xff0c 在 流浪地球2 中有一个人工智能机器人MOSS xff0c 它的前身是 550W 超级量子计算机 xff0c MOSS 是它给自己起的名字 xff08
  • 离子阱量子计算机

    1 新闻 2020年6月 xff0c 科技制造企业霍尼韦尔 xff08 Honeywell xff09 发布第一台离子阱量子计算机H0 xff0c 它拥有64量子体积 xff0c 它是IBM和谷歌同时期量子计算机的两倍 公司表示之所以能取得
  • ROS Melodic安装、配置和使用turtlebot2(集成众多源代码直接下载)

    已经有前辈将ubuntu14 04下的turtlebot教程翻译了过来 xff0c 可以先行查看 xff0c 对turtlebot的知识建立总体的认识 xff1a https www ncnynl com archives 201609 7
  • FreeRTOS学习 第一讲 操作系统的移植

    FreeRTOS学习 第一讲 操作系统的移植 基本介绍 xff1a 系统分类 1 xff09 前后台系统 while 1 循环 适用情况 xff08 简单和小的需求 处理需求相对来说较少 xff09 2 xff09 实时操作系统 实时操作系
  • Python调用playsound时报错:指定的设备未打开,或不被 MCI 所识别

    报错信息 xff1a Error 263 for command close audio mp3 指定的设备未打开 或不被 MCI 所识别 原因 xff1a windows不支持utf 16编码 xff0c 需修改playsound源码 p
  • 【无人机学习】Mission Planner(pc端)和QGroundControl(android端)

    无人机学习 Mission Planner xff08 pc端 xff09 和QGroundControl xff08 android端 xff09 系列文章目录 提示 xff1a 这里是收集了无人机的相关文章 无人机学习 无人机基础知识
  • 【无人机学习之QGroundControl】android端App初解4-遥控器通道

    无人机学习之QGroundControl android端App初解4 遥控器通道 系列文章目录 提示 xff1a 这里是收集了无人机的相关文章 无人机学习 无人机基础知识 无人机学习 Mission Planner xff08 pc端 x
  • 百度2014校园招聘 软件研发工程师 笔试题

    一 简答题 xff08 本题共30 xff09 1 动态链接库和静态链接库分别有什么优缺点 xff1f xff08 10 xff09 2 轮询任务调度与抢占式任务调度的区别 xff1f xff08 10 xff09 3 请列出数据库中常用的
  • Kubernetes 日志查询分析实践

    简介 xff1a 本文将介绍如何基于日志服务实现对 Kubernetes xff08 以下简称 K8s xff09 日志的采集以及查询分析 xff0c 此外 xff0c 还附带了对 Ingress Audit 方案的简要介绍 为了方便大家通
  • C++算法题

    目录 一 排序算法 1 冒泡排序 2 快速排序 3 归并排序 4 堆排序 5 插入排序 6 topK 二 二分查找 1 一维数组二分查找 2 二维数组二分查找 3 寻找旋转排序数组中的最小值 三 有序数组的平方 xff08 双指针法 xff
  • QT通过UDP分包传输大图像(测试可传6M)

    参考博客 UDP传数据每帧数据最大传64k xff0c 而图片文件一般远大于64K xff0c 此时就需要将图像数据分包传输 xff0c 接收端也分包接收 xff0c 直到整个图片数据都收到 xff0c 再进行其他处理 发送端 发送数据 v
  • github代码如何定位到历史版本(历史commit点)

    关于使用git在本地进行版本管理见linux下的版本管理 工作项目中git流程实操见git简明实操模板 想我们在写代码时候 xff0c 数次修改并提交commit xff0c 如果在这个过程中我们后悔了 xff0c 想回到当初的某一个com
  • Intel RealSense学习之图像及图像深度数据获取

    本文将介绍如何获取到彩色图像的深度信息 大家都知道我们可以从realsense 摄像头中获取到RGB数据 xff0c 红外数据 xff0c 以及图像的深度数据 至于图像的深度数据我的理解是realsense摄像投抓到的图像的相关距离信息 x
  • ROS机器人编程实践——读书笔记1

    目的 xff1a 写一个最小基于ROS的机器人控制软件 一 写一个运动命令流 xff0c 每秒10次 xff0c 每三秒启动一次 在移动时 xff0c 发送前进命令 xff0c 速度0 5米每秒 xff0c 停止时发送速度0米每秒 命名为