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

购物网站大全棉鞋河南做酒店网络系统网站

购物网站大全棉鞋,河南做酒店网络系统网站,商业网站建设实训指导书,修改WordPress文章修改样式目录 说明#xff1a; 1. 话题模型 2. 实现过程#xff08;C#xff09; 自定义话题消息 Person.msg文件内容 Person.msg文件内容说明 编译配置 在package.xml文件中添加功能包依赖 在CMakeLists.txt中添加编译选项 编译生成语言相关文件 创建发布者代码#xff…目录 说明 1. 话题模型 2. 实现过程C 自定义话题消息 Person.msg文件内容 Person.msg文件内容说明 编译配置 在package.xml文件中添加功能包依赖 在CMakeLists.txt中添加编译选项 编译生成语言相关文件 创建发布者代码C 创建订阅者代码C 配置代码编译规则 配置内容说明 编译并运行 编译 运行 扩展 3. 实现过程Python 创建发布者代码Python 创建订阅者代码Python 运行 说明 1. 本系列学习笔记基于B站古月居《ROS入门21讲》课程且使用的Ubuntu与ROS系统版本与课程完全一致 虚拟机版本Linux系统版本ROS系统版本VMware WorkStation Pro 16Ubuntu18.04Melodic 2. 课程中的所有示例代码均已跑通且对Pyhon版本的代码也都做了运行验证并附带验证过程错误均已修正 3. 本节是整个笔记的第10节对应视频课程的第12节请自行对应学习 4. 整个系列笔记基本已经完结但部分章节仍需润色修改 后面会陆续发布请大家持续关注      创作不易感谢支持   1. 话题模型 2. 实现过程C 自定义话题消息 cd ~/catkin_ws/src/learning_topic mkdir msg cd msg touch Person.msg Person.msg文件内容 string name // 名字 uint8 sex   // 性别分为3种男、女、未知下面以012宏定义做表示判断 uint8 age   // 年龄 ​ uint8 unknown 0 uint8 male 1     uint8 female 2 Person.msg文件内容说明 Person.msg文件里定义的内容跟语言无关的这既不是c也不是python这里面的string uint8表示在不同的程序里面扩展成对应该种程序的表示方法可以类比单片机里无符号整型变量类型unsigned int来理解缩写就是uint。 cd ~/catkin_ws/src/learning_topic mkdir msg 注意新建的这个文件夹名字不能随便命名只能叫msg否则编译会报错CMakeList文件中有说明要放在名叫msg文件夹中。 cd msg touch Person.msg 注意这里的文件名首字母P一定要大写否则后面会报错 打开Person.msg文件把定义的内容复制到文件里并保存 注意输入的内容中注释不要空格不能用tab键缩进否则后面也会报错 编译配置 路径~/catkin_ws/src/learning_topic 在package.xml文件中添加功能包依赖 build_dependmessage_generation/build_depend exec_dependmessage_runtime/exec_depend build_depend编译依赖 exec_depend运行依赖 在CMakeLists.txt中添加编译选项 find_package(......message_generation) add_message_files(FILES Person.msg) generate_messages(DEPENDENCIES std_msgs) add_message_files 把我们定义的Person.msg文件做为我们定义的接口 generate_messages编译Person.msg文件的时候需要用到一些依赖于ROS已有的库或包 我们这里用到的依赖是std_msgs我们前面看到的stringuint8都是在std_msgs里面做定义的 catkin_package(......message_runtime) 编译生成语言相关文件 cd ~/catkin_ws catkin_make 编译成功之后可以在~/catkin_ws/devel/include/learning_topic下看到Person.msg文件编译生成的C的头文件Person.h 创建发布者代码C cd ~/catkin_ws/src/learning_topic/src touch person_publisher.cpp 初始化ROS节点 向ROS Master注册节点信息包括发布消息的话题名话题中的消息类型 创建消息数据 按照一定频率循环发布消息 /*** 该例程将发布/person_info话题自定义消息类型learning_topic::Person*/#include ros/ros.h #include learning_topic/Person.h ​ int main(int argc, char **argv) {// ROS节点初始化ros::init(argc, argv, person_publisher); ​// 创建节点句柄ros::NodeHandle n; ​// 创建一个Publisher发布名为/person_info的topic消息类型为learning_topic::Person队列长度10ros::Publisher person_info_pub n.advertiselearning_topic::Person(/person_info, 10); ​// 设置循环的频率ros::Rate loop_rate(1); ​int count 0;while (ros::ok()){// 初始化learning_topic::Person类型的消息learning_topic::Person person_msg;person_msg.name Tom;person_msg.age   18;person_msg.sex   learning_topic::Person::male; ​// 发布消息person_info_pub.publish(person_msg); ​ROS_INFO(Publish Person Info: name:%s age:%d sex:%d, person_msg.name.c_str(), person_msg.age, person_msg.sex); ​// 按照循环频率延时loop_rate.sleep();} ​return 0; } 创建订阅者代码C cd ~/catkin_ws/src/learning_topic/src touch person_subscriber.cpp 初始化ROS节点 订阅需要的话题 循环等待话题消息接收到消息后进入回调函数 在回调函数中完成消息处理。 /*** 该例程将订阅/person_info话题自定义消息类型learning_topic::Person*/#include ros/ros.h #include learning_topic/Person.h ​ // 接收到订阅的消息后会进入消息回调函数 void personInfoCallback(const learning_topic::Person::ConstPtr msg) {// 将接收到的消息打印出来ROS_INFO(Subcribe Person Info: name:%s age:%d sex:%d, msg-name.c_str(), msg-age, msg-sex); } ​ int main(int argc, char **argv) {// 初始化ROS节点ros::init(argc, argv, person_subscriber); ​// 创建节点句柄ros::NodeHandle n; ​// 创建一个Subscriber订阅名为/person_info的topic注册回调函数personInfoCallbackros::Subscriber person_info_sub n.subscribe(/person_info, 10, personInfoCallback); ​// 循环等待回调函数ros::spin(); ​return 0; } 配置代码编译规则 将下面6行内容复制到CMakeLists.txt文件中 add_executable(person_publisher src/person_publisher.cpp) target_link_libraries(person_publisher ${catkin_LIBRARIES}) add_dependencies(person_publisher ${PROJECT_NAME}_generate_messages_cpp) ​ add_executable(person_subscriber src/person_subscriber.cpp) target_link_libraries(person_subscriber ${catkin_LIBRARIES}) add_dependencies(person_subscriber ${PROJECT_NAME}_generate_messages_cpp) 配置内容说明 add_executable 将person_publisher.cpp和person_subscriber.cpp代码文件编译成person_publisher与person_subscriber可执行文件 target_link_libraries 把编译生成的可执行文件person_publisher与person_subscriber跟ROS相关的一些库做连接的比如调用的C的接口 add_dependencies 有一些代码是动态生成的而可执行文件也需要与动态生成的程序产生依赖关系所以这个就是用来动态的和刚才生成的头文件Person.h产生依赖关系的 复制到CMakeLists.txt文件中的位置如下 编译并运行 编译 cd ~/catkin_ws catkin_make 运行 roscore rosrun learning_topic person_subscriber rosrun learning_topic person_publisher 第一步打开ROS Master 第二步运行订阅者person_subscriber让其先等待着发布者发布消息数据 第三步运行发布者person_publisher让其发布消息数据 扩展 如果把启动ROS_Master的roscore关掉发布者与订阅者依然在发布和接收消息数据此时ROS_Master的结束对两者并无影响 因为ROS_Master是帮助节点建立连接的一旦连接创立ROS_Master在这里的作用就不再存在了但关掉ROS_Master后 如果有第三个节点要加入进来的话是无法再建立连接的。 3. 实现过程Python 创建发布者代码Python cd ~/catkin_ws/src/learning_topic/scripts touch person_publisher.py #!/usr/bin/env python # -*- coding: utf-8 -*- # 该例程将发布/person_info话题自定义消息类型learning_topic::Person ​ import rospy from learning_topic.msg import Person ​ def velocity_publisher():# ROS节点初始化rospy.init_node(person_publisher, anonymousTrue) ​# 创建一个Publisher发布名为/person_info的topic消息类型为learning_topic::Person队列长度10person_info_pub rospy.Publisher(/person_info, Person, queue_size10) ​#设置循环的频率rate rospy.Rate(10) ​while not rospy.is_shutdown():# 初始化learning_topic::Person类型的消息person_msg Person()person_msg.name Tom;person_msg.age 18;person_msg.sex Person.male; ​# 发布消息person_info_pub.publish(person_msg)rospy.loginfo(Publsh person message[%s, %d, %d], person_msg.name, person_msg.age, person_msg.sex) ​# 按照循环频率延时rate.sleep() ​ if __name__ __main__:try:velocity_publisher()except rospy.ROSInterruptException:pass 创建订阅者代码Python cd ~/catkin_ws/src/learning_topic/scripts touch person_subscriber.py #!/usr/bin/env python # -*- coding: utf-8 -*- # 该例程将订阅/person_info话题自定义消息类型learning_topic::Person ​ import rospy from learning_topic.msg import Person ​ def personInfoCallback(msg):rospy.loginfo(Subcribe Person Info: name:%s age:%d sex:%d, msg.name, msg.age, msg.sex) ​ def person_subscriber():# ROS节点初始化rospy.init_node(person_subscriber, anonymousTrue) ​# 创建一个Subscriber订阅名为/person_info的topic注册回调函数personInfoCallbackrospy.Subscriber(/person_info, Person, personInfoCallback) ​# 循环等待回调函数rospy.spin() ​ if __name__ __main__:person_subscriber() 注意给person_publisher.py 和 person_subscriber.py文件赋予作为程序文件执行的权限 点击person_publisher.py文件右键属性权限勾选允许作为程序文件执行 person_subscriber.py文件操作同上python文件不需要编译直接运行即可。 运行 roscore rosrun learning_topic person_subscriber.py rosrun learning_topic person_publisher.py 第一步打开ROS Master 第二步运行订阅者person_subscriber.py让其先等待着发布者发布消息数据 第三步运行发布者person_publisher.py让其发布消息数据
http://wiki.neutronadmin.com/news/317631/

相关文章:

  • 东莞建设工程质量网站网站包括哪些主要内容
  • 岳阳网站岳阳建站永久免费网站建设系统
  • 网站备案主体更换郑州友网站建设
  • 新人如何做自己的网站wordpress编写模板
  • 自适应型网站建设哪家好手机app编程工具
  • 自己怎样做网站盐城网站推广电话
  • 湖北省住房与城乡建设厅网站网站服务器到期为什么要网站备案
  • 男女做受网站装修公司哪家好又便宜
  • 关于公司做网站供比价报告浙江省建设厅官网
  • 建站论坛福建凭祥建设工程有限公司网站
  • phpcmsv9网站地图东莞 营销网站建设
  • phpwind 做企业网站长春建设信息网站
  • 如何做好集团网站建设青岛团购网站建设
  • 天水网站建设公司建立企业网站的形式有哪些
  • 百度收录排名好的网站网站弹出框怎么做
  • 湖北建设监理协会网站阅读网页设计
  • php做的网站模板wordpress韩影网主题
  • 网站不做icp备案南阳网站建设与管理
  • 做推文的网站的推荐wordpress网站速度时快时慢
  • html模板图片培训班线上优化
  • 松江做公司网站建网站平台哪家好
  • 做网站的主要任务百度网站安全检测平台
  • 郑州企业网站快速优化价格佛山新网站建设咨询
  • 有没有专门学做婴儿衣服的网站网站架构设计师有哪些学校可以报考
  • 沈阳网站排名seo网络服务器租赁费高吗
  • 企业网站建设背景图片识别 在线百度识图
  • 上海住远建设工程监理公司网站如何做网商商城的网站
  • 建站网站的图片怎么做类似淘宝的网站
  • 上海市杨浦区建设小学网站wordpress网页播放器
  • 销售网站页面特点企业网站的建设的目标人物是