【ROS学习】(十一)常见问题及解决方案
来源:互联网 发布:穿越火线m4a1千变数据 编辑:程序博客网 时间:2024/05/03 16:29
- 如何多次启动相同名称的节点
这个问题一般出现的场合有几种,需要用一份驱动程序打开多个相同的传感器,或者不同计算机通过协作,可能有节点和话题的名称产生冲突。
对于这种情况,ROS给出了很简便的解决方案,要做的只是采用launch文件启动节点,在launch文件中使用名字空间,将一个节点用两个同的节点名称来启动。例如我们有一个GPS传感器的驱动程序节点,节点名称为GPS_Driver,如果我们需要启动一个GPS传感器时,我们只需要写这样一个启动文件
<launch> <node ns="rtk" pkg="GPS_Driver" type="GPS_Driver" name="GPS_Driver"> <param name="port" value="/dev/ttyS0" /> </node> <node ns="garmin" pkg="GPS_Driver" type="GPS_Driver" name="GPS_Driver"> <param name="port" value="/dev/ttyS1" /> </node></launch>
这样,使用同一份驱动程序,通过配置两个不同的串口,就能够启动两个不同的GPS传感器。运行上面的launch文件,启动的两个GPS_Driver将被冠上’ns’指定的名字空间,使用命令rosnode list可以看到
rtk/GPS_Drivergarmin/GPS_Driver
需要注意的是,这样的方式启动节点后,该节点发布的话题也将被加上名字空间,因此可能会导致有的接收节点无法接收正确的话题消息,可以使用remap消息名称的方式来解决。例如,rtk gps原先的话题名字为/fix,加上名字空间变为/rtk/fix,有个名为“process_rtk_gps”的需要接收rtk gps的定位信息,但是该程序源代码中接收的话题为/fix,这时候我们不需重新修改和编译将该程序,只要在启动该文件时remap消息名称即可,例如
<launch> <node pkg="process_rtk_gps" type="process_rtk_gps" name="process_rtk_gps"> <remap from="rtk/fix" to="/fix"/> </node></launch>
- 更改msg文件后重新编译不起作用
这个问题一般在这两种情况下出现,一是直接从其他计算机上拷贝的程序包放在本地计算机上编译时,二是对于本地已经写好的程序修改了msg文件,不起作用的意思是原本正常使用的msg文件失效了,就算重新编译,源程序也无法正确使用新编译的msg文件,例如原先有个程序节点发布了自定义消息my_msg,后来更改了my_msg.msg里的内容,重新编译后,该节点发布的my_msg使用命令rostopic echo 就无法输出了。
这中情况的解决方案是,注释掉CMakeList.txt中生成可执行文件的部分,先编译msg文件,再将源程序编译成可执行文件。
- 【ROS学习】(十一)常见问题及解决方案
- ROS学习(十一):ROS URDF->model
- ROS常见问题及解决方法(更新ing)
- ROS的学习(十一)ROS的msg和srv
- ROS学习--(十一)创建ROS的信息和服务
- 机器学习总结(十一):深度学习算法(CNN,SAE,等)及常见问题总结
- ROS环境下机器人建模(XACRO)及常见问题解决
- ROS的学习(二十一)使用时间和TF
- ROS学习(二十一)--tf/增加一个框架frame
- html、css常见问题及解决方案(1)
- ionic开发常见问题及解决方案(二)
- ionic开发常见问题及解决方案(三)
- ionic开发常见问题及解决方案(四)
- ionic开发常见问题及解决方案(三)
- ionic开发常见问题及解决方案(四)
- IIS常见问题及解决方案
- 内存常见问题及解决方案
- Ubuntu 常见问题及解决方案
- 线程
- python里的re模块
- 浅谈依赖注入
- Android Handler的内部原理
- Java - Nuc - 郭姐散步 ( 矩阵快速幂 )
- 【ROS学习】(十一)常见问题及解决方案
- C++ 构造函数与析构函数
- Unity中有两种Animation Clip
- Hibernate4中hibernate.cfg.xml文件的配置
- MongoVUE已连接MongoDB,但是,用MongoVUE,看不到MongoDB数据库中的数据,日志报错: “Failed to authenticate root@dataPlantform
- JAVA中this用法小结
- 公车转瞬即逝
- Linux账号管理的相关命令
- opencv 基于sift的多张图片全景图拼接