小乌龟运动控制-4两只小乌龟

news2024/9/20 18:54:46

ROS小乌龟系列文章目录

第一章 小乌龟划圆圈
第二章 小乌龟走方形
第三章 五角星
第四章 两只小乌龟


文章目录

  • ROS小乌龟系列文章目录
  • 前言
  • 1、生成第2个乌龟
  • 2、实现两只小乌龟一个画圆圈一个画方块
  • 运行


前言

ROS 中实现两只小乌龟一个画圆圈一个画方块的代码实现

1、生成第2个乌龟

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 该例程将请求/spawn服务,服务数据类型turtlesim::Spawn
import sys
import rospy
from turtlesim.srv import Spawn

def turtle_spawn():
	# ROS节点初始化
    rospy.init_node('turtle_spawn')
	# 发现/spawn服务后,创建一个服务客户端,连接名为/spawn的service
    rospy.wait_for_service('/spawn')
    try:
        add_turtle = rospy.ServiceProxy('/spawn', Spawn) # Spwan为消息类型
		# 请求服务调用,输入请求数据
        response = add_turtle(2.0, 2.0, 0.0, "turtle2")#x,y,theta,name
        return response.name
    except rospy.ServiceException as e:
        print ("Service call failed: %s"%e)
if __name__ == "__main__":
	#服务调用并显示调用结果
    print ("Spwan turtle successfully [name:%s]" %(turtle_spawn()))

2、实现两只小乌龟一个画圆圈一个画方块

"""
<case1: 直接使用threading中的Thread类创建线程>
Date: 2024/8/15
Author: chance
"""

from threading import Thread
import time
from time import sleep
import math
import rospy
from geometry_msgs.msg import Twist

rospy.init_node('draw_circle', anonymous=True)

def draw_circle(speed):
    print("11111")
    # 初始化ROS节点
    # rospy.init_node('draw_circle', anonymous=True)
    print("2222")

    # 创建一个发布器,向/turtle1/cmd_vel话题发送Twist消息
    pub = rospy.Publisher('/turtle1/cmd_vel', Twist, queue_size=10)
    # rate = rospy.Rate(10)  # 10Hz

    # 创建Twist消息
    vel_msg = Twist()
    # vel_msg.linear.x = 1.0  # 向前运动速度
    vel_msg.linear.x = speed  # 向前运动速度
    vel_msg.angular.z = 1.0  # 角速度


    # 发布消息
    while not rospy.is_shutdown():
        pub.publish(vel_msg)
    #     rate.sleep()
    print("11111")

# rospy.init_node('draw_square', anonymous=True)
def draw_square():
    # 初始化ROS节点
    # rospy.init_node('draw_square', anonymous=True)

    # 创建一个发布器,向/turtle2/cmd_vel话题发送Twist消息
    pub = rospy.Publisher('/turtle2/cmd_vel', Twist, queue_size=10)
    rate = rospy.Rate(1)  # 1Hz

    # 创建Twist消息
    vel_msg = Twist()

    while not rospy.is_shutdown():
        # 向前运动
        vel_msg.linear.x = 2.0
        vel_msg.angular.z = 0.0
        pub.publish(vel_msg)
        rospy.sleep(2)  # 直行2秒

        # 停止前进,准备转弯
        vel_msg.linear.x = 0.0
        pub.publish(vel_msg)
        rospy.sleep(1)

        # 左转90度
        vel_msg.angular.z = math.pi / 2  # 90度
        pub.publish(vel_msg)
        rospy.sleep(1)  # 转弯1秒

        # 停止转弯
        vel_msg.angular.z = 0.0
        pub.publish(vel_msg)
        rospy.sleep(1)


# 自定义的函数,可以替换成其他任何函数
def task(threadName, number, letter):
    print(f"【线程开始】{threadName}")
    m = 0
    while m < number:
        sleep(1)
        m += 1
        current_time = time.strftime('%H:%M:%S', time.localtime())
        print(f"[{current_time}] {threadName} 输出 {letter}")
    print(f"【线程结束】{threadName}")


thread1 = Thread(target=task, args=("thread_1", 4, "a"))  # 线程1:执行任务打印4个a
thread2 = Thread(target=draw_circle, args=(1.0,))  # 线程2:执行任务打印2个b
thread3 = Thread(target=draw_square, args=())  # 线程2:执行任务打印2个b

thread1.start()  # 线程1开始
thread2.start()  # 线程2开始
thread3.start()  # 线程3开始

thread1.join()  # 等待线程1结束
thread2.join()  # 等待线程2结束
thread3.join()  # 等待线程3结束

运行

在终端中运行ROS节点,执行以下命令:

roscore 

启动第一个小乌龟:

rosrun turtlesim turtlesim_node

在这里插入图片描述启动第二个小乌龟:

rosrun turtlebot3_draw_circle draw_spawn.py 

在这里插入图片描述
两只小乌龟一起:

yc@yc-rl:~$ cd catkin_ws/src/turtlebot3_draw_circle/scripts/
yc@yc-rl:~/catkin_ws/src/turtlebot3_draw_circle/scripts$ python3 threading_test.py 

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2097941.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安装office过程中遇到的一系列问题及解放方案(Windows)

本博文列出安装office过程中遇到的一系列问题及解放方案&#xff08;Windows&#xff09;参考的相关博客&#xff0c;仅供参考。 office下载与安装&#xff1a; 免费装Office2021工具Office Tool Plus使用教程 JH过程中遇到0xC004F074错误&#xff1a; win10 JH 错误代码&a…

pycharm中配置已有的conda环境

背景 之前已通过conda命令创建环境&#xff0c;并安装依赖正常运行程序&#xff0c;现希望在pycharm中进行调试 配置流程 打开pycharm&#xff0c;并打开项目&#xff0c;路径&#xff1a;setting->Project: your_project -> Python Interpreter&#xff0c;点击 Add …

TCP/IP五层模型

目录 一. 概述 1.TCP基础入门 2.TCP数据报结构 3. TCP/IP五层协议模型讲解&#xff1a; 4. 网络设备所在分层​编辑 5. TCP的三次握手 一. 概述 作为一名程序员&#xff0c;对于TCP/IP五层协议&#xff0c;重点掌握应用层和传输层&#xff0c;特别是以下两层对应的协议&a…

国内服务器部署NextChat程序教程

问题描述 NextChat在ChatGPT私人搭建方面广受欢迎&#xff0c;详细的Vercel部署教程建议参考之前的文章《通过NextChat(ChatGPT-Next-Web)低成本给自己或客户部署GPT程序》&#xff0c;在Vercel上部署的方法比较灵活&#xff0c;因为可以自由更改程序内容&#xff0c;所以推荐…

RK3568平台(内存篇)Linux内存管理

一.什么是内存 最直观的,我们买手机,电脑,内存条,都会标明内存是多大,例如途中的8G,16G,128G都指的内存大小。 我们应该都听说过 RAM 存储器,它是一种半导体存储器件。RAM 是英文单词 Random 的缩写,即“随机”的意思。所以 RAM 存储器也称为“随机存储器”。 那么…

Docker续7:docker部署nmt续1:使用haproxy代理nginx

[rootlocalhost ~]# docker stop 30 //停止nginx容器 30 [rootlocalhost ~]# docker ps --all CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS …

【管理】职业规划三叶草

持续更新。。。。。。。。。。。。。。。 【管理】职业规划三叶草 三叶草模型是什么第一片叶子&#xff1a;兴趣&#xff08;Interest&#xff09;第二片叶子&#xff1a;能力&#xff08;Ability&#xff09;第三片叶子&#xff1a;价值&#xff08;Value&#xff09;将三叶草…

【活动预约】镭速邀您莅临2024年行业案例分享专场线下沙龙活动!

​为了加强行业内外渠道集成商及相关生态合作伙伴的交流合作&#xff0c;共同应对数据安全挑战&#xff0c;提升内外网安全交换系统的应用范围及应用效果&#xff0c;镭速即将举办一场不容错过的2024年行业案例分享专场线下沙龙活动&#xff01; 活动亮点 ➣行业前沿&#x…

Spring扩展点系列-InstantiationAwareBeanPostProcessor

文章目录 简介测试一1、配置文件Bean注册2、单元测试方法3、测试类4、输出结果结论 测试二1、测试类2、输出结果结论 源码解析postProcessPropertiesCommonAnnotationBeanPostProcessorAnnotationInjectedBeanPostProcessor 总结 简介 spring容器中Bean的生命周期内所有可扩展…

Apache DolphinScheduler大规模任务调度系统对大数据实时Flink任务支持

转载自神龙大侠 我是用olphinScheduler 3.2.1版本做源代码编译部署&#xff08;部署方式参考我的另外一篇文档《源代码编译&#xff0c;Apache DolphinScheduler前后端分离部署解决方案》&#xff09; 二进制文件部署本文也适用&#xff0c;只需要修改相对应的配置即可。 资…

科普小课堂:中等硬度的床垫,合适的睡姿,通过日常力量练习提升自身能力以支撑脊柱形态。

文章目录 引言I 选择合适床垫的指标3:1 原则睡得舒服与否II 日常力量练习翻书-胸椎活动度练习猫式-脊柱整体活动度练习III 知识扩展人体脊柱“S”型生理曲线软床垫对腰椎的影响硬床垫对腰椎的影响合适的睡姿引言 女性瘦型体型人群脊柱曲线相对较明显,尤其是腰部曲线,需选择承…

优化LabVIEW中TCP通信速度的方法

在LabVIEW中&#xff0c;TCP通信速度较慢可能由多种因素导致&#xff0c;如数据包处理延迟、阻塞式读取或数据解析效率低等。通过调整读取模式、优化数据处理逻辑、以及使用并行处理结构&#xff0c;可以显著提升TCP通信的速度&#xff0c;使其接近第三方调试工具的表现。LabVI…

DNS介绍(hosts文件,域名结构),面试题(输入url后会发生什么)

目录 DNS 引入 hosts文件 域名 主域名 结构 www 公司/组织/个人名称 后缀 面试题 简单回答 部分https 细节 DNS 引入 域名介绍,url的介绍原理特殊字符的处理,网络行为,http协议请求/响应的格式结构,状态码介绍,临时/永久重定向,http报头常见字段(长/短连接介绍,lo…

阿里云身份证二要素详细使用

初步&#xff1a; 先登录阿里云&#xff08;找官网链接&#xff09; 2、云市场搜索身份证二要素 看个人需求选择 3、我选择的是下边这个 4、接下来看文档具体调用&#xff08;在请求示例中有选择语言的代码 我选择的就是java&#xff09; 5、在控制台看appcode码 放入代码中…

如何解决企业防盗版/防勒索病毒?一个方案五步搞定!

SPN&#xff08;Sandbox Proxy Network&#xff09;解决方案通过创建一个隔离的沙盒环境&#xff0c;为企业提供了一个安全、受控的互联网访问方式。该方案特别适用于防止盗版软件的骚扰和勒索病毒的攻击&#xff0c;确保企业数据和网络环境的安全。 1. 核心功能 物理隔离&…

u盘数据如何恢复,数据恢复技巧分享

在数字化时代&#xff0c;U盘作为便携的数据存储设备&#xff0c;广泛应用于工作、学习和生活中。然而&#xff0c;误删文件、格式化错误或物理损坏等意外情况时有发生&#xff0c;导致重要数据丢失。本文将为你提供一套全面的U盘数据恢复指南&#xff0c;从基础方法到进阶技巧…

Unity(2022.3.41LTS) - UI详细介绍-画布

目录 零. 简介 一、图像的基本属性 二、图像的类型 三、图像的使用方法 四、代码控制图像 五、优化和注意事项 零. 简介 在 Unity 中&#xff0c;图像&#xff08;Image&#xff09;是一种常用的 UI 元素&#xff0c;用于显示静态图片或 Sprite&#xff08;精灵图&#…

美杜莎(Medusa)勒索软件如何把你的文件变成了“石头”

写在前面的话 近期&#xff0c;Unit 42的研究人员在分析Medusa&#xff08;美杜莎&#xff09;勒索软件活动时&#xff0c;发现该活动的升级和勒索策略发生了很大变化。 Medusa勒索软件活动在2023年初上线了一个名为“Medusa Blog”的专用数据泄露网站&#xff0c;而该活动背…

利用Go语言模拟实现Raft协议

近来学习到区块链&#xff0c;想要模拟实现 Raft 协议。但是发现网上教程很杂&#xff0c;或者说很多教程并不适合于新手从零开始进行实现。 本文将从头开始复现个人模拟实现 Raft 的过程&#xff0c;完成后整个模拟后&#xff0c;读者应该学会 Go 语言的基本语法、Rpc 编程的基…

路由器内部到底是啥结构?不懂不算网工人

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 下午好&#xff0c;我的网工朋友。 在现代互联网中&#xff0c;路由器作为连接不同网络的枢纽&#xff0c;发挥着至关重要的作用。无论是简单的家…