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

太原手机网站建设做的网站一定要收录么

太原手机网站建设,做的网站一定要收录么,玉泉路做网站,信阳网站公司参考B站古月居ROS入门21讲#xff1a;tf坐标系广播与监听的编程实现 基于VMware Ubuntu 20.04 Noetic版本的环境 文章目录一、创建功能包二、创建代码2.1 以C为例2.1.1 配置代码编译规则2.1.2 编译整个工作空间2.1.2 配置环境变量2.1.4 执行代码2.2 以Python为例2.2.1 配置代码… 参考B站古月居ROS入门21讲tf坐标系广播与监听的编程实现 基于VMware Ubuntu 20.04 Noetic版本的环境 文章目录一、创建功能包二、创建代码2.1 以C为例2.1.1 配置代码编译规则2.1.2 编译整个工作空间2.1.2 配置环境变量2.1.4 执行代码2.2 以Python为例2.2.1 配置代码编译规则2.2.2 编译整个工作空间2.2.3 配置环境变量2.2.4 执行代码一、创建功能包 我们在src目录下创建learning_tf功能包 cd ~/catkin_ws/src catkin_create_pkg learning_tf roscpp rospy tf turtlesim二、创建代码 如何实现一个TF广播器 定义TF广播器TransformBroadcaster创建坐标变换值发布坐标变换sendTransform 如何实现一个TF监听器 定义TF监听器TransformListener查找坐标变换waitForTransform、lookupTransform 2.1 以C为例 turtle_tf_broadcaster.cpp和turtle_tf_listener.cpp拷贝进src目录下 turtle_tf_broadcaster.cpp代码为 /*********************************************************************** Copyright 2020 GuYueHome (www.guyuehome.com). ***********************************************************************//*** 该例程产生tf数据并计算、发布turtle2的速度指令*/#include ros/ros.h #include tf/transform_broadcaster.h #include turtlesim/Pose.hstd::string turtle_name;void poseCallback(const turtlesim::PoseConstPtr msg) {// 创建tf的广播器static tf::TransformBroadcaster br;// 初始化tf数据tf::Transform transform;transform.setOrigin( tf::Vector3(msg-x, msg-y, 0.0) );tf::Quaternion q;q.setRPY(0, 0, msg-theta);transform.setRotation(q);// 广播world与海龟坐标系之间的tf数据br.sendTransform(tf::StampedTransform(transform, ros::Time::now(), world, turtle_name)); }int main(int argc, char** argv) {// 初始化ROS节点ros::init(argc, argv, my_tf_broadcaster);// 输入参数作为海龟的名字if (argc ! 2){ROS_ERROR(need turtle name as argument); return -1;}turtle_name argv[1];// 订阅海龟的位姿话题ros::NodeHandle node;ros::Subscriber sub node.subscribe(turtle_name/pose, 10, poseCallback);// 循环等待回调函数ros::spin();return 0; };turtle_tf_listener.cpp代码为 /*********************************************************************** Copyright 2020 GuYueHome (www.guyuehome.com). ***********************************************************************//*** 该例程监听tf数据并计算、发布turtle2的速度指令*/#include ros/ros.h #include tf/transform_listener.h #include geometry_msgs/Twist.h #include turtlesim/Spawn.hint main(int argc, char** argv) {// 初始化ROS节点ros::init(argc, argv, my_tf_listener);// 创建节点句柄ros::NodeHandle node;// 请求产生turtle2ros::service::waitForService(/spawn);ros::ServiceClient add_turtle node.serviceClientturtlesim::Spawn(/spawn);turtlesim::Spawn srv;add_turtle.call(srv);// 创建发布turtle2速度控制指令的发布者ros::Publisher turtle_vel node.advertisegeometry_msgs::Twist(/turtle2/cmd_vel, 10);// 创建tf的监听器tf::TransformListener listener;ros::Rate rate(10.0);while (node.ok()){// 获取turtle1与turtle2坐标系之间的tf数据tf::StampedTransform transform;try{listener.waitForTransform(/turtle2, /turtle1, ros::Time(0), ros::Duration(3.0));listener.lookupTransform(/turtle2, /turtle1, ros::Time(0), transform);}catch (tf::TransformException ex) {ROS_ERROR(%s,ex.what());ros::Duration(1.0).sleep();continue;}// 根据turtle1与turtle2坐标系之间的位置关系发布turtle2的速度控制指令geometry_msgs::Twist vel_msg;vel_msg.angular.z 4.0 * atan2(transform.getOrigin().y(),transform.getOrigin().x());vel_msg.linear.x 0.5 * sqrt(pow(transform.getOrigin().x(), 2) pow(transform.getOrigin().y(), 2));turtle_vel.publish(vel_msg);rate.sleep();}return 0; };2.1.1 配置代码编译规则 将以下代码拷贝CMakeLists.txt进指定位置 add_executable(turtle_tf_broadcaster src/turtle_tf_broadcaster.cpp) target_link_libraries(turtle_tf_broadcaster ${catkin_LIBRARIES})add_executable(turtle_tf_listener src/turtle_tf_listener.cpp) target_link_libraries(turtle_tf_listener ${catkin_LIBRARIES})2.1.2 编译整个工作空间 cd ~/catkin_ws catkin_make2.1.2 配置环境变量 之前已经配置过。 2.1.4 执行代码 roscorerosrun turtlesim turtlesim_node我们下面直接在命令行传入参数。 第1个参数我们在turtle_tf_broadcaster.cpp定义节点时使用了my_tf_broadcaster的名字我们使用__name:传入新的名字取代my_tf_broadcaster这样避免名字重复因为ROS中节点名字不能重复这样就可以重复跑程序了。 第2个参数是turtle名称 turtle1 和 turtle2。 rosrun learning_tf turtle_tf_broadcaster __name:turtle1_tf_broadcaster /turtle1rosrun learning_tf turtle_tf_broadcaster __name:turtle2_tf_broadcaster /turtle2rosrun learning_tf turtle_tf_listener执行完后就会有一只小海龟生成并跑向中间的第1只小海龟。 我们可以用键盘控制小海龟同样可以让第2只小海龟追着我们跑。 2.2 以Python为例 将turtle_tf_broadcaster.py和turtle_tf_listener.py拷贝进scripts文件夹下(打开执行权限)。 turtle_tf_broadcaster.py代码为 #!/usr/bin/env python # -*- coding: utf-8 -*-######################################################################## #### Copyright 2020 GuYueHome (www.guyuehome.com). ### ######################################################################### 该例程将请求/show_person服务服务数据类型learning_service::Personimport roslib roslib.load_manifest(learning_tf) import rospyimport tf import turtlesim.msgdef handle_turtle_pose(msg, turtlename):br tf.TransformBroadcaster()br.sendTransform((msg.x, msg.y, 0),tf.transformations.quaternion_from_euler(0, 0, msg.theta),rospy.Time.now(),turtlename,world)if __name__ __main__:rospy.init_node(turtle_tf_broadcaster)turtlename rospy.get_param(~turtle)rospy.Subscriber(/%s/pose % turtlename,turtlesim.msg.Pose,handle_turtle_pose,turtlename)rospy.spin()turtle_tf_listener.py代码为 #!/usr/bin/env python # -*- coding: utf-8 -*-######################################################################## #### Copyright 2020 GuYueHome (www.guyuehome.com). ### ######################################################################### 该例程将请求/show_person服务服务数据类型learning_service::Personimport roslib roslib.load_manifest(learning_tf) import rospy import math import tf import geometry_msgs.msg import turtlesim.srvif __name__ __main__:rospy.init_node(turtle_tf_listener)listener tf.TransformListener()rospy.wait_for_service(spawn)spawner rospy.ServiceProxy(spawn, turtlesim.srv.Spawn)spawner(4, 2, 0, turtle2)turtle_vel rospy.Publisher(turtle2/cmd_vel, geometry_msgs.msg.Twist,queue_size1)rate rospy.Rate(10.0)while not rospy.is_shutdown():try:(trans,rot) listener.lookupTransform(/turtle2, /turtle1, rospy.Time(0))except (tf.LookupException, tf.ConnectivityException, tf.ExtrapolationException):continueangular 4 * math.atan2(trans[1], trans[0])linear 0.5 * math.sqrt(trans[0] ** 2 trans[1] ** 2)cmd geometry_msgs.msg.Twist()cmd.linear.x linearcmd.angular.z angularturtle_vel.publish(cmd)rate.sleep()2.2.1 配置代码编译规则 打开CMakeLists.txt配置编译规则 2.2.2 编译整个工作空间 cd ~/catkin_ws catkin_make2.2.3 配置环境变量 之前已经配置过。 2.2.4 执行代码 roscorerosrun turtlesim turtlesim_noderosrun learning_tf turtle_tf_broadcaster.py __name:turtle1_tf_broadcaster _turtle:turtle1rosrun learning_tf turtle_tf_broadcaster.py __name:turtle2_tf_broadcaster _turtle:turtle2rosrun learning_tf turtle_tf_listener.pyrosrun turtlesim turtle_teleop_key
http://www.w-s-a.com/news/844201/

相关文章:

  • 怎样开发设计网站建设博物馆网页设计案例
  • 山西建设厅网站查不了seo搜索引擎优化包邮
  • 临沂网站建设价格太原网站优化公司
  • 网页设计基础课程设计搜索引擎优化英文
  • 网站备案号怎么查楼书设计素材网站
  • 网站设计机构有哪些中国建设银行网站登录不上
  • 烟台理工学校网站罗湖建设网站
  • 卑鄙的网站开发公司郑州人才网站
  • 成都专业的网站设计公司文化建设的成就
  • 做书籍封皮的网站如何建网站教程视频
  • 唐山建站公司模板ipfs做网站
  • 贵阳做网站品牌网站模板
  • 紫网站建设我的个人博客
  • 优秀网站菜单网页上的视频怎么下载
  • 龙口建网站公司价格国内的平面设计网站
  • 电子商务网站建设与管理读后感上海市基础工程公司
  • 织梦免费企业网站做网站时,404网页如何指向
  • 摄影工作室网站源码百度为什么会k网站
  • 哪个网站有淘宝做图的素材网站分享做描点链接
  • 做哪个网站零售最好网站空间在哪里
  • 荆州网站建设多少钱南阳做网站推广
  • 网站代理打开个人网站设计源码
  • 做php网站的话要学什么语言wordpress搜索不到
  • 金华官方网站建设网络营销策划模板
  • 网站开发到上线在线生成小程序
  • 动易网站设计方案郑州营销网站建设
  • 怎么上网站做简易注销的步骤郑州大学现代远程教育《网页设计与网站建设》课程考核要求
  • 新乡网站建设新乡长沙本地论坛有哪些
  • 潍坊中企动力做的网站怎么样wordpress接入微博
  • 网站开发者所有权归属网站项目建设的必要性