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

深圳网站建设优化排名别人做的网站怎么打开吗

深圳网站建设优化排名,别人做的网站怎么打开吗,jsp怎么做购物网站,北京微信公众号网站建设文章目录 一、工作空间覆盖二、节点名称重名2.1 rosrun设置命名空间与重映射2.2 launch文件设置命名空间与重映射2.3 编码设置命名空间与重映射 三、话题名称设置3.1 rosrun设置话题重映射3.2 launch文件设置话题重映射3.3 编码设置话题名称 四、参数名称设置4.1 rosrun设置参数… 文章目录 一、工作空间覆盖二、节点名称重名2.1 rosrun设置命名空间与重映射2.2 launch文件设置命名空间与重映射2.3 编码设置命名空间与重映射 三、话题名称设置3.1 rosrun设置话题重映射3.2 launch文件设置话题重映射3.3 编码设置话题名称 四、参数名称设置4.1 rosrun设置参数4.2 launch文件设置参数4.3 编码设置参数 一、工作空间覆盖 所谓工作空间覆盖是指不同工作空间中存在重名的功能包的情形。 ROS 开发中会自定义工作空间且自定义工作空间可以同时存在多个可能会出现一种情况: 虽然特定工作空间内的功能包不能重名但是自定义工作空间的功能包与内置的功能包可以重名或者不同的自定义的工作空间中也可以出现重名的功能包那么调用该名称功能包时会调用哪一个呢比如自定义工作空间A存在功能包 turtlesim自定义工作空间B也存在功能包 turtlesim当然系统内置空间也存在turtlesim如果调用turtlesim包会调用哪个工作空间中的呢 实现 0.新建工作空间A与工作空间B两个工作空间中都创建功能包: turtlesim。 1.“CtrlH”显示隐藏文件在 ~/.bashrc 文件下追加当前工作空间的 bash 格式如下: source /home/用户/路径/工作空间A/devel/setup.bash source /home/用户/路径/工作空间B/devel/setup.bash上述操作的目的是可以在任意目录下使用工作空间A和B. 2.新开命令行:source .bashrc加载环境变量 3.查看ROS环境环境变量echo $ROS_PACKAGE_PATH 结果:自定义工作空间B:自定义空间A:系统内置空间 4.调用命令:roscd turtlesim会进入自定义工作空间B 原因 ROS 会解析 .bashrc 文件并生成 ROS_PACKAGE_PATH ROS包路径该变量中按照 .bashrc 中配置设置工作空间优先级在设置时需要遵循一定的原则:ROS_PACKAGE_PATH 中的值和 .bashrc 的配置顺序相反—后配置的优先级更高如果更改自定义空间A与自定义空间B的source顺序那么调用时将进入工作空间A。 结论 功能包重名时会按照 ROS_PACKAGE_PATH 查找配置在前的会优先执行。 隐患 存在安全隐患比如当前工作空间B优先级更高意味着当程序调用 turtlesim 时不会调用工作空间A也不会调用系统内置的 turtlesim如果工作空间A在实现时有其他功能包依赖于自身的 turtlesim而按照ROS工作空间覆盖的涉及原则那么实际执行时将会调用工作空间B的turtlesim从而导致执行异常出现安全隐患。 BUG 说明: 当在 .bashrc 文件中 source 多个工作空间后可能出现的情况在 ROS PACKAGE PATH 中只包含两个工作空间可以删除自定义工作空间的 build 与 devel 目录重新 catkin_make然后重新载入 .bashrc 文件问题解决。 1.在test01_ws和test02_ws下创建turtlesim功能包时使用catkin_make编译一个功能包第一次编译由于编译的cpp文件命名与camkefile中的不一致所以编译失败了。修改相应的名字之后再次编译还是失败。显示如下报错 make[2]:没有规则可制作目标 这个错误是由于上次编译失败导致编译环境部分缺失。 解决办法是在工作空间的build文件夹找到相应的pkg包然后删掉重新编译。 2.发现rosrun无法自动补齐 解决方法 运行下面这条命令 sudo apt install ros-melodic-rosbash运行结束后重启即可自动补齐 二、节点名称重名 场景:ROS中创建的节点是有名称的C初始化节点时通过API:ros::init(argc,argv,xxxx);来定义节点名称在Python中初始化节点则通过 rospy.init_node(yyyy) 来定义节点名称。在ROS的网络拓扑中是不可以出现重名的节点的因为假设可以重名存在那么调用时会产生混淆这也就意味着不可以启动重名节点或者同一个节点启动多次的确在ROS中如果启动重名节点的话之前已经存在的节点会被直接关闭但是如果有这种需求的话怎么优化呢 在ROS中给出的解决策略是使用命名空间或名称重映射。 命名空间就是为名称添加前缀名称重映射是为名称起别名。这两种策略都可以解决节点重名问题两种策略的实现途径有多种: rosrun 命令launch 文件编码实现 以上三种途径都可以通过命名空间或名称重映射的方式来避免节点重名。 启动两个 turtlesim_node 节点当然如果直接打开两个终端直接启动那么第一次启动的节点会关闭并给出提示: [ WARN] [1578812836.351049332]: Shutdown request received. [ WARN] [1578812836.351207362]: Reason given for shutdown: [new node registered with same name]2.1 rosrun设置命名空间与重映射 1.rosrun设置命名空间 语法: rosrun 包名 节点名 __ns:新名称 rosrun turtlesim turtlesim_node __ns:/xxxrosrun turtlesim turtlesim_node __ns:/yyy两个节点都可以正常运行 rosnode list查看节点信息,显示结果: /xxx/turtlesim /yyy/turtlesim2.rosrun名称重映射 语法: rosrun 包名 节点名 __name:新名称 rosrun turtlesim turtlesim_node __name:t1 | rosrun turtlesim turtlesim_node /turtlesim:t1(不适用于python)rosrun turtlesim turtlesim_node __name:t2 | rosrun turtlesim turtlesim_node /turtlesim:t2(不适用于python)两个节点都可以运行 rosnode list查看节点信息,显示结果: /t1 /t23.rosrun命名空间与名称重映射叠加 语法: rosrun 包名 节点名 __ns:新名称 __name:新名称 rosrun turtlesim turtlesim_node __ns:/xxx __name:tnrosnode list查看节点信息,显示结果: /xxx/tn使用环境变量也可以设置命名空间,启动节点前在终端键入如下命令: export ROS_NAMESPACExxxx 2.2 launch文件设置命名空间与重映射 launch 文件的 node 标签中有两个属性: name 和 ns二者分别是用于实现名称重映射与命名空间设置的。使用launch文件设置命名空间与名称重映射也比较简单。 1.launch文件 launchnode pkgturtlesim typeturtlesim_node namet1 /node pkgturtlesim typeturtlesim_node namet2 /node pkgturtlesim typeturtlesim_node namet1 nshello//launch在 node 标签中name 属性是必须的ns 可选。 2.运行 rosnode list查看节点信息,显示结果: /t1 /t2 /t1/hello2.3 编码设置命名空间与重映射 1.C 实现:重映射 核心代码ros::init(argc,argv,zhangsan,ros::init_options::AnonymousName); 会在名称后面添加时间戳。 2.C 实现:命名空间 核心代码 std::mapstd::string, std::string map;map[__ns] xxxx;ros::init(map,wangqiang);节点名称设置了命名空间。 3.Python 实现:重映射 核心代码:rospy.init_node(lisi,anonymousTrue) 会在节点名称后缀时间戳。 三、话题名称设置 在ROS中节点名称可能出现重名的情况同理话题名称也可能重名。 在 ROS 中节点终端不同的节点之间通信都依赖于话题话题名称也可能出现重复的情况这种情况下系统虽然不会抛出异常但是可能导致订阅的消息非预期的从而导致节点运行异常。这种情况下需要将两个节点的话题名称由相同修改为不同。 又或者两个节点是可以通信的两个节点之间使用了相同的消息类型但是由于话题名称不同导致通信失败。这种情况下需要将两个节点的话题名称由不同修改为相同。 在实际应用中按照逻辑有些时候可能需要将相同的话题名称设置为不同也有可能将不同的话题名设置为相同。在ROS中给出的解决策略与节点名称重命类似也是使用名称重映射或为名称添加前缀。根据前缀不同有全局、相对、和私有三种类型之分。 全局(参数名称直接参考ROS系统与节点命名空间平级)相对(参数名称参考的是节点的命名空间与节点名称平级)私有(参数名称参考节点名称是节点名称的子级) 名称重映射是为名称起别名为名称添加前缀该实现比节点重名更复杂些不单是使用命名空间作为前缀、还可以使用节点名称最为前缀。两种策略的实现途径有多种: rosrun 命令launch 文件编码实现 案例 在ROS中提供了一个比较好用的键盘控制功能包: ros-noetic-teleop-twist-keyboard该功能包可以控制机器人的运动作用类似于乌龟的键盘控制节点可以使用 sudo apt install ros-noetic-teleop-twist-keyboard 来安装该功能包然后执行: rosrun teleop_twist_keyboard teleop_twist_keyboard.py在启动乌龟显示节点不过此时前者不能控制乌龟运动因为二者使用的话题名称不同前者使用的是 cmd_vel话题后者使用的是 /turtle1/cmd_vel话题。需要将话题名称修改为一致才能使用如何实现 3.1 rosrun设置话题重映射 rosrun名称重映射语法: rorun 包名 节点名 话题名:新话题名称实现teleop_twist_keyboard与乌龟显示节点通信方案有两种 1.方案1 将 teleop_twist_keyboard 节点的话题设置为/turtle1/cmd_vel 启动键盘控制节点:rosrun teleop_twist_keyboard teleop_twist_keyboard.py /cmd_vel:/turtle1/cmd_vel 启动乌龟显示节点: rosrun turtlesim turtlesim_node 二者可以实现正常通信 2.方案2 将乌龟显示节点的话题设置为 /cmd_vel 启动键盘控制节点:rosrun teleop_twist_keyboard teleop_twist_keyboard.py 启动乌龟显示节点: rosrun turtlesim turtlesim_node /turtle1/cmd_vel:/cmd_vel 二者可以实现正常通信 3.2 launch文件设置话题重映射 launch 文件设置话题重映射语法: node pkgxxx typexxx namexxxremap from原话题 to新话题 / /node实现teleop_twist_keyboard与乌龟显示节点通信方案有两种 1.方案1 将 teleop_twist_keyboard 节点的话题设置为/turtle1/cmd_vel launchnode pkgturtlesim typeturtlesim_node namet1 /node pkgteleop_twist_keyboard typeteleop_twist_keyboard.py namekeyremap from/cmd_vel to/turtle1/cmd_vel //node/launch二者可以实现正常通信 2.方案2 将乌龟显示节点的话题设置为 /cmd_vel launchnode pkgturtlesim typeturtlesim_node namet1remap from/turtle1/cmd_vel to/cmd_vel //nodenode pkgteleop_twist_keyboard typeteleop_twist_keyboard.py namekey //launch二者可以实现正常通信 3.3 编码设置话题名称 1.C 实现 1.初始化节点设置一个节点名称 ros::init(argc,argv,hello)2.设置不同类型的话题 3.启动节点时传递一个 __ns: xxx 4.节点启动后使用 rostopic 查看话题信息 1.1全局名称 格式:以/开头的名称和节点名称无关 比如:/xxx/yyy/zzz 示例1:ros::Publisher pub nh.advertisestd_msgs::String(“/chatter”,1000); 结果1:/chatter 示例2:ros::Publisher pub nh.advertisestd_msgs::String(“/chatter/money”,1000); 结果2:/chatter/money 1.2相对名称 格式:非/开头的名称,参考命名空间(与节点名称平级)来确定话题名称 示例1:ros::Publisher pub nh.advertisestd_msgs::String(“chatter”,1000); 结果1:xxx/chatter 示例2:ros::Publisher pub nh.advertisestd_msgs::String(“chatter/money”,1000); 结果2:xxx/chatter/money 1.3私有名称 格式:以~开头的名称 示例1: ros::NodeHandle nh(~); ros::Publisher pub nh.advertisestd_msgs::String(chatter,1000);结果1:/xxx/hello/chatter 示例2: ros::NodeHandle nh(~); ros::Publisher pub nh.advertisestd_msgs::String(chatter/money,1000);结果2:/xxx/hello/chatter/money PS:当使用~,而话题名称有时/开头时那么话题名称是绝对的 示例3: ros::NodeHandle nh(~); ros::Publisher pub nh.advertisestd_msgs::String(/chatter/money,1000);结果3:/chatter/money 2.Python 实现 1.初始化节点设置一个节点名称 rospy.init_node(hello)2.设置不同类型的话题 3.启动节点时传递一个 __ns: xxx 4.节点启动后使用 rostopic 查看话题信息 2.1全局名称 格式:以/开头的名称和节点名称无关 示例1:pub rospy.Publisher(/chatter,String,queue_size1000) 结果1:/chatter 示例2:pub rospy.Publisher(/chatter/money,String,queue_size1000) 结果2:/chatter/money 2.2相对名称 格式:非/开头的名称,参考命名空间(与节点名称平级)来确定话题名称 示例1:pub rospy.Publisher(chatter,String,queue_size1000) 结果1:xxx/chatter 示例2:pub rospy.Publisher(chatter/money,String,queue_size1000) 结果2:xxx/chatter/money 2.3私有名称 格式:以~开头的名称 示例1:pub rospy.Publisher(~chatter,String,queue_size1000) 结果1:/xxx/hello/chatter 示例2:pub rospy.Publisher(~chatter/money,String,queue_size1000) 结果2:/xxx/hello/chatter/money 四、参数名称设置 关于参数重名的处理没有重映射实现为了尽量的避免参数重名都是使用为参数名添加前缀的方式实现类似于话题名称有全局、相对、和私有三种类型之分。 全局(参数名称直接参考ROS系统与节点命名空间平级)相对(参数名称参考的是节点的命名空间与节点名称平级)私有(参数名称参考节点名称是节点名称的子级) 设置参数的方式也有三种: rosrun 命令launch 文件编码实现 4.1 rosrun设置参数 rosrun 在启动节点时也可以设置参数: 语法: rosrun 包名 节点名称 _参数名:参数值 1.设置参数 启动乌龟显示节点并设置参数 A 100 rosrun turtlesim turtlesim_node _A:1002.运行 rosparam list查看节点信息,显示结果: /turtlesim/A /turtlesim/background_b /turtlesim/background_g /turtlesim/background_r结果显示参数A前缀节点名称也就是说rosrun执行设置参数参数名使用的是私有模式 4.2 launch文件设置参数 1.设置参数 以 param 标签为例设置参数 launchparam namep1 value100 /node pkgturtlesim typeturtlesim_node namet1param namep2 value100 //node/launch2.运行 rosparam list查看节点信息,显示结果: /p1 /t1/p14.3 编码设置参数 1.C实现 在 C 中可以使用 ros::param 或者 ros::NodeHandle 来设置参数。 1.1ros::param设置参数 设置参数调用API是ros::param::set该函数中参数1传入参数名称参数2是传入参数值参数1中参数名称设置时如果以 / 开头那么就是全局参数如果以 ~ 开头那么就是私有参数既不以 / 也不以 ~ 开头那么就是相对参数。代码示例: ros::param::set(/set_A,100); //全局,和命名空间以及节点名称无关 ros::param::set(set_B,100); //相对,参考命名空间 ros::param::set(~set_C,100); //私有,参考命名空间与节点名称运行时假设设置的 namespace 为 xxx节点名称为 yyy使用 rosparam list 查看: /set_A /xxx/set_B /xxx/yyy/set_C1.2ros::NodeHandle设置参数 设置参数时首先需要创建 NodeHandle 对象然后调用该对象的 setParam 函数该函数参数1为参数名参数2为要设置的参数值如果参数名以 / 开头那么就是全局参数如果参数名不以 / 开头那么该参数是相对参数还是私有参数与NodeHandle 对象有关如果NodeHandle 对象创建时如果是调用的默认的无参构造那么该参数是相对参数如果NodeHandle 对象创建时是使用: ros::NodeHandle nh(“~”)那么该参数就是私有参数。代码示例: ros::NodeHandle nh; nh.setParam(/nh_A,100); //全局,和命名空间以及节点名称无关nh.setParam(nh_B,100); //相对,参考命名空间ros::NodeHandle nh_private(~); nh_private.setParam(nh_C,100);//私有,参考命名空间与节点名称运行时假设设置的 namespace 为 xxx节点名称为 yyy使用 rosparam list 查看: /nh_A /xxx/nh_B /xxx/yyy/nh_C2.python实现 python 中关于参数设置的语法实现比 C 简洁一些调用的API时 rospy.set_param该函数中参数1传入参数名称参数2是传入参数值参数1中参数名称设置时如果以 / 开头那么就是全局参数如果以 ~ 开头那么就是私有参数既不以 / 也不以 ~ 开头那么就是相对参数。代码示例: rospy.set_param(/py_A,100) #全局,和命名空间以及节点名称无关 rospy.set_param(py_B,100) #相对,参考命名空间 rospy.set_param(~py_C,100) #私有,参考命名空间与节点名称运行时假设设置的 namespace 为 xxx节点名称为 yyy使用 rosparam list 查看: /py_A /xxx/py_B /xxx/yyy/py_C参考 [1]Autolabor-ROS机器人入门课程《ROS理论与实践》季基础教程 [2]【Autolabor初级教程】ROS机器人入门 [3]胡春旭.ROS机器人开发实践[M].机械工业出版社,2018.
http://www.huolong8.cn/news/154345/

相关文章:

  • 徐州模板建站定制网站要制作自己的网站需要什么
  • 免费招聘的网站wordpress管理配色
  • 广州营销推广网站信誉好的东莞网站推广
  • 设计网站页面的工作叫啥广州网站建设高端网
  • 长沙做网站推广公司咨询定制开发网站
  • sql做网站后台济南做网站的机构有哪些
  • 小米商城网站设计论文做网站只用前端知识可以吗
  • 深圳市建设培训中心网站重庆seo和网络推广
  • 深圳网站建设哪家好怎么在自己电脑上搭建网站
  • 鹤岗建设局网站网站建设的预算费用
  • 公司怎样做网站做网站编辑工作累吗
  • 网站百度收录快网络推广策划案例
  • 如何用华为云服务器做网站餐厅网站设计
  • 亚马逊网站开发什么网站做h5做得好
  • 一个空间多个网站中国芯片三巨头
  • 公司网站平台的作用家具建设网站
  • 免费的网站源码去哪下载黑客收徒网站建设
  • 长沙找人做企业网站文案电脑路由器做网站服务器吗
  • html免费网站模板设计方案审核合格后由谁签字确认
  • 85度c蛋糕房网站系统建设e福州是哪个公司开发
  • 晋江建设银行招聘网站上海人才网站首页
  • 张家口网站建设工作室专注wordpress主题
  • 网站建设与维护试卷 一汽车类网站设计规划
  • 网站集约化建设力度网址安全中心检测
  • 上的网站app域名空间多少钱
  • 企业网站开发信息开发小程序哪家好
  • 江门恒阳网站建设吉安网站推广徽hyhyk1
  • 网站的软文 怎么做推广方案wordpress+登录+api接口
  • 自己能否建立公司网站男女直接做的视频网站
  • 村志网站建设nginx 网站建设