赞
踩
对于 编译好的 msg 再进行修改 虽然 CMakeList不用动,但是不动编译会报错 简单动个地方 然后 再改回去 就可以了
注意: 想用 ros 定义的 变量时 需要包含其对于 头文件


包含其它功能包的头文件, 未改CMakeList,txt文件 然后报错

报错

hector_quadrotor_controllers/UAV_Attitude.h: No such file or directory
问题解决了
参考的这篇博客
以后可以把msg 等放单独的一个功能包
解决方式:
CMakeList.txt

package.xml

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

引入了这个头文件 就可以了
#include <tf2_geometry_msgs/tf2_geometry_msgs.h>
官方例程上 也有引入这个的
#include <tf2/LinearMath/Quaternion.h>
这个在这不适用 因为 用到了 tf2::toMsg( ); 这个函数 这个函数 应该根据 赋值 选择 转换的类型
因为 上面例子 是赋值的 geometry_msgs
所以
#include <tf2_geometry_msgs/tf2_geometry_msgs.h>
既可以 声明 四元数 也可以转化为 geometry_msgs
需要配置 CmakeList.txt
在ROS 中 功能包 中将类的函数定义 与 声明 分开 文件写 用main.cpp 调用 如何配置 CmakeList.txt
在实际操作 过程 中 遇到这样一个问题

WanderRobot_LaserScan_msg->ranges 是 雷达传感器发布的数据
其中ranges 的数据类型是 flaot32[ ]

想用 sizeof函数 求 其 所 占 内存 大小 这个是不对的!!!
sizeof(WanderRobot_LaserScan_msg->ranges) // 24
这个求一个元素的 内存 大小
sizeof(WanderRobot_LaserScan_msg->ranges[0]) //4
相除得到 元素得数量
结果 得到了 不对得 答案 元素里实际是360
原因就是 ROS 里面 msg 得 float32[ ] 不是 数组 不是 数组 不是 数组
是向量 是向量 是向量

sizeof()不 能用 于向量 可以 用于数组 ,所以第一个得到了错误得 答案
对于向量 求元素个数 直接 变量.size()就可以
WanderRobot_LaserScan_msg->ranges..size() // 向量元素个数
数组变量.size() 也可以 返回 数组 元素个数
今天 把自己蠢哭了
msg订阅得功能 写好了, 该topic 也更新了 , 但是 就是进入 不了 回调函数
rostopic info 。。 也能看到被订阅
结果 是 在 mian()函数里 没有加入 轮询函数 ros::spinOnce(); 或 ros::spin()
这种问题不报错 ,大意了 会 很难找 , 特此记录
基于ROS gmapping slam 建立地图时遇到的问题

/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}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。