IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 蓝桥ROS之半自动贪吃龟turtlesim版 -> 正文阅读

[人工智能]蓝桥ROS之半自动贪吃龟turtlesim版

为啥不是全自动?全自动是作业,半自动是提示。

?

?

一步一步完成吧,非常简单。


第一步:打开蓝桥ROS

www.lanqiao.cn/courses/854


第二步:双击xfce终端,分别在不同窗口开启roscore和turtlesim

?

?


第三步:贪吃龟(蓝桥ROS机器人之turtlesim贪吃蛇)?

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):
        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()

?

新开窗口输入python snake.py


第四步:输入坐标实现贪吃龟(ROS机器人从起点到终点(四)蓝桥云实践复现

一个bug点!符号-0.1到0.1跳变,3.14? -3.14?

?


?

第五步:写个节点全自动?留作思考题吧?

?^_^??^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?^_^?


?

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-05-04 07:27:21  更:2022-05-04 07:27:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:30:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码