当前位置:   article > 正文

ROS-Python_ros python

ros python

用python来编写ros话题、服务方面常用的几个点:

话题topic

1、初始化节点

rospy.init_node("节点名字")
举例:rospy . init_node("test",anonymous = True )
anonymous=True,表示后面定义相同的node名字时候,按照序号进行排列.
2、定义一个发布者
pub = rospy.Publisher(话题名称,话题数据类型,话题数据队列大小)
举例: vel_pub = rospy . Publisher ( '/cmd_vel' , Twist , queue_size = 8 )
3、定义一个订阅者
rospy.Subscriber(话题名称,话题数据类型,回调函数名称)

举例:rospy.Subscriber('/cmd_vel', Twist, velCallback) 

4、 设置循环频率以及按照循环频率延时

  1. rate = rospy.Rate(频率大小)
  2. rate.sleep()

举例:rate = rospy.Rate(50)

以50Hz的频率发布消息

5、发布消息

发布者对象.publish(消息数据)

举例:vel_pub.publish(vel_msg),这里的msg要与发布者规定的一致。

6、判断节点是否关闭

 rospy.is_shutdown()

常用在循环里边,节点开启,进入循环,节点关闭,退出循环。 

7、导入自定义的msg/srv文件

from PackageName.msg import Defmsg

举例:功能包名字是School_Information,自定义的msg文件是Student且放在School_Information功能包的msg文件夹下,则导入Student类型的msg文件时候,可以写

from School_Information.msg import Student

服务service

1、服务消息

服务消息由请求数据和应答数据组成,请求数据可以理解成函数输入参数,应答数据可以理解成

函数的返回值。需要注意的是,请求数据与应答数据之间,用---间隔开来

举例,定义一个服务数据,请求数据为两个整型数据,应答数据也是一个整数据,

  1. int32 requets_a
  2. int32 request_b
  3. ---
  4. int response_c

2、定义一个服务端

def_service = rospy.Service("服务的名字",服务数据类型,服务函数名称)

举例,定义一个服务,名字是Add_int,服务数据类型是Two_Int,服务内容函数名字是Add_proc是把两个请求数据相加后返回它们的和,

  1. s = rospy.Service("Add_int",Two_Int,Add_proc)
  2. def Add_proc(req):
  3. result = req.request_a + req.request_b;
  4. return Two_IntRespone(result)

这里的服务函数参数名字必须是req,在调用了该服务时候,会把参数赋值给req.

3、引用请求服务的数据

req.定义服务消息的请求数据的名字

举例,我们定义了一个服务消息类型数据,其中,服务数据的变量名字是request_a,那么再调用这个服务请求数据的时候,就是,

req.request_a

4、返回服务函数服务结果

return 服务数据类型Responese(返回的具体内容)

返回时候需要指定服务数据的类型名字,也就是自定义的服务类型数据的名字,返回的具体内容就是期望返回的数据,这里的数据类型需要与定义服务数据时候定义的应答数据类型一致。举例,

  1. result = req.a + req.b
  2. return Two_IntResponse(result)

5、等待服务

rospy.wait_for_service("服务名称")

举例,

rospy.wait_for_service("Add_int")

 6、创建一个客户端

client = rospy.ServiceProxy("服务名称",服务数据类型)

在创建客户端时,我们需要说明我们需要请求的服务是什么,也就是服务名称,以及我们的服务数据类型,举例,

c = rospy.ServiceProxy("Add_int",Two_int)

7、客户端调用服务

使用函数call,会返回应答数据response,这是是指定的名字,

response = 客户端.call(服务请求数据)

举例,

response = c.call(100,200)

把请求数据发到服务端后作为函数参数传入服务函数,服务端就会计算出应答数据,并且返回,赋值给response,这是个关键词,并不是一个变量的名字

8、调用服务返回的应答数据

respone.服务数据中的应答数据的变量名字

举例,

response.response_c

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/401100
推荐阅读
相关标签
  

闽ICP备14008679号