ROS学习第三章

学习常用API(应用程序编程接口)

roscpp: roscpp

初始化ROS节点

参数:           name:设置节点名称

                     argv=None:封装节点调用时传入的参数

                     anonymous=False:为节点名称生成随机后缀以解决重名问题

在命令行rosrun xx xx.py 后加上_A:=10000就可以把节点名称赋值

如果不开name随机,同名的节点不允许同时存在,新的开了旧的会关掉

rospy.init_node("shengg",anonymous=True)

创建发布者对象中latch的使用,布尔类型,默认值False

如果设置为Ture,可以将发布的最后一条信息保存,当后续新的订阅对象连接时,会将该数据发给订阅者

这样就可以rostopic echo che来看最后一条是啥,比如以后创建的静态地图,就设置为只发送一次,新建一个连接再重新发一次

时间相关

时间原点:1970.1.1 0:00:00

可以将时间转换为距离时间原点多少秒

#! /usr/bin/env python

import rospy

if __name__=="__main__":

    rospy.init_node("time")

    right=rospy.Time.now()

    rospy.loginfo("距离%.2f",right.to_sec())

    rospy.loginfo("距离%d",right.secs)

time=rospy.Time(100)

意思是定义一个TIME距离原点100s

time2=rospy.Time(100,100)

这两个参数一个是s一个是ns

time3=rospy.Time.from_sec(200)

这也是一种定义的方法

程序执行中停五秒,先定义一个时间再sleep即可

du=rospy.Duration(5)

rospy.sleep(du)

计算下程序的结束时间

    time4=rospy.Time.now()

    du1=rospy.Duration(5)

    time5=time4+du1

    rospy.sleep(du1)

    time6=rospy.Time.now()

    rospy.loginfo("%.2f",time5.to_sec())

    rospy.loginfo("%.2f",time6.to_sec())

time之间可以相减不能相加

接下来看定时器,本例实现隔某个时间执行某种操作

def my_timer1(event):

rospy.loginfo("777")

rospy.loginfo("%.2f",event.current_real.to_sec())

timer1=rospy.Timer(rospy.Duration(2),my_timer1,oneshot=False)

rospy.spin()

oneshot意思是是否只执行一次

节点操作函数

一般用于循环条件

while not rospy.is_shutdown():

rospy.on_shutdown(zuihou)

rospy.signal_shutdown("关闭节点")

on.shutdown是在关闭过程中执行一个回调函数

日志操作比较简单,DEBUG信息不在控制台显示

最后看下模块导入

这样写没法运行,因为rosrun跑的默认目录不是在scripts下面,而是我们的大文件夹demo03_ws

解决方法是设置临时环境变量

import sys

sys.path.insert(0,"/home/rosenoetic/demo03_ws/src/server_client/scripts")

import daoru1

if __name__=="__main__":

    rospy.init_node("fule")

    rospy.loginfo("www%d",daoru1.num1)  

但这种写路径的肯定不是最优解决,不方便移植

import os

import sys

path=os.path.abspath(“.”)

sys.path.insert(0,path+"/src/server_client/scripts")

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值