只有运行结果和之前的提示:

从turtlesim到贪吃蛇……(补充)


解压缩:

创建工作区并编译后执行:

roslaunch tank_snake_game start.launch


import rospy
from tanksim.msg import Pose
from tanksim.srv import Spawn
from tanksim.srv import SetPen
from geometry_msgs.msg import Twist
from geometry_msgs.msg import TransformStamped
import random
import mathtank1_pose = Pose()
tanklist = []
lasttank = 1
nexttankIndex = 1class mySpawner:def __init__(self, tname):self.tank_name = tnameself.state = 1rospy.wait_for_service('/spawn')try:client = rospy.ServiceProxy('/spawn', Spawn)x = random.randint(1, 10)y = random.randint(1, 10)theta = random.uniform(1, 3.14)name = tname_nm = client(x, y, theta, name)rospy.loginfo("tank Created [%s] [%f] [%f]", name, x, y)rospy.Subscriber(self.tank_name + '/pose', Pose, self.tank_poseCallback)self.pub = rospy.Publisher(self.tank_name + '/cmd_vel', Twist, queue_size=10)self.tank_to_follow = 1self.tank_pose = Pose()rospy.wait_for_service("/" + tname + '/set_pen')try:client = rospy.ServiceProxy("/" + tname + '/set_pen', SetPen)client(0,0,0,0,1)except rospy.ServiceException as e:print("Service call failed: %s"%e)except rospy.ServiceException as e:print("Service tp spawn a tank failed. %s", e)def tank_poseCallback(self, data):self.tank_pose = datadef tank_velocity(self, msg):self.pub.publish(msg)def tank1_poseCallback(data):global tank1_poseglobal lasttankglobal tanklistglobal nexttankIndextank1_pose.x = round(data.x, 4)tank1_pose.y = round(data.y, 4)tank1_pose.theta = round(data.theta, 4)for i in range(len(tanklist)):twist_data = Twist()diff = math.sqrt(pow((tank1_pose.x - tanklist[i].tank_pose.x) , 2) + pow((tank1_pose.y - tanklist[i].tank_pose.y), 2))ang = math.atan2(tank1_pose.y - tanklist[i].tank_pose.y, tank1_pose.x - tanklist[i].tank_pose.x) - tanklist[i].tank_pose.thetaif(ang <= -3.14) or (ang > 3.14):ang = ang / math.piif (tanklist[i].state == 1):if diff < 1.0:tanklist[i].state = 2tanklist[i].tank_to_follow = lasttanklasttank = i + 2rospy.loginfo("tank Changed [%s] [%f] [%f]", tanklist[i].tank_name, diff, ang)nexttankIndex += 1tanklist.append(mySpawner("tank" + str(nexttankIndex)))else:parPose = tank1_poseif(tanklist[i].tank_to_follow != 1):parPose = tanklist[tanklist[i].tank_to_follow - 2].tank_posediff = math.sqrt(pow((parPose.x - tanklist[i].tank_pose.x) , 2) + pow((parPose.y - tanklist[i].tank_pose.y), 2))goal = math.atan2(parPose.y - tanklist[i].tank_pose.y, parPose.x - tanklist[i].tank_pose.x)ang = math.atan2(math.sin(goal - tanklist[i].tank_pose.theta), math.cos(goal - tanklist[i].tank_pose.theta))if(ang <= -3.14) or (ang > 3.14):ang = ang / (2*math.pi)if(diff < 0.8):twist_data.linear.x = 0 twist_data.angular.z = 0else:twist_data.linear.x = 2.5 * diff                twist_data.angular.z = 20 * angtanklist[i].tank_velocity(twist_data)tanklist[i].oldAngle = ang    def spawn_tank_fn():global nexttankIndexrospy.init_node('snake_tank', anonymous=True)rospy.Subscriber('/tank1/pose', Pose, tank1_poseCallback)rospy.wait_for_service("/tank1/set_pen")try:client = rospy.ServiceProxy('/tank1/set_pen', SetPen)client(0,0,0,0,1)except rospy.ServiceException as e:print("Service call failed: %s"%e)nexttankIndex += 1tanklist.append(mySpawner("tank" + str(nexttankIndex)))# for i in range(2,10):#     tanklist.append(mySpawner("tank" + str(i)))rospy.spin()if __name__ == "__main__":spawn_tank_fn()


蓝桥ROS机器人之turtlesim贪吃蛇相关推荐

  1. 蓝桥ROS机器人之绚丽贪吃蛇

    前面一个贪吃蛇

  2. 蓝桥ROS机器人之曾经新版本(indigo/kinetic/melodic/ardent/dashing)

    在蓝桥ros中曾经开发了5个版本的ROS学习教程(均在2019年之前完成).但是大部分内容并没有公开,测试多轮反馈也不好,这里供需要的朋友参考吧. ubuntu 14.04 ubuntu 16.04 ...

  3. 蓝桥ROS机器人课程和需求

    这一类课程需求量其实并不大. 从已经开设的课程中可以看到总人数也就1.6万+ 关于ROS机器人课程维护,由于时间关系都还是基础类课程. 并且课程设置目标中性,只是提供一个云端环境供学生实验和学习用,不 ...

  4. 蓝桥ROS机器人之C++系列奇妙甜甜圈

    不仅,ROS机器人相关,C++/Python/单片机系列都可以用云平台玩耍. 这里补充一个甜甜圈(2年前案例公开): 用C++写一个简单的动态甜甜圈吧字符串显示的那种哦 Windows C++移植到L ...

  5. 蓝桥ROS机器人之极简贪吃蛇

    参考:codingshiksha.com/c/c-program-to-build-snake-game-using-ncurses-library-full-project-for-beginner ...

  6. 蓝桥ROS机器人之古月居ROS入门21讲

    ROS1入门经典课程,在其官网和B站等都有详细介绍和视频讲解. 古月居校园行 直接在蓝桥云课下载就可以学习和使用啦. 文档部分: 源码等: 将源码复制到demo_ws/src下,并编译后使用: cat ...

  7. 蓝桥ROS机器人系统更新和功能包安装记录

    直接系统更新会有错误: ☞ ROS域名解析问题记录(蓝桥云课ros.asc) sudo apt update 使用ros.asc如下: -----BEGIN PGP PUBLIC KEY BLOCK- ...

  8. 蓝桥ROS机器人之STDR沿墙跑

    效果如何呢,请看下图: 跑一下看看: 启动环境如下: <launch><include file="$(find stdr_robot)/launch/robot_mana ...

  9. 蓝桥ROS机器人之现代C++学习笔记之路径规划

    蓝桥云课有C和C++路径,看博客觉得杂乱无章,推荐按如下路径进行循序渐进的实践学习. C++ 一共 29门课 阶段 0:新手预备 新人必学 新手入门指南之玩转蓝桥云课 新手入门指南之玩转蓝桥云课 本课 ...

  10. 蓝桥ROS机器人之C++基础开发第一个程序

    C++学习资料_zhangrelay的博客-CSDN博客 简介/入门 0.1这些教程的介绍 0.2编程语言简介 0.3C/C++ 简介 0.4C++开发简介 0.5编译器.链接器和库简介 0.6安装集 ...

最新文章

  1. 那个分分钟处理10亿节点图计算的Plato,现在怎么样了?
  2. 修改时间服务器失败,电脑系统同步时间失败怎么办 修改时间服务器的方法。...
  3. java基础-容器-Set
  4. m_Orchestrate learning system---二十、如何写代码不容易犯错
  5. 1小时学会建站(二):购买及绑定域名
  6. java 开发平台idea_JAVA开发平台intellij idea使用教程:有哪些方法可以实现自动导入...
  7. VMware 提示与 Device/Credential Guard 不兼容
  8. 【优化求解】基于matlab改进的灰狼算法求解重油热解优化模型【含Matlab源码 164期】
  9. 科学计算机要用的电池是几号,科学的使用笔记本电池操作指南_硬件教程
  10. 批量发送邮件的软件——邮件群发机器人
  11. C# 关于浏览器——WebKit篇
  12. Perfetto for linux-使用 Perfetto 分析调度问题
  13. 长时间戴耳机对耳朵的伤害多大?这几点一定要牢记
  14. 【分享】参加一个0元小白理财训练营开营第1天的学习笔记
  15. Scala知识点21---高阶方法
  16. provide inject
  17. android 高德地图 删除多边形,高德地图多边形覆盖物添加、获取、删除
  18. 中学生用计算机的警句,中学生常用名言警句
  19. python--数据清洗
  20. Gitee图床迁移阿里云

热门文章

  1. Isilon旧机器重新初始化
  2. python获取当前工作路径
  3. 教你如何免费将XPS转换为PDF格式
  4. Jenkins配置从节点问题:ssh slave known_hosts [SSH]与Slave JVM has terminated. Exit code=126
  5. 时间管理——永远做重要不紧急的事情
  6. Half-space Hyperplane
  7. android构建系统总览
  8. Linux user 的密码策略设定 /etc/shadow
  9. git鉴权失败问题 以及每次clone 都要输入用户名密码问题
  10. 【android 高德地图出现定位失败key鉴权失败,获取 SHA1,对比是否正确】