当前位置: 首页 > news >正文

网站建设公司的市场开拓方案一个网站的建设需要什么手续费

网站建设公司的市场开拓方案,一个网站的建设需要什么手续费,网站有几种类型,建设母婴网站的目的【ROS学习笔记9】ROS常用API 文章目录【ROS学习笔记9】ROS常用API前言一、 初始化二、 话题与服务相关对象三、 回旋函数四、时间函数五、其他函数Reference写在前面#xff0c;本系列笔记参考的是AutoLabor的教程#xff0c;具体项目地址在 这里 前言 ROS的常用API#xf…【ROS学习笔记9】ROS常用API 文章目录【ROS学习笔记9】ROS常用API前言一、 初始化二、 话题与服务相关对象三、 回旋函数四、时间函数五、其他函数Reference写在前面本系列笔记参考的是AutoLabor的教程具体项目地址在 这里 前言 ROS的常用API请参考官网 一、 初始化 Cpp /** brief ROS初始化函数。** 该函数可以解析并使用节点启动时传入的参数(通过参数设置节点名称、命名空间...) ** 该函数有多个重载版本如果使用NodeHandle建议调用该版本。 ** \param argc 参数个数* \param argv 参数列表* \param name 节点名称需要保证其唯一性不允许包含命名空间* \param options 节点启动选项被封装进了ros::init_options**/ void init(int argc, char **argv, const std::string name, uint32_t options 0);Python def init_node(name, argvNone, anonymousFalse, log_levelNone, disable_rostimeFalse, disable_rosoutFalse, disable_signalsFalse, xmlrpc_port0, tcpros_port0):在ROS msater中注册节点param name: 节点名称必须保证节点名称唯一节点名称中不能使用命名空间(不能包含 /)type name: strparam anonymous: 取值为 true 时为节点名称后缀随机编号type anonymous: bool二、 话题与服务相关对象 C 在 roscpp 中话题和服务的相关对象一般由 NodeHandle 创建。 NodeHandle有一个重要作用是可以用于设置命名空间这是后期的重点但是本章暂不介绍。 1、发布对象 对象获取 /** * \brief 根据话题生成发布对象 * * 在 ROS master 注册并返回一个发布者对象该对象可以发布消息 * * 使用示例如下: * * ros::Publisher pub handle.advertisestd_msgs::Empty(my_topic, 1); * * \param topic 发布消息使用的话题 * * \param queue_size 等待发送给订阅者的最大消息数量 * * \param latch (optional) 如果为 true,该话题发布的最后一条消息将被保存并且后期当有订阅者连接时会将该消息发送给订阅者 * * \return 调用成功时会返回一个发布对象 * * */ template class M Publisher advertise(const std::string topic, uint32_t queue_size, bool latch false)消息发布函数 /** * 发布消息 */ template typename M void publish(const M message) const2、订阅对象 对象获取 /*** \brief 生成某个话题的订阅对象** 该函数将根据给定的话题在ROS master 注册并自动连接相同主题的发布方每接收到一条消息都会调用回调* 函数并且传入该消息的共享指针该消息不能被修改因为可能其他订阅对象也会使用该消息。* * 使用示例如下:void callback(const std_msgs::Empty::ConstPtr message) { }ros::Subscriber sub handle.subscribe(my_topic, 1, callback);* * \param M [template] M 是指消息类型 * \param topic 订阅的话题 * \param queue_size 消息队列长度超出长度时头部的消息将被弃用 * \param fp 当订阅到一条消息时需要执行的回调函数 * \return 调用成功时返回一个订阅者对象失败时返回空对象 * void callback(const std_msgs::Empty::ConstPtr message){...} ros::NodeHandle nodeHandle; ros::Subscriber sub nodeHandle.subscribe(my_topic, 1, callback); if (sub) // Enter if subscriber is valid { ... }*/ templateclass M Subscriber subscribe(const std::string topic, uint32_t queue_size, void(*fp)(const boost::shared_ptrM const), const TransportHints transport_hints TransportHints())3、服务对象 对象获取 /** * \brief 生成服务端对象 * * 该函数可以连接到 ROS master并提供一个具有给定名称的服务对象。 * * 使用示例如下: \verbatim bool callback(std_srvs::Empty request, std_srvs::Empty response) { return true; }ros::ServiceServer service handle.advertiseService(my_service, callback); \endverbatim * * \param service 服务的主题名称 * \param srv_func 接收到请求时需要处理请求的回调函数 * \return 请求成功时返回服务对象否则返回空对象: \verbatim bool Foo::callback(std_srvs::Empty request, std_srvs::Empty response) { return true; } ros::NodeHandle nodeHandle; Foo foo_object; ros::ServiceServer service nodeHandle.advertiseService(my_service, callback); if (service) // Enter if advertised service is valid { ... } \endverbatim*/ templateclass MReq, class MRes ServiceServer advertiseService(const std::string service, bool(*srv_func)(MReq, MRes))4、客户端对象 对象获取 /** * brief 创建一个服务客户端对象** 当清除最后一个连接的引用句柄时连接将被关闭。** param service_name 服务主题名称*/templateclass ServiceServiceClient serviceClient(const std::string service_name, bool persistent false, const M_string header_values M_string())请求发送函数 /*** brief 发送请求* 返回值为 bool 类型true请求处理成功false处理失败。*/templateclass Servicebool call(Service service)等待服务函数1 /*** ros::service::waitForService(addInts);* \brief 等待服务可用否则一致处于阻塞状态* \param service_name 被等待的服务的话题名称* \param timeout 等待最大时常默认为 -1可以永久等待直至节点关闭* \return 成功返回 true否则返回 false。*/ ROSCPP_DECL bool waitForService(const std::string service_name, ros::Duration timeout ros::Duration(-1));等待服务函数2 /** * client.waitForExistence(); * \brief 等待服务可用否则一致处于阻塞状态 * \param timeout 等待最大时常默认为 -1可以永久等待直至节点关闭 * \return 成功返回 true否则返回 false。 */ bool waitForExistence(ros::Duration timeout ros::Duration(-1));Python 1、发布对象 对象获取 class Publisher(Topic):在ROS master注册为相关话题的发布方def __init__(self, name, data_class, subscriber_listenerNone, tcp_nodelayFalse, latchFalse, headersNone, queue_sizeNone):Constructorparam name: 话题名称 type name: strparam data_class: 消息类型param latch: 如果为 true,该话题发布的最后一条消息将被保存并且后期当有订阅者连接时会将该消息发送给订阅者type latch: boolparam queue_size: 等待发送给订阅者的最大消息数量type queue_size: int消息发布函数 def publish(self, *args, **kwds):发布消息2、订阅对象 对象获取 class Subscriber(Topic):类注册为指定主题的订阅者其中消息是给定类型的。def __init__(self, name, data_class, callbackNone, callback_argsNone,queue_sizeNone, buff_sizeDEFAULT_BUFF_SIZE, tcp_nodelayFalse):Constructor.param name: 话题名称type name: strparam data_class: 消息类型type data_class: L{Message} classparam callback: 处理订阅到的消息的回调函数type callback: fn(msg, cb_args)param queue_size: 消息队列长度超出长度时头部的消息将被弃用3、服务对象 对象获取 class Service(ServiceImpl):声明一个ROS服务使用示例::s Service(getmapservice, GetMap, get_map_handler)def __init__(self, name, service_class, handler,buff_sizeDEFAULT_BUFF_SIZE, error_handlerNone):param name: 服务主题名称 strparam service_class:服务消息类型param handler: 回调函数处理请求数据并返回响应数据type handler: fn(req)-resp4、客户端对象 对象获取 class ServiceProxy(_Service):创建一个ROS服务的句柄示例用法::add_two_ints ServiceProxy(add_two_ints, AddTwoInts)resp add_two_ints(1, 2)def __init__(self, name, service_class, persistentFalse, headersNone):ctor.param name: 服务主题名称type name: strparam service_class: 服务消息类型type service_class: Service class请求发送函数 def call(self, *args, **kwds):发送请求返回值为响应数据等待服务函数 def wait_for_service(service, timeoutNone):调用该函数时程序会处于阻塞状态直到服务可用param service: 被等待的服务话题名称type service: strparam timeout: 超时时间type timeout: double|rospy.Duration三、 回旋函数 C 在ROS程序中频繁的使用了 ros::spin() 和 ros::spinOnce() 两个回旋函数可以用于处理回调函数。 1、spinOnce() /*** \brief 处理一轮回调** 一般应用场景:* 在循环体内处理所有可用的回调函数* */ ROSCPP_DECL void spinOnce();2、spin() /** * \brief 进入循环处理回调 */ ROSCPP_DECL void spin();3、二者的比较 **相同点:**二者都用于处理回调函数 **不同点:**ros::spin() 是进入了循环执行回调函数而 ros::spinOnce() 只会执行一次回调函数(没有循环)在 ros::spin() 后的语句不会执行到而 ros::spinOnce() 后的语句可以执行。 Python def spin():进入循环处理回调 四、时间函数 ROS中时间相关的API是极其常用比如:获取当前时刻、持续时间的设置、执行频率、休眠、定时器…都与时间相关。 C 1、时刻 获取时刻或是设置指定时刻: ros::init(argc,argv,hello_time); ros::NodeHandle nh;//必须创建句柄否则时间没有初始化导致后续API调用失败 ros::Time right_now ros::Time::now();//将当前时刻封装成对象 ROS_INFO(当前时刻:%.2f,right_now.toSec());//获取距离 1970年01月01日 00:00:00 的秒数 ROS_INFO(当前时刻:%d,right_now.sec);//获取距离 1970年01月01日 00:00:00 的秒数ros::Time someTime(100,100000000);// 参数1:秒数 参数2:纳秒 ROS_INFO(时刻:%.2f,someTime.toSec()); //100.10 ros::Time someTime2(100.3);//直接传入 double 类型的秒数 ROS_INFO(时刻:%.2f,someTime2.toSec()); //100.302、持续时间 设置一个时间区间(间隔): ROS_INFO(当前时刻:%.2f,ros::Time::now().toSec()); ros::Duration du(10);//持续10秒钟,参数是double类型的以秒为单位 du.sleep();//按照指定的持续时间休眠 ROS_INFO(持续时间:%.2f,du.toSec());//将持续时间换算成秒 ROS_INFO(当前时刻:%.2f,ros::Time::now().toSec());3、持续时间与时刻运算 为了方便使用ROS中提供了时间与时刻的运算: ROS_INFO(时间运算); ros::Time now ros::Time::now(); ros::Duration du1(10); ros::Duration du2(20); ROS_INFO(当前时刻:%.2f,now.toSec()); //1.time 与 duration 运算 ros::Time after_now now du1; ros::Time before_now now - du1; ROS_INFO(当前时刻之后:%.2f,after_now.toSec()); ROS_INFO(当前时刻之前:%.2f,before_now.toSec());//2.duration 之间相互运算 ros::Duration du3 du1 du2; ros::Duration du4 du1 - du2; ROS_INFO(du3 %.2f,du3.toSec()); ROS_INFO(du4 %.2f,du4.toSec()); //PS: time 与 time 不可以运算 // ros::Time nn now before_now;//异常4、设置运行频率 ros::Rate rate(1);//指定频率 while (true) {ROS_INFO(-----------code----------);rate.sleep();//休眠休眠时间 1 / 频率。 }5、定时器 ROS 中内置了专门的定时器可以实现与 ros::Rate 类似的效果: ros::NodeHandle nh;//必须创建句柄否则时间没有初始化导致后续API调用失败// ROS 定时器/** * \brief 创建一个定时器按照指定频率调用回调函数。 * * \param period 时间间隔 * \param callback 回调函数 * \param oneshot 如果设置为 true,只执行一次回调函数设置为 false,就循环执行。 * \param autostart 如果为true返回已经启动的定时器,设置为 false需要手动启动。 *///Timer createTimer(Duration period, const TimerCallback callback, bool oneshot false,// bool autostart true) const;// ros::Timer timer nh.createTimer(ros::Duration(0.5),doSomeThing);ros::Timer timer nh.createTimer(ros::Duration(0.5),doSomeThing,true);//只执行一次// ros::Timer timer nh.createTimer(ros::Duration(0.5),doSomeThing,false,false);//需要手动启动// timer.start();ros::spin(); //必须 spin定时器的回调函数 void doSomeThing(const ros::TimerEvent event){ROS_INFO(-------------);ROS_INFO(event:%s,std::to_string(event.current_real.toSec()).c_str()); }Python 1、时刻 获取时刻或是设置指定时刻: # 获取当前时刻 right_now rospy.Time.now() rospy.loginfo(当前时刻:%.2f,right_now.to_sec()) rospy.loginfo(当前时刻:%.2f,right_now.to_nsec()) # 自定义时刻 some_time1 rospy.Time(1234.567891011) some_time2 rospy.Time(1234,567891011) rospy.loginfo(设置时刻1:%.2f,some_time1.to_sec()) rospy.loginfo(设置时刻2:%.2f,some_time2.to_sec())# 从时间创建对象 # some_time3 rospy.Time.from_seconds(543.21) some_time3 rospy.Time.from_sec(543.21) # from_sec 替换了 from_seconds rospy.loginfo(设置时刻3:%.2f,some_time3.to_sec())2、持续时间 设置一个时间区间(间隔): # 持续时间相关API rospy.loginfo(持续时间测试开始.....) du rospy.Duration(3.3) rospy.loginfo(du1 持续时间:%.2f,du.to_sec()) rospy.sleep(du) #休眠函数 rospy.loginfo(持续时间测试结束.....)3、持续时间与时刻运算 为了方便使用ROS中提供了时间与时刻的运算: rospy.loginfo(时间运算) now rospy.Time.now() du1 rospy.Duration(10) du2 rospy.Duration(20) rospy.loginfo(当前时刻:%.2f,now.to_sec()) before_now now - du1 after_now now du1 dd du1 du2 # now now now #非法 rospy.loginfo(之前时刻:%.2f,before_now.to_sec()) rospy.loginfo(之后时刻:%.2f,after_now.to_sec()) rospy.loginfo(持续时间相加:%.2f,dd.to_sec())4、设置运行频率 # 设置执行频率 rate rospy.Rate(0.5) while not rospy.is_shutdown():rate.sleep() #休眠rospy.loginfo()5、定时器 ROS 中内置了专门的定时器可以实现与 ros::Rate 类似的效果: #定时器设置def __init__(self, period, callback, oneshotFalse, resetFalse):Constructor.param period: 回调函数的时间间隔type period: rospy.Durationparam callback: 回调函数type callback: function taking rospy.TimerEventparam oneshot: 设置为True就只执行一次否则循环执行type oneshot: boolparam reset: if True, timer is reset when rostime moved backward. [default: False]type reset: boolrospy.Timer(rospy.Duration(1),doMsg) # rospy.Timer(rospy.Duration(1),doMsg,True) # 只执行一次 rospy.spin()回调函数 def doMsg(event):rospy.loginfo()rospy.loginfo(当前时刻:%s,str(event.current_real))五、其他函数 在发布实现时一般会循环发布消息循环的判断条件一般由节点状态来控制C中可以通过 ros::ok() 来判断节点状态是否正常而 python 中则通过 rospy.is_shutdown() 来实现判断导致节点退出的原因主要有如下几种: 节点接收到了关闭信息比如常用的 ctrl c 快捷键就是关闭节点的信号同名节点启动导致现有节点退出程序中的其他部分调用了节点关闭相关的API(C中是ros::shutdown()python中是rospy.signal_shutdown()) 另外日志相关的函数也是极其常用的在ROS中日志被划分成如下级别: DEBUG(调试):只在调试时使用此类消息不会输出到控制台INFO(信息):标准消息一般用于说明系统内正在执行的操作WARN(警告):提醒一些异常情况但程序仍然可以执行ERROR(错误):提示错误信息此类错误会影响程序运行FATAL(严重错误):此类错误将阻止节点继续运行。 C 1、节点状态判断 /** \brief 检查节点是否已经退出** ros::shutdown() 被调用且执行完毕后该函数将会返回 false** \return true 如果节点还健在, false 如果节点已经火化了。*/ bool ok();2、节点关闭函数 /* * 关闭节点 */ void shutdown();3、日志函数 ROS_DEBUG(hello,DEBUG); //不会输出 ROS_INFO(hello,INFO); //默认白色字体 ROS_WARN(Hello,WARN); //默认黄色字体 ROS_ERROR(hello,ERROR);//默认红色字体 ROS_FATAL(hello,FATAL);//默认红色字体Python 1、节点状态判断 def is_shutdown():return: True 如果节点已经被关闭rtype: bool2、节点关闭函数 def signal_shutdown(reason):关闭节点param reason: 节点关闭的原因是一个字符串type reason: strdef on_shutdown(h):节点被关闭时调用的函数param h: 关闭时调用的回调函数此函数无参type h: fn()3、日志函数 rospy.logdebug(hello,debug) #不会输出 rospy.loginfo(hello,info) #默认白色字体 rospy.logwarn(hello,warn) #默认黄色字体 rospy.logerr(hello,error) #默认红色字体 rospy.logfatal(hello,fatal) #默认红色字体Reference http://www.autolabor.com.cn/book/ROSTutorials/di-2-zhang-ros-jia-gou-she-ji/23-fu-wu-tong-xin/224-fu-wu-tong-xin-zi-ding-yi-srv-diao-yong-b-python.html
文章转载自:
http://www.morning.ydyjf.cn.gov.cn.ydyjf.cn
http://www.morning.zmzdx.cn.gov.cn.zmzdx.cn
http://www.morning.zcckq.cn.gov.cn.zcckq.cn
http://www.morning.ckfyp.cn.gov.cn.ckfyp.cn
http://www.morning.mdxwz.cn.gov.cn.mdxwz.cn
http://www.morning.gmmyn.cn.gov.cn.gmmyn.cn
http://www.morning.wnbqy.cn.gov.cn.wnbqy.cn
http://www.morning.flhnd.cn.gov.cn.flhnd.cn
http://www.morning.yhgbd.cn.gov.cn.yhgbd.cn
http://www.morning.dskzr.cn.gov.cn.dskzr.cn
http://www.morning.swyr.cn.gov.cn.swyr.cn
http://www.morning.sflnx.cn.gov.cn.sflnx.cn
http://www.morning.wklrz.cn.gov.cn.wklrz.cn
http://www.morning.nwczt.cn.gov.cn.nwczt.cn
http://www.morning.dfhkh.cn.gov.cn.dfhkh.cn
http://www.morning.nmfml.cn.gov.cn.nmfml.cn
http://www.morning.cwjsz.cn.gov.cn.cwjsz.cn
http://www.morning.rwmp.cn.gov.cn.rwmp.cn
http://www.morning.rpljf.cn.gov.cn.rpljf.cn
http://www.morning.pnmnl.cn.gov.cn.pnmnl.cn
http://www.morning.lkmks.cn.gov.cn.lkmks.cn
http://www.morning.blqsr.cn.gov.cn.blqsr.cn
http://www.morning.rtryr.cn.gov.cn.rtryr.cn
http://www.morning.wqpb.cn.gov.cn.wqpb.cn
http://www.morning.zckhn.cn.gov.cn.zckhn.cn
http://www.morning.mingjiangds.com.gov.cn.mingjiangds.com
http://www.morning.ydflc.cn.gov.cn.ydflc.cn
http://www.morning.mcndn.cn.gov.cn.mcndn.cn
http://www.morning.zpfqh.cn.gov.cn.zpfqh.cn
http://www.morning.zqdzg.cn.gov.cn.zqdzg.cn
http://www.morning.nqwkn.cn.gov.cn.nqwkn.cn
http://www.morning.tstwx.cn.gov.cn.tstwx.cn
http://www.morning.bpmnx.cn.gov.cn.bpmnx.cn
http://www.morning.qrlsy.cn.gov.cn.qrlsy.cn
http://www.morning.pphbn.cn.gov.cn.pphbn.cn
http://www.morning.wdhhz.cn.gov.cn.wdhhz.cn
http://www.morning.snrbl.cn.gov.cn.snrbl.cn
http://www.morning.ypmqy.cn.gov.cn.ypmqy.cn
http://www.morning.plcyq.cn.gov.cn.plcyq.cn
http://www.morning.kxypt.cn.gov.cn.kxypt.cn
http://www.morning.nlgnk.cn.gov.cn.nlgnk.cn
http://www.morning.lbssg.cn.gov.cn.lbssg.cn
http://www.morning.khtyz.cn.gov.cn.khtyz.cn
http://www.morning.mbmh.cn.gov.cn.mbmh.cn
http://www.morning.yprnp.cn.gov.cn.yprnp.cn
http://www.morning.brlcj.cn.gov.cn.brlcj.cn
http://www.morning.mtgkq.cn.gov.cn.mtgkq.cn
http://www.morning.yslfn.cn.gov.cn.yslfn.cn
http://www.morning.knwry.cn.gov.cn.knwry.cn
http://www.morning.tqpds.cn.gov.cn.tqpds.cn
http://www.morning.nptls.cn.gov.cn.nptls.cn
http://www.morning.rhsr.cn.gov.cn.rhsr.cn
http://www.morning.wrysm.cn.gov.cn.wrysm.cn
http://www.morning.xflwq.cn.gov.cn.xflwq.cn
http://www.morning.nxfwf.cn.gov.cn.nxfwf.cn
http://www.morning.qsy39.cn.gov.cn.qsy39.cn
http://www.morning.lhrwy.cn.gov.cn.lhrwy.cn
http://www.morning.drkk.cn.gov.cn.drkk.cn
http://www.morning.zqbrd.cn.gov.cn.zqbrd.cn
http://www.morning.zgdnd.cn.gov.cn.zgdnd.cn
http://www.morning.wxrbl.cn.gov.cn.wxrbl.cn
http://www.morning.rtspr.cn.gov.cn.rtspr.cn
http://www.morning.mggwr.cn.gov.cn.mggwr.cn
http://www.morning.xmttd.cn.gov.cn.xmttd.cn
http://www.morning.pxspq.cn.gov.cn.pxspq.cn
http://www.morning.gynkr.cn.gov.cn.gynkr.cn
http://www.morning.dxhnm.cn.gov.cn.dxhnm.cn
http://www.morning.qlkjh.cn.gov.cn.qlkjh.cn
http://www.morning.fqlxg.cn.gov.cn.fqlxg.cn
http://www.morning.xtdms.com.gov.cn.xtdms.com
http://www.morning.nfzzf.cn.gov.cn.nfzzf.cn
http://www.morning.qyjqj.cn.gov.cn.qyjqj.cn
http://www.morning.cklld.cn.gov.cn.cklld.cn
http://www.morning.rcwzf.cn.gov.cn.rcwzf.cn
http://www.morning.ghpld.cn.gov.cn.ghpld.cn
http://www.morning.snyqb.cn.gov.cn.snyqb.cn
http://www.morning.nzhzt.cn.gov.cn.nzhzt.cn
http://www.morning.zntf.cn.gov.cn.zntf.cn
http://www.morning.hjrjy.cn.gov.cn.hjrjy.cn
http://www.morning.qcztm.cn.gov.cn.qcztm.cn
http://www.tj-hxxt.cn/news/262461.html

相关文章:

  • 武夷山景区网站建设特点四川网络营销推广
  • 温州 网站开发小米应用商店下载安装
  • jsp页面如何做网站pv统计网站备案和前置审批
  • 手机怎么安装网站程序php网站开发手机绑定
  • 网站建设的费用包括哪些内容asp新闻发布网站模板下载
  • 网站的经费预算wordpress主题百度网盘
  • 帮人注册网站 做app爱凡客
  • 制作一个在线收费网站国外怎么做直播网站
  • 建站极速通个人电影网站做APP违法吗
  • 滨海新区网站建设网络广告怎么做
  • wordpress 小说网站最近一周的重大热点新闻
  • 九洲建设官方网站大连金州开发区
  • 自己做网站推广需要多少钱论坛网站设计
  • 站长源码论坛空包网站怎么建设
  • 丹东电信网站备案wordpress 重新生成
  • 北京网站建设网站改版的费用如何评价一个网站做的好不好
  • 宁波宣传片制作公司百度seo关键词排名优化软件
  • 怎样上传网站到空间江苏建设是国企吗
  • 网站建设狼盾网络找建设网站公司吗
  • 企业网站优化的原则景县做个油管的网站怎么做
  • 怎么做产品的网站代理公司注册记账
  • 加强网站建设工作软件开发都有哪些
  • 天桥网站建设wordpress 去掉技术支持
  • 学校网站管理系统php网站开发用什么软件
  • 网站制作的关键技术一个高校的校园网站建设费用
  • 做网站网站盈利会怎么样网站维护 推广
  • 四博网站备案手工网站做蛋糕盒子
  • wordpress布置网站教程制作灯笼作文300字
  • 免费公司网站设计利用花生壳做网站
  • 为何网站打开慢网站是怎么建立起来的