提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
Table of Contents
1.把world文件复制到主目录下的.gazebo文件夹,用ctrl+h可以显示隐藏文件。然后gazebo *.world就行了。有时一些模型加载不出来,也是因为这个原因。
二、libdiffdrive_plugin_multi_wheel.so无法在gazebo中加载
三、‘OrbFeatureDetector’ was not declared in this scope
四、ROS中Invalid tag: Cannot load command parameter解决方案
六、两个关于gazebo的详细教程, 可以对urdf,gazebo获得更好的理解
前言
解决最近几天遇到的问题,主要是在gazebo仿真方面的问题。
一、gazebo加载出world文件
假如我有一些.world文件,有两种方式显示出来。
1.把world文件复制到主目录下的.gazebo文件夹,用ctrl+h可以显示隐藏文件。然后gazebo *.world就行了。有时一些模型加载不出来,也是因为这个原因。
2.写一个launch文件,用roslaunch启动。
二、libdiffdrive_plugin_multi_wheel.so无法在gazebo中加载
这个是因为没把这个库编译进去,可以从别的地方复制过来,放到devel/lib下,或者把源码copy过来,放在src下,编译一下。
三、‘OrbFeatureDetector’ was not declared in this scope
这个找到的方法说是添加两个头文件,
#include <opencv2/nonfree/features2d.hpp>
#include <opencv2/nonfree/nonfree.hpp>
但是加上之后又显示opencv-opencv2/nonfree/nonfree.hpp:没有那个文件或目录,这时候按照方法安装
sudo apt-get update
sudo add-apt-repository --yes ppa:xqms/opencv-nonfree
sudo apt-get update
sudo apt-get install libopencv-nonfree-dev
但是又会报错,
sudo apt-get install libopencv-nonfree-dev
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是
因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件
包尚未被创建或是它们已被从新到(Incoming)目录移出。
下列信息可能会对解决问题有所帮助:
下列软件包有未满足的依赖关系:
libopencv-nonfree-dev : 依赖: libopencv-features2d-dev (= 2.4.9.1+dfsg-1.5ubuntu1xqms2~xenial1) 但是 2.4.9.1+dfsg-1.5ubuntu1.1 正要被安装
依赖: libopencv-nonfree2.4v5 (= 2.4.9.1+dfsg-1.5ubuntu1xqms2~xenial1) 但是它将不会被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
解决办法:下载依赖检查的功能强大的包管理工具 aptitude!
sudo apt-get install aptitude
sudo aptitude install libopencv-nonfree-dev
这个办法是在Ubuntu上对缺少依赖的一种万能解法!
参考:https://www.freesion.com/article/4114661018/
四、
ROS中Invalid <param> tag: Cannot load command parameter解决方案
这里一般是这一行写错了,尤其--inorder的空格。
五、launch文件解析
- launch文件的重点是:节点(node)元素的集合。
- roslaunch 则是让所有的节点共享同一个终端。
1.标签(元素)说明
-
1. group标签
-
2. node标签
<group ns="turtlesim1"> //两个节点分组并以’命名空间(namespace)’标签来区分
<node pkg="turtlesim" name="sim" type="turtlesim_node"/> //pkg 和 type 它们分别是:程序包名字和可执行文件的名字;ros::init()函数提供的 name 信息将会全面的覆盖命名信息(launch文件中node标签里面的name 属性)
</group>
<group ns="turtlesim2">
<node pkg="turtlesim" name="sim" type="turtlesim_node"/>
</group>
ros::init(argc,argv,"my_node_name"); 或者 ros::init(argc,argv,"my_node_name",ros::init_options::AnonymousName);
output = “screen” :将标准输出信息显示在终端(console)上
respawn=”true” :监测每一个启动完成的节点,当它终止时,我们可以要求 roslaunch 重新启动它.
required=”true” :当一个必需的节点终止时,roslaunch会做出响应,终止其他所有的节点并退出它自己。 (不要同时设置required 属性和 respawn 属性)
launch-prefix = “command-prefix” :依赖终端输入的节点,比如 turtle_teleop_key 节点,它可能要优先的保留在独立的终端上:launch-prefix=”xterm -e”(xterm 命令会开一个新的终端窗口。 -e 参数告诉 xterm :执行其命令行剩余部分(rosrun turtlesim turtle_teleop_key))ns = “namespace” :turtlesim 话题名字(turtle1/cmd_vel、turtle1/color_sensor 和 turtle1/pose )被从全局命名空间移动 到 /sim1 和 /sim2 的单独命名空间里。args:传递参数到节参考点. 个人理解,arg参数只在launch文件中合法(相当于局部变量),不直接传给节点,所以需 要通过node中的args属性进行传递.
rosmap
include
参考:https://www.cnblogs.com/yrm1160029237/p/10108161.html
六、两个关于gazebo的详细教程, 可以对urdf,gazebo获得更好的理解
https://zhuanlan.zhihu.com/p/90489579
https://www.jianshu.com/p/4d8b8327eb9b
七、#if
这是C++种的条件编译bai预处理命令
有两du种格式:
1:#ifdef 标示符
程序段zhi1
#else
程序段2
#endif
表示:如果标示符已经被#define命令定义过,则编dao译程序段1,否则编译程序段2
2:#if 表达式
程序段1
#else
程序段2
#endif
表示:如果表达式为真,则编译程序段1,否则编译程序段2.
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。