当前位置:   article > 正文

ROS 遇到问题及解决——汇总

ROS 遇到问题及解决——汇总

编译好的 msg 再进行修改 报错

对于 编译好的 msg 再进行修改 虽然 CMakeList不用动,但是不动编译会报错 简单动个地方 然后 再改回去 就可以了

想用 ros 系统定义的 变量时 需要包含其 头文件

注意: 想用 ros 定义的 变量时 需要包含其对于 头文件
在这里插入图片描述
在这里插入图片描述

包含其它功能包头文件 需要添加CMakeList.txt

包含其它功能包的头文件, 未改CMakeList,txt文件 然后报错
在这里插入图片描述
报错
在这里插入图片描述
hector_quadrotor_controllers/UAV_Attitude.h: No such file or directory

问题解决了
参考的这篇博客
以后可以把msg 等放单独的一个功能包

解决方式:
CMakeList.txt
在这里插入图片描述
package.xml
在这里插入图片描述

定义msg时 不能能用double

定义msg 时 变量类型 需 注意

tf2类使用时要包含 的头文件

      tf2::Quaternion q;
      q.setRPY(0.0, 0.0, UavDesireYaw);
      UavDesirePose_.pose.orientation = tf2::toMsg(q);
  • 1
  • 2
  • 3

在这里插入图片描述
引入了这个头文件 就可以了

#include <tf2_geometry_msgs/tf2_geometry_msgs.h>
  • 1

官方例程上 也有引入这个的

 #include <tf2/LinearMath/Quaternion.h>
  • 1

这个在这不适用 因为 用到了 tf2::toMsg( ); 这个函数 这个函数 应该根据 赋值 选择 转换的类型
因为 上面例子 是赋值的 geometry_msgs
所以

#include <tf2_geometry_msgs/tf2_geometry_msgs.h>
  • 1

既可以 声明 四元数 也可以转化为 geometry_msgs

将类的函数定义 与 声明 分开 文件写 用main.cpp 调用

需要配置 CmakeList.txt

在ROS 中 功能包 中将类的函数定义 与 声明 分开 文件写 用main.cpp 调用 如何配置 CmakeList.txt

msg里float32[ ] 变量是 向量 类型 不是数组 ,求长度不能用sizeof(),直接 变量.size() 就行

在实际操作 过程 中 遇到这样一个问题

在这里插入图片描述
WanderRobot_LaserScan_msg->ranges 是 雷达传感器发布的数据
其中ranges 的数据类型是 flaot32[ ]
在这里插入图片描述
想用 sizeof函数 求 其 所 占 内存 大小 这个是不对的!!!

sizeof(WanderRobot_LaserScan_msg->ranges)    // 24
  • 1

这个求一个元素的 内存 大小

sizeof(WanderRobot_LaserScan_msg->ranges[0])  //4
  • 1

相除得到 元素得数量

结果 得到了 不对得 答案 元素里实际是360

原因就是 ROS 里面 msg 得 float32[ ] 不是 数组 不是 数组 不是 数组
是向量 是向量 是向量
在这里插入图片描述

sizeof()不 能用 于向量 可以 用于数组 ,所以第一个得到了错误得 答案

对于向量 求元素个数 直接 变量.size()就可以

WanderRobot_LaserScan_msg->ranges..size()    // 向量元素个数
  • 1

数组变量.size() 也可以 返回 数组 元素个数

写好msg 订阅功能 不进入 回调函数

今天 把自己蠢哭了
msg订阅得功能 写好了, 该topic 也更新了 , 但是 就是进入 不了 回调函数
rostopic info 。。 也能看到被订阅

结果 是 在 mian()函数里 没有加入 轮询函数 ros::spinOnce(); 或 ros::spin()

这种问题不报错 ,大意了 会 很难找 , 特此记录

基于ROS gmapping slam 建立地图时遇到的问题–/tf_static 里也有tf的信息

基于ROS gmapping slam 建立地图时遇到的问题

使用OPENCV时 遇到的问题

在这里插入图片描述

/home/jone/jone_ws/devel/lib/libWanderRobot_Class.so:对‘cv::waitKey(int)’未定义的引用
/home/jone/jone_ws/devel/lib/libWanderRobot_Class.so:对‘cv::namedWindow(cv::String const&, int)’未定义的引用
/home/jone/jone_ws/devel/lib/libWanderRobot_Class.so:对‘cv::imshow(cv::String const&, cv::_InputArray const&)’未定义的引用

在CMakeList.txt文件下
在这里插入图片描述
增加 库的链接
${OpenCV_LIBS}

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/51118
推荐阅读
相关标签
  

闽ICP备14008679号