文章目录
- 1. rosbag太大了,打不开
- 2.机器人的三维变换
- roslaunch的node强制关闭了,exit code -11
1. rosbag太大了,打不开
以LZ4格式压缩
rosbag compress --lz4 slam_2019-12-14-23-24-43_filter.bag
我不太清楚这种压缩的形式会不会对数据有影响,有多大的影响,也不知道要怎样的配置才可以能直接打开rosbag,反正至少这样做了能够在一秒左右就直接打开,而原来我两分钟还没有打开。
如果还是觉得太大,可以截取一段时间,
或者仅仅播放一段时间,具体操作见rosbag命令讲解中包过滤与包播放的内容。
2.机器人的三维变换
在“从零开始做无人驾驶定位”系列里,Tag3.0有这样一行代码:
odometry *= lidar_to_imu
a *= b 相当于 a = a *b,因此,上面代码等效于:
odometry = odometry * lidar_to_imu
显然,这里用的是右乘,但我们一般对点云进行变换的时候,都是变换矩阵左乘点的位姿。那么,如何理解呢?
三维矩阵旋转变换中,讲的挺清楚了。这里做个概括。
在矩阵中,有左行右列这个说法。
当我们在世界坐标系进行变换时,每行都要变,因此左乘。
当我们基于自身的旋转坐标系进行变换时,绕一个轴动的话,就变一列就可以了,所以右乘。
不过,我其实也不太理解这两者数学意义上的区别是什么,有空再研究吧。
而在这一例子中,照这个理解,就是kitti2bag在转换的时候的tf是根据旋转坐标系来的,因此需要右乘。
roslaunch的node强制关闭了,exit code -11
用roslaunch打开re0_demo的tag5.0的时候,node被杀死,报错信息如下:
hurricanezj@ZhaoJie-Alienware-17-R4:~/catkin_ws$ roslaunch lidar_localization front_end.launch
... logging to /home/hurricanezj/.ros/log/99c924c4-88fd-11ea-91e7-9cb6d0effb2d/roslaunch-ZhaoJie-Alienware-17-R4-25122.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.
started roslaunch server http://ZhaoJie-Alienware-17-R4:34547/
SUMMARY
========
PARAMETERS
* /rosdistro: kinetic
* /rosversion: 1.12.14
NODES
/
front_end_node (lidar_localization/front_end_node)
rviz (rviz/rviz)
ROS_MASTER_URI=http://localhost:11311
process[rviz-1]: started with pid [25139]
process[front_end_node-2]: started with pid [25140]
[front_end_node-2] process has died [pid 25140, exit code -11, cmd /home/hurricanezj/catkin_ws/devel/lib/lidar_localization/front_end_node __name:=front_end_node __log:=/home/hurricanezj/.ros/log/99c924c4-88fd-11ea-91e7-9cb6d0effb2d/front_end_node-2.log].
log file: /home/hurricanezj/.ros/log/99c924c4-88fd-11ea-91e7-9cb6d0effb2d/front_end_node-2*.log
国内博客没看到怎么解析这个错误的,后来Google一下,发现一个很厉害的技巧,可以用gdb查错。见用GDB诊断错误。
我做了如下操作:
gdb -arg /home/hurricanezj/catkin_ws/devel/lib/lidar_localization/front_end_node
进入gdb环境后,输入 r
,敲回车,输出为
(gdb) r
Starting program: /home/hurricanezj/catkin_ws/devel/lib/lidar_localization/front_end_node
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7fffa9c49700 (LWP 6350)]
[New Thread 0x7fffa9448700 (LWP 6351)]
[New Thread 0x7fffa8c47700 (LWP 6352)]
[New Thread 0x7fffa3fff700 (LWP 6357)]
[New Thread 0x7fffa37fe700 (LWP 6389)]
Thread 1 "front_end_node" received signal SIGSEGV, Segmentation fault.
__GI___libc_free (mem=0xe) at malloc.c:2951
2951 malloc.c: No such file or directory.
我查询了received signal SIGSEGV, Segmentation fault.
,找到了可能原因
也就是说,可能我的node对空指针进行操作了。
接下来,可能就是二分查错了。在找错这方面,尤其是别人的代码,我并不是很擅长,处理结果等解决了再回来补充。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)