turtlesim到貪吃蛇……

      網友投稿 611 2025-04-01

      簡單:藍橋ROS機器人之極簡貪吃蛇

      酷炫:藍橋ROS機器人之絢麗貪吃蛇

      效果如下:

      需要修改哪些功能包?

      如何一步一步實現上述功能?

      鍵盤遙控可否改成自動貪吃蛇?

      部分提示如下:

      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 math

      tank1_pose = Pose()

      tanklist = []

      lasttank = 1

      nexttankIndex = 1

      class mySpawner:

      def __init__(self, tname):

      self.tank_name = tname

      self.state = 1

      rospy.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 = 1

      self.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 = data

      def tank_velocity(self, msg):

      從turtlesim到貪吃蛇……

      self.pub.publish(msg)

      def tank1_poseCallback(data):

      global tank1_pose

      global lasttank

      global tanklist

      global nexttankIndex

      tank1_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.theta

      if(ang <= -3.14) or (ang > 3.14):

      ang = ang / math.pi

      if (tanklist[i].state == 1):

      if diff < 1.0:

      tanklist[i].state = 2

      tanklist[i].tank_to_follow = lasttank

      lasttank = i + 2

      rospy.loginfo("tank Changed [%s] [%f] [%f]", tanklist[i].tank_name, diff, ang)

      nexttankIndex += 1

      tanklist.append(mySpawner("tank" + str(nexttankIndex)))

      else:

      parPose = tank1_pose

      if(tanklist[i].tank_to_follow != 1):

      parPose = tanklist[tanklist[i].tank_to_follow - 2].tank_pose

      diff = 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 = 0

      else:

      twist_data.linear.x = 2.5 * diff

      twist_data.angular.z = 20 * ang

      tanklist[i].tank_velocity(twist_data)

      tanklist[i].oldAngle = ang

      def spawn_tank_fn():

      global nexttankIndex

      rospy.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 += 1

      tanklist.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()

      機器人

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:WPS表格中對數字進行篩選的方法圖解步驟(wps表格數字篩選)
      下一篇:拼多多+阿里+今日頭條+京東眾多大廠Java面經合集(2020面試總結)
      相關文章
      久久亚洲精品无码| 国产精品亚洲二区在线观看| 亚洲人成网77777色在线播放| 国产午夜亚洲精品不卡免下载| 中文字幕在线日亚洲9| 亚洲国产成人综合| 亚洲同性男gay网站在线观看| 亚洲国产老鸭窝一区二区三区 | 国产成人综合亚洲亚洲国产第一页| 亚洲精品无码久久不卡| 亚洲国产91精品无码专区| 偷自拍亚洲视频在线观看99| 日韩精品成人亚洲专区| 亚洲 另类 无码 在线| 日产国产精品亚洲系列| 亚洲人成人网站在线观看| 亚洲午夜成人精品电影在线观看| 亚洲 小说区 图片区 都市| 亚洲国产午夜中文字幕精品黄网站| 成人亚洲网站www在线观看| 亚洲av无码国产精品色在线看不卡| 精品久久久久亚洲| 亚洲国产精品人人做人人爱| 亚洲真人日本在线| 亚洲欧洲日产国码无码网站| 亚洲AV无码久久精品蜜桃| 亚洲国产综合91精品麻豆| 亚洲最新黄色网址| 亚洲av永久无码精品三区在线4| 亚洲a视频在线观看| 中文字幕乱码亚洲无线三区| 亚洲国产AV无码一区二区三区| 国产偷国产偷亚洲高清人| 亚洲精品成人网久久久久久| 亚洲综合在线另类色区奇米| 亚洲AV永久无码区成人网站| 亚洲网站在线免费观看| 亚洲娇小性xxxx色| 亚洲av永久无码一区二区三区| 亚洲国产人成精品| 国产成人精品日本亚洲|