~wecacuee/mrol/mrol-dev

« back to all changes in this revision

Viewing changes to todo.otl

  • Committer: Julian Ryde
  • Date: 2011-06-03 16:52:15 UTC
  • Revision ID: julian_ryde-20110603165215-oqr6yo9nwng3j9nb
Initial import from revision 206 of Julian Ryde's mrol_mapping repository.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
Ordered in approx priority, by delegation. 
 
2
 
 
3
Julian
 
4
        Improve execution speed
 
5
                : Many many possible ways of doing this, some ideas
 
6
                Cython
 
7
                        : General way of speeding up tight loops
 
8
                Multisets
 
9
                        : Look into multisets for occupiedvoxel lists, e.g. 
 
10
                        : collections.Counter in python 2.7?
 
11
                        : These multisets seem like the way to go as they provide intersection 
 
12
                        : and union operations.  Could start by trying some benchmark code 
 
13
                        : that runs under python2.7
 
14
                Bloom filter
 
15
                        : with counts to support deletions
 
16
                MinHash
 
17
                        http://en.wikipedia.org/wiki/MinHash
 
18
                        http://blogs.msdn.com/b/spt/archive/2008/06/10/set-similarity-and-min-hash.aspx
 
19
                Parrallel execution - e.g. for match, ray tracing etc.
 
20
                        speed increase is only linear in number of available cores (plus some overhead)
 
21
                        multiprocessing is now in python as standard
 
22
                Allow for pre-allocation of working memory region in calccollisions
 
23
                        : Have a output array cache, so if requests to occupiedlist are 
 
24
                        : made with input arrays the same shape you can just use the already 
 
25
                        : created output array?
 
26
                        :
 
27
                        : Better way might be to copy how numpy does things and have 
 
28
                        : calccolision take an option argument out, which is preallocated by 
 
29
                        : the user and populated. by the function.
 
30
                        :
 
31
                        : Usually the same number of points are repeatedly transformed, so 
 
32
                        : an array to hold the transformed points/voxel could be 
 
33
                        : preallocated and reused.  However might not know in advance the 
 
34
                        : poses to tested.
 
35
        Add cython compile to a compile/make script
 
36
        Accelerated nearest neighbour lookup
 
37
                : Good for doing icp without needing flann
 
38
                : Good for testing
 
39
                :
 
40
                : found how to bulk load keys and values into a python dictionary
 
41
                : d = {}
 
42
                : d.update(zip(K, V))
 
43
                : Only the last of multiple values in V with the same key (K) are
 
44
                : kept
 
45
Nick
 
46
        Get a good 3D data set with the kinect, including multi-level.
 
47
                : Data needs to be in IR sensor frame NOT RGB otherwise ray-traces remove the RH edge of discontinuities
 
48
        replace uniformposes with better implementation
 
49
                : e.g. from transformations.py in ROS?
 
50
                : Apparently ros have moved from using transformations.py to
 
51
                : https://github.com/matthew-brett/transforms3d/tree/master/transforms3d
 
52
                :
 
53
                : Probable problems with uniform poses. <- what are these?
 
54
                : Implement uniform random rotations based on quaternion conversion
 
55
        Get temporal decay mapping up and running
 
56
        pointcloud test
 
57
                : PointCloud should probably have a saveload test, make points, save 
 
58
                : them and load them back in and check equality.
 
59
                : Also directory loading
 
60
        Make sure all poses are being passed around as Pose3D objects rather than 6 element arrays
 
61
                : calccollisions should really take a pose
 
62
        Integrate the trajectory stuff via a map maintenance interface
 
63
                : Need a means to remove points when we realise they aren't correct.
 
64
                : To allow for external SLAM solutions also.
 
65
        move boxfilter to pointcloud class?
 
66
        Implement interprocess communication with memmapped arrays?
 
67
                : A = memmap('/tmp/test.bin', dtype=uint8, mode='w+', shape=(10,10))
 
68
                : Although Julian is not entirely sure this is the correct way to 
 
69
                : do it.
 
70
        
 
71
Both / Unallocated
 
72
        Decide on public API, PARAMOUNT
 
73
                : mapper.py
 
74
                : API should NOT be a window into the underlying classes, e.g. 
 
75
                : MROL/occupied list
 
76
                : The tests will only test the public API.  In order to make 
 
77
                : refactoring in the future easier the public API should be ruthlessly 
 
78
                : kept to a minimum.  Currently the public api is defined through 
 
79
                : mapper.py.
 
80
                : Internal white box unit tests are not advised, Julian will not maintain 
 
81
                : them and they will inevitable break when Julian refactors mercilessly.
 
82
                :
 
83
                : The public api will drive and focus development.
 
84
        Prodive users with option against which map update mechanism to use
 
85
                : This is useful for comparisons without having to switch revisions and 
 
86
                : apply patches to bugs. Also, the simple mechanism may be faster and 
 
87
                : useful where speed is of prime importance.
 
88
                        : Simple additive map update
 
89
                        : KDE based
 
90
                        : Others?
 
91
        Add from __future__ import division to every file
 
92
                : can still do integer division with //
 
93
        The return_removed flag for removepoints in occupied list is a bit hacky
 
94
                : Feel like the proper way of doing it would be to combine the point 
 
95
                : cloud, the map and the sensor model to generate the list maybe, not 
 
96
                : sure need to think about this.
 
97
        Thorough test for the global localiser
 
98
                : Take a map and scan, transform by random poses and check that it 
 
99
                : successfully aligns.
 
100
        Run pylint on commited code
 
101
                : Very long lines can be especially awkward and also are less 
 
102
                : readable.  Consider using assigment to improve readability.
 
103
        Use enumerate rather than range(len(...
 
104
        Copyright and licensing headers
 
105
                : before public hosting!
 
106
        Checkout scipy.spatial
 
107
                : classes such as scipy.spatial.KDTree etc.
 
108
        Organise project according
 
109
                http://infinitemonkeycorps.net/docs/pph/
 
110
        Fix/Add profiling script
 
111
                : profiling of mapper to guide optimization efforts
 
112
                : Also profiling test in align_segment_test.py
 
113
        speed test always fails on Nick's computers (k-d tree)
 
114
        refactor the tests into components that are clearer/better
 
115
        Relate the code to sparse ndimensional arrays
 
116
                : https://launchpad.net/ndsparse
 
117
        Improve performance
 
118
                : Possibly using cython, see http://wiki.cython.org/tutorials/numpy
 
119
        bug/issue tracker?
 
120
                : should we use a bug tracker? Julian thinks it is unnecessary to 
 
121
                : begin with, might be useful later though.
 
122
 
 
123
Never-ending
 
124
        Remove unused functions
 
125
                : Either write a script to search for def and look for calls or use 
 
126
                : code coverage analysis to see which parts of code are not executed 
 
127
                : by tests? 
 
128
                : Also ack-grep them. The code base isn't too big yet.
 
129
        TODOs in code
 
130
        Lint/style checking
 
131
                : remove unused imports, sfood-checker
 
132
                : Use a lint/style checker
 
133
                : pylint/pychecker output