基于Linux系统的ROS海龟跟踪实验

一、启动安装与启动roscore

可以去鱼香ROS一键安装ROS,网址为http://fishros.com

进去后点击一键安装

就能看到一键安装指令

  • wget http://fishros.com/install -O fishros && . fishros

安装完毕后即可启动roscore

二、工作空间的创建

 

 使用catkin_create_pkg 创建功能包,__name__为仍以附属名,后面为依赖,如果使用python编程,可不加roscpp。

三、进入__name__底下的src进行python文件的编写。

海龟跟踪的代码如下:

  • #!/usr/bin/env python3
    
    from lib2to3.pgen2.token import RPAR
    from operator import inv
    import re
    import sys
    import rospy
    import numpy as np
    import math
    from turtlesim.srv import Spawn
    from geometry_msgs.msg import Twist
    from turtlesim.msg import Pose
    
    global  pose1
    global topicPub
    
    def pose1Callback(msg):
        global pose1
        pose1.x=msg.x
        pose1.y=msg.y
        rospy.loginfo("Turtle1111 pose: x:%0.6f, y:%0.6f", msg.x, msg.y)
    
    def pose2Callback(msg):
        global pose1
        pose2 = Pose()
        pose2.x=msg.x
        pose2.y=msg.y
        rospy.loginfo("Turtle2222pose: x:%0.6f, y:%0.6f", msg.x, msg.y)
        pose2.theta = msg.theta
        c = math.cos(msg.theta)
        s = math.sin(msg.theta)
    
        inv_Org = Pose()
        inv_Org.x = -1*(        c * pose2.x  +  s  *  pose2.y       )
        inv_Org.y = -1*(  -1*s  * pose2.x  +  c  * pose2.y       )
    
        Rotated_P = Pose()
        Rotated_P.x=            c * pose1.x  +  s  *  pose1.y 
        Rotated_P.y=   -1*   s * pose1.x  +  c *  pose1.y 
    
        relatedPose = Pose()
        relatedPose.x = Rotated_P.x  +  inv_Org.x
        relatedPose.y = Rotated_P.y + inv_Org.y
    
        vel_msg = Twist()
        vel_msg.linear.x = math.sqrt(relatedPose.x * relatedPose.x + relatedPose.y * relatedPose.y )
        vel_msg.angular.z = math.atan2(relatedPose.y , relatedPose.x)
        turtle_vel_pub.publish(vel_msg)
    
    
    
    
    if __name__ == "__main__":
        pose1 = Pose()
        rospy.init_node("turtle_following")
        try:
            add_turtle = rospy.ServiceProxy('/spawn' , Spawn)
            response = add_turtle(1 , 1 , 0, "turtle2")
        except rospy.ServiceException as e:
            print("Service call failed:%s",e)
    
        turtle_vel_pub = rospy.Publisher('/turtle2/cmd_vel',Twist,queue_size=10)
        rospy.Subscriber("/turtle1/pose",Pose,pose1Callback)
        rospy.Subscriber("/turtle2/pose",Pose,pose2Callback)
        rospy.spin()

在编辑过程中,遇到了一个问题

 导入numpy包的时候出现黄下划线,一运行就开始报错

 第一个报错出现在第五行

 就是这个numpy,但是通过pip3 install numpy后

运行还是报错,经过老师指导,将import numpy删除后,报错还是未改变。

最终就是后面的rospkg模块未安装,通过 pip3 install rospkg后,程序就能正常运行了。

很奇怪的是在未安装rospkg的情况下,在python源代码里面import rospkg居然有高亮,可能是版本问题,这个不是很清楚。

四、实现海龟跟踪

先生产一个海龟

rosrun turtlesim turtlesim_node

再使用

rosrun turtlesim turtle_teleop_key 

预控制海龟,再rosrun __name__ __name__.py将刚才的py脚本文件运行起来,得注意,python脚本文件需要先赋予其执行权限。

可以现在目标文件下使用

ls -l

可查看文件执行权限

r  读

w  写

x  执行

我们需要赋予其执行权限,需要使用

chmod +x __name__

然后再运行海龟文件

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值