<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://gicl.cs.drexel.edu/wiki-data/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://gicl.cs.drexel.edu/wiki-data/api.php?action=feedcontributions&amp;user=Aeh84&amp;feedformat=atom</id>
		<title>GICLWiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://gicl.cs.drexel.edu/wiki-data/api.php?action=feedcontributions&amp;user=Aeh84&amp;feedformat=atom"/>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Special:Contributions/Aeh84"/>
		<updated>2013-05-20T02:49:05Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.18.2</generator>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-06-15T20:16:36Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: /* Do something new */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Registering pointclouds in ROS with PCL for [[Robot_Lab_(Spring_2012)]] =&lt;br /&gt;
Paths followed, lessons learned, code shared, next steps.&lt;br /&gt;
&lt;br /&gt;
== Find some data ==&lt;br /&gt;
The data I used is dataset 14 at http://kos.informatik.uni-osnabrueck.de/3Dscans/&lt;br /&gt;
&lt;br /&gt;
My python script, publish_from_file.py, can be easily adjusted to read any similar format, wherein each line gives the coordinates for a point.  [http://en.wikipedia.org/wiki/PLY_(file_format) PLY] is another option; PLY pointclouds can be loaded and viewed in [http://meshlab.sourceforge.net/ Meshlab].&lt;br /&gt;
&lt;br /&gt;
I didn't write any code to read pcl files, but this is the format that the [http://pointclouds.org pointcloud library] reads and writes, so if you found some pcl data and like c++ that would also work.&lt;br /&gt;
&lt;br /&gt;
Ideally, it would be best to take your own data, then you know everything about it.  It turns out the better you know the data (how far did the robot move between images? what unit does your scanner use for measurements -- meters? pixels?) the better off you will be in fine-tuning the registration algorithms.&lt;br /&gt;
&lt;br /&gt;
== Learn about registration ==&lt;br /&gt;
The pcl site has a lot of information.  I would recommend reading the introductory material on a number of pcl modules, including registration, keypoint estimation, features, and correspondence.  There are a number of ways to do this and it would be helpful to get a sense of some of them before starting on one.&lt;br /&gt;
&lt;br /&gt;
== Try my scripts ==&lt;br /&gt;
Download a tgz of my scripts: [[File:Registration_code.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
=== pose_registration.py ===&lt;br /&gt;
Uses the pose data from the data set to transform each point cloud into a global frame of reference.  Writes PLY files.&lt;br /&gt;
&lt;br /&gt;
Referenced http://www.euclideanspace.com/maths/geometry/space/coordinates/index.htm&lt;br /&gt;
&lt;br /&gt;
To run:&lt;br /&gt;
 # first set the global variables for file locations&lt;br /&gt;
 $ ./pose_registration.py&lt;br /&gt;
&lt;br /&gt;
=== pointclouds_ah/publish_from_file.py ===&lt;br /&gt;
Reads a pointcloud from a PLY or .3d file, in which each line gives the coordinates a point.  Publishes each pointcloud as a message to the a ROS topic.&lt;br /&gt;
&lt;br /&gt;
To run:&lt;br /&gt;
 # first set the global variables for file locations&lt;br /&gt;
 $ rosrun pointclouds_ah public_from_file.py&lt;br /&gt;
&lt;br /&gt;
=== register_pointclouds/registration.cpp ===&lt;br /&gt;
Reads a pointcloud off the ROS bus (the topic name is set to the same one public_from_file.py writes to).  Runs Iterative Closest Point on each pair of pointclouds.&lt;br /&gt;
&lt;br /&gt;
To run:&lt;br /&gt;
 $ rosmake register_pointclouds&lt;br /&gt;
 $ rosrun register_pointclouds register&lt;br /&gt;
&lt;br /&gt;
== View results ==&lt;br /&gt;
The results never came out perfectly, but they do nicely show the effects of different types of translation on the data / stages in the process.&lt;br /&gt;
&lt;br /&gt;
Running the original data set through pointcloud registration only:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationOriginal.png|500px]] &lt;br /&gt;
&lt;br /&gt;
Pointclouds registered by translating them according to odometry data:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationOdometry.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Running the data set through odometry translation and then pointcloud registration:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationPrecomputed.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Illustration accompanying the data set I used:&lt;br /&gt;
[[File:RegistrationEt4.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Do something new ==&lt;br /&gt;
Things I would do if I were to keep working on this project.&lt;br /&gt;
* Working odometry into the registration process appears to be key.  It would be nice to figure out the best way to do it.&lt;br /&gt;
** A new version of pcl should be coming out any day now as I finish this quarter.  A new registration algorithm will take odometry data with each pointcloud; it's called Normal Distributions Transform.  That would be worth trying out.&lt;br /&gt;
** I don't know whether / how it's possible to send odometry and pointclouds over the ROS bus and correlate them on the other side.  Do they need to be combined into a single message?  Can the callbacks on the two topics be tied together somehow?  It would be easier to start by skipping the ROS bus altogether and just reading in the pointcloud and omdometry data from file.&lt;br /&gt;
** Further research on Euler angles and rotations in 3d space would probably be useful.  There may be mathematical errors in the script I wrote to do this.&lt;br /&gt;
* Cleaning noise from the data could be helpful.  I believe the circular artifacts in my images come from noise in the pointclouds.  Without them, registration could be more accurate.&lt;br /&gt;
* Experiment more with max correspondence and epsilon parameters to registration algorithms.  These are highly dependent on the data set you use, and it seems they need to be discovered via trial-and-error, and then re-discovered if you use a different data set.&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-06-15T20:14:55Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: /* Registering pointclouds in ROS with PCL for Robot_Lab_(Spring_2012) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Registering pointclouds in ROS with PCL for [[Robot_Lab_(Spring_2012)]] =&lt;br /&gt;
Paths followed, lessons learned, code shared, next steps.&lt;br /&gt;
&lt;br /&gt;
== Find some data ==&lt;br /&gt;
The data I used is dataset 14 at http://kos.informatik.uni-osnabrueck.de/3Dscans/&lt;br /&gt;
&lt;br /&gt;
My python script, publish_from_file.py, can be easily adjusted to read any similar format, wherein each line gives the coordinates for a point.  [http://en.wikipedia.org/wiki/PLY_(file_format) PLY] is another option; PLY pointclouds can be loaded and viewed in [http://meshlab.sourceforge.net/ Meshlab].&lt;br /&gt;
&lt;br /&gt;
I didn't write any code to read pcl files, but this is the format that the [http://pointclouds.org pointcloud library] reads and writes, so if you found some pcl data and like c++ that would also work.&lt;br /&gt;
&lt;br /&gt;
Ideally, it would be best to take your own data, then you know everything about it.  It turns out the better you know the data (how far did the robot move between images? what unit does your scanner use for measurements -- meters? pixels?) the better off you will be in fine-tuning the registration algorithms.&lt;br /&gt;
&lt;br /&gt;
== Learn about registration ==&lt;br /&gt;
The pcl site has a lot of information.  I would recommend reading the introductory material on a number of pcl modules, including registration, keypoint estimation, features, and correspondence.  There are a number of ways to do this and it would be helpful to get a sense of some of them before starting on one.&lt;br /&gt;
&lt;br /&gt;
== Try my scripts ==&lt;br /&gt;
Download a tgz of my scripts: [[File:Registration_code.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
=== pose_registration.py ===&lt;br /&gt;
Uses the pose data from the data set to transform each point cloud into a global frame of reference.  Writes PLY files.&lt;br /&gt;
&lt;br /&gt;
Referenced http://www.euclideanspace.com/maths/geometry/space/coordinates/index.htm&lt;br /&gt;
&lt;br /&gt;
To run:&lt;br /&gt;
 # first set the global variables for file locations&lt;br /&gt;
 $ ./pose_registration.py&lt;br /&gt;
&lt;br /&gt;
=== pointclouds_ah/publish_from_file.py ===&lt;br /&gt;
Reads a pointcloud from a PLY or .3d file, in which each line gives the coordinates a point.  Publishes each pointcloud as a message to the a ROS topic.&lt;br /&gt;
&lt;br /&gt;
To run:&lt;br /&gt;
 # first set the global variables for file locations&lt;br /&gt;
 $ rosrun pointclouds_ah public_from_file.py&lt;br /&gt;
&lt;br /&gt;
=== register_pointclouds/registration.cpp ===&lt;br /&gt;
Reads a pointcloud off the ROS bus (the topic name is set to the same one public_from_file.py writes to).  Runs Iterative Closest Point on each pair of pointclouds.&lt;br /&gt;
&lt;br /&gt;
To run:&lt;br /&gt;
 $ rosmake register_pointclouds&lt;br /&gt;
 $ rosrun register_pointclouds register&lt;br /&gt;
&lt;br /&gt;
== View results ==&lt;br /&gt;
The results never came out perfectly, but they do nicely show the effects of different types of translation on the data / stages in the process.&lt;br /&gt;
&lt;br /&gt;
Running the original data set through pointcloud registration only:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationOriginal.png|500px]] &lt;br /&gt;
&lt;br /&gt;
Pointclouds registered by translating them according to odometry data:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationOdometry.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Running the data set through odometry translation and then pointcloud registration:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationPrecomputed.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Illustration accompanying the data set I used:&lt;br /&gt;
[[File:RegistrationEt4.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Do something new ==&lt;br /&gt;
Things I would do if I were to keep working on this project.&lt;br /&gt;
* Working odometry into the registration process appears to be key.  It would be nice to figure out the best way to do it.&lt;br /&gt;
** I don't know whether / how it's possible to send odometry and pointclouds over the ROS bus and correlate them on the other side.  Do they need to be combined into a single message?  Can the callbacks on the two topics be tied together somehow?  It would be easier to start by skipping the ROS bus altogether and just reading in the pointcloud and omdometry data from file.&lt;br /&gt;
** A new version of pcl should be coming out any day now as I finish this quarter.  A new registration algorithm will take odometry data with each pointcloud; it's called Normal Distributions Transform.  That would be worth trying out.&lt;br /&gt;
** Further research on Euler angles and rotations in 3d space could be useful.  There may be mathematical errors in the script I wrote to do this.&lt;br /&gt;
* Cleaning noise from the data could be helpful.  I believe the circular artifacts in my images come from noise in the pointclouds.  Without them, registration could be more accurate.&lt;br /&gt;
* Experiment more with max correspondence and epsilon parameters to registration algorithms.&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-06-15T20:13:51Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Registering pointclouds in ROS with PCL for [[Robot_Lab_(Spring_2012)]] =&lt;br /&gt;
Paths followed, lessons learned, code shared.&lt;br /&gt;
&lt;br /&gt;
== Find some data ==&lt;br /&gt;
The data I used is dataset 14 at http://kos.informatik.uni-osnabrueck.de/3Dscans/&lt;br /&gt;
&lt;br /&gt;
My python script, publish_from_file.py, can be easily adjusted to read any similar format, wherein each line gives the coordinates for a point.  [http://en.wikipedia.org/wiki/PLY_(file_format) PLY] is another option; PLY pointclouds can be loaded and viewed in [http://meshlab.sourceforge.net/ Meshlab].&lt;br /&gt;
&lt;br /&gt;
I didn't write any code to read pcl files, but this is the format that the [http://pointclouds.org pointcloud library] reads and writes, so if you found some pcl data and like c++ that would also work.&lt;br /&gt;
&lt;br /&gt;
Ideally, it would be best to take your own data, then you know everything about it.  It turns out the better you know the data (how far did the robot move between images? what unit does your scanner use for measurements -- meters? pixels?) the better off you will be in fine-tuning the registration algorithms.&lt;br /&gt;
&lt;br /&gt;
== Learn about registration ==&lt;br /&gt;
The pcl site has a lot of information.  I would recommend reading the introductory material on a number of pcl modules, including registration, keypoint estimation, features, and correspondence.  There are a number of ways to do this and it would be helpful to get a sense of some of them before starting on one.&lt;br /&gt;
&lt;br /&gt;
== Try my scripts ==&lt;br /&gt;
Download a tgz of my scripts: [[File:Registration_code.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
=== pose_registration.py ===&lt;br /&gt;
Uses the pose data from the data set to transform each point cloud into a global frame of reference.  Writes PLY files.&lt;br /&gt;
&lt;br /&gt;
Referenced http://www.euclideanspace.com/maths/geometry/space/coordinates/index.htm&lt;br /&gt;
&lt;br /&gt;
To run:&lt;br /&gt;
 # first set the global variables for file locations&lt;br /&gt;
 $ ./pose_registration.py&lt;br /&gt;
&lt;br /&gt;
=== pointclouds_ah/publish_from_file.py ===&lt;br /&gt;
Reads a pointcloud from a PLY or .3d file, in which each line gives the coordinates a point.  Publishes each pointcloud as a message to the a ROS topic.&lt;br /&gt;
&lt;br /&gt;
To run:&lt;br /&gt;
 # first set the global variables for file locations&lt;br /&gt;
 $ rosrun pointclouds_ah public_from_file.py&lt;br /&gt;
&lt;br /&gt;
=== register_pointclouds/registration.cpp ===&lt;br /&gt;
Reads a pointcloud off the ROS bus (the topic name is set to the same one public_from_file.py writes to).  Runs Iterative Closest Point on each pair of pointclouds.&lt;br /&gt;
&lt;br /&gt;
To run:&lt;br /&gt;
 $ rosmake register_pointclouds&lt;br /&gt;
 $ rosrun register_pointclouds register&lt;br /&gt;
&lt;br /&gt;
== View results ==&lt;br /&gt;
The results never came out perfectly, but they do nicely show the effects of different types of translation on the data / stages in the process.&lt;br /&gt;
&lt;br /&gt;
Running the original data set through pointcloud registration only:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationOriginal.png|500px]] &lt;br /&gt;
&lt;br /&gt;
Pointclouds registered by translating them according to odometry data:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationOdometry.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Running the data set through odometry translation and then pointcloud registration:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationPrecomputed.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Illustration accompanying the data set I used:&lt;br /&gt;
[[File:RegistrationEt4.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Do something new ==&lt;br /&gt;
Things I would do if I were to keep working on this project.&lt;br /&gt;
* Working odometry into the registration process appears to be key.  It would be nice to figure out the best way to do it.&lt;br /&gt;
** I don't know whether / how it's possible to send odometry and pointclouds over the ROS bus and correlate them on the other side.  Do they need to be combined into a single message?  Can the callbacks on the two topics be tied together somehow?  It would be easier to start by skipping the ROS bus altogether and just reading in the pointcloud and omdometry data from file.&lt;br /&gt;
** A new version of pcl should be coming out any day now as I finish this quarter.  A new registration algorithm will take odometry data with each pointcloud; it's called Normal Distributions Transform.  That would be worth trying out.&lt;br /&gt;
** Further research on Euler angles and rotations in 3d space could be useful.  There may be mathematical errors in the script I wrote to do this.&lt;br /&gt;
* Cleaning noise from the data could be helpful.  I believe the circular artifacts in my images come from noise in the pointclouds.  Without them, registration could be more accurate.&lt;br /&gt;
* Experiment more with max correspondence and epsilon parameters to registration algorithms.&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/File:Registration_code.tar.gz</id>
		<title>File:Registration code.tar.gz</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/File:Registration_code.tar.gz"/>
				<updated>2012-06-15T20:13:03Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: code for the scripts described in pointcloud registration summary&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;code for the scripts described in pointcloud registration summary&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-06-15T20:09:18Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: /* Learn about registration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Registering pointclouds in ROS with PCL for [[Robot_Lab_(Spring_2012)]] =&lt;br /&gt;
Paths followed, lessons learned, code shared.&lt;br /&gt;
&lt;br /&gt;
== Find some data ==&lt;br /&gt;
The data I used is dataset 14 at http://kos.informatik.uni-osnabrueck.de/3Dscans/&lt;br /&gt;
&lt;br /&gt;
My python script, publish_from_file.py, can be easily adjusted to read any similar format, wherein each line gives the coordinates for a point.  [http://en.wikipedia.org/wiki/PLY_(file_format) PLY] is another option; PLY pointclouds can be loaded and viewed in [http://meshlab.sourceforge.net/ Meshlab].&lt;br /&gt;
&lt;br /&gt;
I didn't write any code to read pcl files, but this is the format that the [http://pointclouds.org pointcloud library] reads and writes, so if you found some pcl data and like c++ that would also work.&lt;br /&gt;
&lt;br /&gt;
Ideally, it would be best to take your own data, then you know everything about it.  It turns out the better you know the data (how far did the robot move between images? what unit does your scanner use for measurements -- meters? pixels?) the better off you will be in fine-tuning the registration algorithms.&lt;br /&gt;
&lt;br /&gt;
== Learn about registration ==&lt;br /&gt;
The pcl site has a lot of information.  I would recommend reading the introductory material on a number of pcl modules, including registration, keypoint estimation, features, and correspondence.  There are a number of ways to do this and it would be helpful to get a sense of some of them before starting on one.&lt;br /&gt;
&lt;br /&gt;
== Try my scripts ==&lt;br /&gt;
Download a tgz of my scripts.&lt;br /&gt;
&lt;br /&gt;
=== pose_registration.py ===&lt;br /&gt;
Uses the pose data from the data set to transform each point cloud into a global frame of reference.  Writes PLY files.&lt;br /&gt;
&lt;br /&gt;
Referenced http://www.euclideanspace.com/maths/geometry/space/coordinates/index.htm&lt;br /&gt;
&lt;br /&gt;
To run:&lt;br /&gt;
 # first set the global variables for file locations&lt;br /&gt;
 $ ./pose_registration.py&lt;br /&gt;
&lt;br /&gt;
=== pointclouds_ah/publish_from_file.py ===&lt;br /&gt;
Reads a pointcloud from a PLY or .3d file, in which each line gives the coordinates a point.  Publishes each pointcloud as a message to the a ROS topic.&lt;br /&gt;
&lt;br /&gt;
To run:&lt;br /&gt;
 # first set the global variables for file locations&lt;br /&gt;
 $ rosrun pointclouds_ah public_from_file.py&lt;br /&gt;
&lt;br /&gt;
=== register_pointclouds/registration.cpp ===&lt;br /&gt;
Reads a pointcloud off the ROS bus (the topic name is set to the same one public_from_file.py writes to).  Runs Iterative Closest Point on each pair of pointclouds.&lt;br /&gt;
&lt;br /&gt;
To run:&lt;br /&gt;
 $ rosmake register_pointclouds&lt;br /&gt;
 $ rosrun register_pointclouds register&lt;br /&gt;
&lt;br /&gt;
== View results ==&lt;br /&gt;
The results never came out perfectly, but they do nicely show the effects of different types of translation on the data / stages in the process.&lt;br /&gt;
&lt;br /&gt;
Running the original data set through pointcloud registration only:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationOriginal.png|500px]] &lt;br /&gt;
&lt;br /&gt;
Pointclouds registered by translating them according to odometry data:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationOdometry.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Running the data set through odometry translation and then pointcloud registration:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationPrecomputed.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Illustration accompanying the data set I used:&lt;br /&gt;
[[File:RegistrationEt4.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Do something new ==&lt;br /&gt;
Things I would do if I were to keep working on this project.&lt;br /&gt;
* Working odometry into the registration process appears to be key.  It would be nice to figure out the best way to do it.&lt;br /&gt;
** I don't know whether / how it's possible to send odometry and pointclouds over the ROS bus and correlate them on the other side.  Do they need to be combined into a single message?  Can the callbacks on the two topics be tied together somehow?  It would be easier to start by skipping the ROS bus altogether and just reading in the pointcloud and omdometry data from file.&lt;br /&gt;
** A new version of pcl should be coming out any day now as I finish this quarter.  A new registration algorithm will take odometry data with each pointcloud; it's called Normal Distributions Transform.  That would be worth trying out.&lt;br /&gt;
** Further research on Euler angles and rotations in 3d space could be useful.  There may be mathematical errors in the script I wrote to do this.&lt;br /&gt;
* Cleaning noise from the data could be helpful.  I believe the circular artifacts in my images come from noise in the pointclouds.  Without them, registration could be more accurate.&lt;br /&gt;
* Experiment more with max correspondence and epsilon parameters to registration algorithms.&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-06-15T20:07:36Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: /* register_pointclouds/registration.cpp */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Registering pointclouds in ROS with PCL for [[Robot_Lab_(Spring_2012)]] =&lt;br /&gt;
Paths followed, lessons learned, code shared.&lt;br /&gt;
&lt;br /&gt;
== Find some data ==&lt;br /&gt;
The data I used is dataset 14 at http://kos.informatik.uni-osnabrueck.de/3Dscans/&lt;br /&gt;
&lt;br /&gt;
My python script, publish_from_file.py, can be easily adjusted to read any similar format, wherein each line gives the coordinates for a point.  [http://en.wikipedia.org/wiki/PLY_(file_format) PLY] is another option; PLY pointclouds can be loaded and viewed in [http://meshlab.sourceforge.net/ Meshlab].&lt;br /&gt;
&lt;br /&gt;
I didn't write any code to read pcl files, but this is the format that the [http://pointclouds.org pointcloud library] reads and writes, so if you found some pcl data and like c++ that would also work.&lt;br /&gt;
&lt;br /&gt;
Ideally, it would be best to take your own data, then you know everything about it.  It turns out the better you know the data (how far did the robot move between images? what unit does your scanner use for measurements -- meters? pixels?) the better off you will be in fine-tuning the registration algorithms.&lt;br /&gt;
&lt;br /&gt;
== Learn about registration ==&lt;br /&gt;
The pcl site has a lot of information.  I would recommend reading the introductory material on &lt;br /&gt;
&lt;br /&gt;
== Try my scripts ==&lt;br /&gt;
Download a tgz of my scripts.&lt;br /&gt;
&lt;br /&gt;
=== pose_registration.py ===&lt;br /&gt;
Uses the pose data from the data set to transform each point cloud into a global frame of reference.  Writes PLY files.&lt;br /&gt;
&lt;br /&gt;
Referenced http://www.euclideanspace.com/maths/geometry/space/coordinates/index.htm&lt;br /&gt;
&lt;br /&gt;
To run:&lt;br /&gt;
 # first set the global variables for file locations&lt;br /&gt;
 $ ./pose_registration.py&lt;br /&gt;
&lt;br /&gt;
=== pointclouds_ah/publish_from_file.py ===&lt;br /&gt;
Reads a pointcloud from a PLY or .3d file, in which each line gives the coordinates a point.  Publishes each pointcloud as a message to the a ROS topic.&lt;br /&gt;
&lt;br /&gt;
To run:&lt;br /&gt;
 # first set the global variables for file locations&lt;br /&gt;
 $ rosrun pointclouds_ah public_from_file.py&lt;br /&gt;
&lt;br /&gt;
=== register_pointclouds/registration.cpp ===&lt;br /&gt;
Reads a pointcloud off the ROS bus (the topic name is set to the same one public_from_file.py writes to).  Runs Iterative Closest Point on each pair of pointclouds.&lt;br /&gt;
&lt;br /&gt;
To run:&lt;br /&gt;
 $ rosmake register_pointclouds&lt;br /&gt;
 $ rosrun register_pointclouds register&lt;br /&gt;
&lt;br /&gt;
== View results ==&lt;br /&gt;
The results never came out perfectly, but they do nicely show the effects of different types of translation on the data / stages in the process.&lt;br /&gt;
&lt;br /&gt;
Running the original data set through pointcloud registration only:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationOriginal.png|500px]] &lt;br /&gt;
&lt;br /&gt;
Pointclouds registered by translating them according to odometry data:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationOdometry.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Running the data set through odometry translation and then pointcloud registration:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationPrecomputed.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Illustration accompanying the data set I used:&lt;br /&gt;
[[File:RegistrationEt4.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Do something new ==&lt;br /&gt;
Things I would do if I were to keep working on this project.&lt;br /&gt;
* Working odometry into the registration process appears to be key.  It would be nice to figure out the best way to do it.&lt;br /&gt;
** I don't know whether / how it's possible to send odometry and pointclouds over the ROS bus and correlate them on the other side.  Do they need to be combined into a single message?  Can the callbacks on the two topics be tied together somehow?  It would be easier to start by skipping the ROS bus altogether and just reading in the pointcloud and omdometry data from file.&lt;br /&gt;
** A new version of pcl should be coming out any day now as I finish this quarter.  A new registration algorithm will take odometry data with each pointcloud; it's called Normal Distributions Transform.  That would be worth trying out.&lt;br /&gt;
** Further research on Euler angles and rotations in 3d space could be useful.  There may be mathematical errors in the script I wrote to do this.&lt;br /&gt;
* Cleaning noise from the data could be helpful.  I believe the circular artifacts in my images come from noise in the pointclouds.  Without them, registration could be more accurate.&lt;br /&gt;
* Experiment more with max correspondence and epsilon parameters to registration algorithms.&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-06-15T20:07:24Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: /* Try my scripts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Registering pointclouds in ROS with PCL for [[Robot_Lab_(Spring_2012)]] =&lt;br /&gt;
Paths followed, lessons learned, code shared.&lt;br /&gt;
&lt;br /&gt;
== Find some data ==&lt;br /&gt;
The data I used is dataset 14 at http://kos.informatik.uni-osnabrueck.de/3Dscans/&lt;br /&gt;
&lt;br /&gt;
My python script, publish_from_file.py, can be easily adjusted to read any similar format, wherein each line gives the coordinates for a point.  [http://en.wikipedia.org/wiki/PLY_(file_format) PLY] is another option; PLY pointclouds can be loaded and viewed in [http://meshlab.sourceforge.net/ Meshlab].&lt;br /&gt;
&lt;br /&gt;
I didn't write any code to read pcl files, but this is the format that the [http://pointclouds.org pointcloud library] reads and writes, so if you found some pcl data and like c++ that would also work.&lt;br /&gt;
&lt;br /&gt;
Ideally, it would be best to take your own data, then you know everything about it.  It turns out the better you know the data (how far did the robot move between images? what unit does your scanner use for measurements -- meters? pixels?) the better off you will be in fine-tuning the registration algorithms.&lt;br /&gt;
&lt;br /&gt;
== Learn about registration ==&lt;br /&gt;
The pcl site has a lot of information.  I would recommend reading the introductory material on &lt;br /&gt;
&lt;br /&gt;
== Try my scripts ==&lt;br /&gt;
Download a tgz of my scripts.&lt;br /&gt;
&lt;br /&gt;
=== pose_registration.py ===&lt;br /&gt;
Uses the pose data from the data set to transform each point cloud into a global frame of reference.  Writes PLY files.&lt;br /&gt;
&lt;br /&gt;
Referenced http://www.euclideanspace.com/maths/geometry/space/coordinates/index.htm&lt;br /&gt;
&lt;br /&gt;
To run:&lt;br /&gt;
 # first set the global variables for file locations&lt;br /&gt;
 $ ./pose_registration.py&lt;br /&gt;
&lt;br /&gt;
=== pointclouds_ah/publish_from_file.py ===&lt;br /&gt;
Reads a pointcloud from a PLY or .3d file, in which each line gives the coordinates a point.  Publishes each pointcloud as a message to the a ROS topic.&lt;br /&gt;
&lt;br /&gt;
To run:&lt;br /&gt;
 # first set the global variables for file locations&lt;br /&gt;
 $ rosrun pointclouds_ah public_from_file.py&lt;br /&gt;
&lt;br /&gt;
=== register_pointclouds/registration.cpp ===&lt;br /&gt;
Reads a pointcloud off the ROS bus (the topic name is set to the same one public_from_file.py writes to).  Runs Iterative Closest Point on each pair of pointclouds.&lt;br /&gt;
&lt;br /&gt;
 $ rosmake register_pointclouds&lt;br /&gt;
 $ rosrun register_pointclouds register&lt;br /&gt;
&lt;br /&gt;
== View results ==&lt;br /&gt;
The results never came out perfectly, but they do nicely show the effects of different types of translation on the data / stages in the process.&lt;br /&gt;
&lt;br /&gt;
Running the original data set through pointcloud registration only:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationOriginal.png|500px]] &lt;br /&gt;
&lt;br /&gt;
Pointclouds registered by translating them according to odometry data:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationOdometry.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Running the data set through odometry translation and then pointcloud registration:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationPrecomputed.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Illustration accompanying the data set I used:&lt;br /&gt;
[[File:RegistrationEt4.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Do something new ==&lt;br /&gt;
Things I would do if I were to keep working on this project.&lt;br /&gt;
* Working odometry into the registration process appears to be key.  It would be nice to figure out the best way to do it.&lt;br /&gt;
** I don't know whether / how it's possible to send odometry and pointclouds over the ROS bus and correlate them on the other side.  Do they need to be combined into a single message?  Can the callbacks on the two topics be tied together somehow?  It would be easier to start by skipping the ROS bus altogether and just reading in the pointcloud and omdometry data from file.&lt;br /&gt;
** A new version of pcl should be coming out any day now as I finish this quarter.  A new registration algorithm will take odometry data with each pointcloud; it's called Normal Distributions Transform.  That would be worth trying out.&lt;br /&gt;
** Further research on Euler angles and rotations in 3d space could be useful.  There may be mathematical errors in the script I wrote to do this.&lt;br /&gt;
* Cleaning noise from the data could be helpful.  I believe the circular artifacts in my images come from noise in the pointclouds.  Without them, registration could be more accurate.&lt;br /&gt;
* Experiment more with max correspondence and epsilon parameters to registration algorithms.&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-06-15T20:01:22Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: /* Try my scripts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Registering pointclouds in ROS with PCL for [[Robot_Lab_(Spring_2012)]] =&lt;br /&gt;
Paths followed, lessons learned, code shared.&lt;br /&gt;
&lt;br /&gt;
== Find some data ==&lt;br /&gt;
The data I used is dataset 14 at http://kos.informatik.uni-osnabrueck.de/3Dscans/&lt;br /&gt;
&lt;br /&gt;
My python script, publish_from_file.py, can be easily adjusted to read any similar format, wherein each line gives the coordinates for a point.  [http://en.wikipedia.org/wiki/PLY_(file_format) PLY] is another option; PLY pointclouds can be loaded and viewed in [http://meshlab.sourceforge.net/ Meshlab].&lt;br /&gt;
&lt;br /&gt;
I didn't write any code to read pcl files, but this is the format that the [http://pointclouds.org pointcloud library] reads and writes, so if you found some pcl data and like c++ that would also work.&lt;br /&gt;
&lt;br /&gt;
Ideally, it would be best to take your own data, then you know everything about it.  It turns out the better you know the data (how far did the robot move between images? what unit does your scanner use for measurements -- meters? pixels?) the better off you will be in fine-tuning the registration algorithms.&lt;br /&gt;
&lt;br /&gt;
== Learn about registration ==&lt;br /&gt;
The pcl site has a lot of information.  I would recommend reading the introductory material on &lt;br /&gt;
&lt;br /&gt;
== Try my scripts ==&lt;br /&gt;
Download a tgz of my scripts.&lt;br /&gt;
&lt;br /&gt;
=== pose_registration.py ===&lt;br /&gt;
Uses the pose data from the data set to transform each point cloud into a global frame of reference.  Writes PLY files.&lt;br /&gt;
&lt;br /&gt;
Referenced http://www.euclideanspace.com/maths/geometry/space/coordinates/index.htm&lt;br /&gt;
&lt;br /&gt;
To run:&lt;br /&gt;
 # first set the global variables for file locations&lt;br /&gt;
 $ ./pose_registration.py&lt;br /&gt;
&lt;br /&gt;
=== pointclouds_ah/publish_from_file.py ===&lt;br /&gt;
Reads a pointcloud from a PLY or .3d file, in which each line gives the coordinates a point.  Publishes each pointcloud as a message to the a ROS topic.&lt;br /&gt;
&lt;br /&gt;
To run:&lt;br /&gt;
 # first set the global variables for file locations&lt;br /&gt;
 $ rosrun pointclouds_ah public_from_file.py&lt;br /&gt;
&lt;br /&gt;
=== pointcloud registration ===&lt;br /&gt;
$ rosmake register_pointclouds&lt;br /&gt;
$ rosrun register_pointclouds register&lt;br /&gt;
&lt;br /&gt;
== View results ==&lt;br /&gt;
The results never came out perfectly, but they do nicely show the effects of different types of translation on the data / stages in the process.&lt;br /&gt;
&lt;br /&gt;
Running the original data set through pointcloud registration only:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationOriginal.png|500px]] &lt;br /&gt;
&lt;br /&gt;
Pointclouds registered by translating them according to odometry data:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationOdometry.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Running the data set through odometry translation and then pointcloud registration:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationPrecomputed.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Illustration accompanying the data set I used:&lt;br /&gt;
[[File:RegistrationEt4.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Do something new ==&lt;br /&gt;
Things I would do if I were to keep working on this project.&lt;br /&gt;
* Working odometry into the registration process appears to be key.  It would be nice to figure out the best way to do it.&lt;br /&gt;
** I don't know whether / how it's possible to send odometry and pointclouds over the ROS bus and correlate them on the other side.  Do they need to be combined into a single message?  Can the callbacks on the two topics be tied together somehow?  It would be easier to start by skipping the ROS bus altogether and just reading in the pointcloud and omdometry data from file.&lt;br /&gt;
** A new version of pcl should be coming out any day now as I finish this quarter.  A new registration algorithm will take odometry data with each pointcloud; it's called Normal Distributions Transform.  That would be worth trying out.&lt;br /&gt;
** Further research on Euler angles and rotations in 3d space could be useful.  There may be mathematical errors in the script I wrote to do this.&lt;br /&gt;
* Cleaning noise from the data could be helpful.  I believe the circular artifacts in my images come from noise in the pointclouds.  Without them, registration could be more accurate.&lt;br /&gt;
* Experiment more with max correspondence and epsilon parameters to registration algorithms.&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-06-15T19:53:34Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: /* Do something new */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Registering pointclouds in ROS with PCL for [[Robot_Lab_(Spring_2012)]] =&lt;br /&gt;
Paths followed, lessons learned, code shared.&lt;br /&gt;
&lt;br /&gt;
== Find some data ==&lt;br /&gt;
The data I used is dataset 14 at http://kos.informatik.uni-osnabrueck.de/3Dscans/&lt;br /&gt;
&lt;br /&gt;
My python script, publish_from_file.py, can be easily adjusted to read any similar format, wherein each line gives the coordinates for a point.  [http://en.wikipedia.org/wiki/PLY_(file_format) PLY] is another option; PLY pointclouds can be loaded and viewed in [http://meshlab.sourceforge.net/ Meshlab].&lt;br /&gt;
&lt;br /&gt;
I didn't write any code to read pcl files, but this is the format that the [http://pointclouds.org pointcloud library] reads and writes, so if you found some pcl data and like c++ that would also work.&lt;br /&gt;
&lt;br /&gt;
Ideally, it would be best to take your own data, then you know everything about it.  It turns out the better you know the data (how far did the robot move between images? what unit does your scanner use for measurements -- meters? pixels?) the better off you will be in fine-tuning the registration algorithms.&lt;br /&gt;
&lt;br /&gt;
== Learn about registration ==&lt;br /&gt;
The pcl site has a lot of information.  I would recommend reading the introductory material on &lt;br /&gt;
&lt;br /&gt;
== Try my scripts ==&lt;br /&gt;
&lt;br /&gt;
=== pose_registration ===&lt;br /&gt;
* http://www.euclideanspace.com/maths/geometry/space/coordinates/index.htm&lt;br /&gt;
&lt;br /&gt;
=== publish from file to ROS bus ===&lt;br /&gt;
&lt;br /&gt;
=== pointcloud registration ===&lt;br /&gt;
$ rosmake register_pointclouds&lt;br /&gt;
$ roscore&lt;br /&gt;
$ rosrun register_pointclouds register&lt;br /&gt;
$ &lt;br /&gt;
&lt;br /&gt;
== View results ==&lt;br /&gt;
The results never came out perfectly, but they do nicely show the effects of different types of translation on the data / stages in the process.&lt;br /&gt;
&lt;br /&gt;
Running the original data set through pointcloud registration only:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationOriginal.png|500px]] &lt;br /&gt;
&lt;br /&gt;
Pointclouds registered by translating them according to odometry data:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationOdometry.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Running the data set through odometry translation and then pointcloud registration:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationPrecomputed.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Illustration accompanying the data set I used:&lt;br /&gt;
[[File:RegistrationEt4.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Do something new ==&lt;br /&gt;
Things I would do if I were to keep working on this project.&lt;br /&gt;
* Working odometry into the registration process appears to be key.  It would be nice to figure out the best way to do it.&lt;br /&gt;
** I don't know whether / how it's possible to send odometry and pointclouds over the ROS bus and correlate them on the other side.  Do they need to be combined into a single message?  Can the callbacks on the two topics be tied together somehow?  It would be easier to start by skipping the ROS bus altogether and just reading in the pointcloud and omdometry data from file.&lt;br /&gt;
** A new version of pcl should be coming out any day now as I finish this quarter.  A new registration algorithm will take odometry data with each pointcloud; it's called Normal Distributions Transform.  That would be worth trying out.&lt;br /&gt;
** Further research on Euler angles and rotations in 3d space could be useful.  There may be mathematical errors in the script I wrote to do this.&lt;br /&gt;
* Cleaning noise from the data could be helpful.  I believe the circular artifacts in my images come from noise in the pointclouds.  Without them, registration could be more accurate.&lt;br /&gt;
* Experiment more with max correspondence and epsilon parameters to registration algorithms.&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-06-15T19:52:41Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: /* View results */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Registering pointclouds in ROS with PCL for [[Robot_Lab_(Spring_2012)]] =&lt;br /&gt;
Paths followed, lessons learned, code shared.&lt;br /&gt;
&lt;br /&gt;
== Find some data ==&lt;br /&gt;
The data I used is dataset 14 at http://kos.informatik.uni-osnabrueck.de/3Dscans/&lt;br /&gt;
&lt;br /&gt;
My python script, publish_from_file.py, can be easily adjusted to read any similar format, wherein each line gives the coordinates for a point.  [http://en.wikipedia.org/wiki/PLY_(file_format) PLY] is another option; PLY pointclouds can be loaded and viewed in [http://meshlab.sourceforge.net/ Meshlab].&lt;br /&gt;
&lt;br /&gt;
I didn't write any code to read pcl files, but this is the format that the [http://pointclouds.org pointcloud library] reads and writes, so if you found some pcl data and like c++ that would also work.&lt;br /&gt;
&lt;br /&gt;
Ideally, it would be best to take your own data, then you know everything about it.  It turns out the better you know the data (how far did the robot move between images? what unit does your scanner use for measurements -- meters? pixels?) the better off you will be in fine-tuning the registration algorithms.&lt;br /&gt;
&lt;br /&gt;
== Learn about registration ==&lt;br /&gt;
The pcl site has a lot of information.  I would recommend reading the introductory material on &lt;br /&gt;
&lt;br /&gt;
== Try my scripts ==&lt;br /&gt;
&lt;br /&gt;
=== pose_registration ===&lt;br /&gt;
* http://www.euclideanspace.com/maths/geometry/space/coordinates/index.htm&lt;br /&gt;
&lt;br /&gt;
=== publish from file to ROS bus ===&lt;br /&gt;
&lt;br /&gt;
=== pointcloud registration ===&lt;br /&gt;
$ rosmake register_pointclouds&lt;br /&gt;
$ roscore&lt;br /&gt;
$ rosrun register_pointclouds register&lt;br /&gt;
$ &lt;br /&gt;
&lt;br /&gt;
== View results ==&lt;br /&gt;
The results never came out perfectly, but they do nicely show the effects of different types of translation on the data / stages in the process.&lt;br /&gt;
&lt;br /&gt;
Running the original data set through pointcloud registration only:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationOriginal.png|500px]] &lt;br /&gt;
&lt;br /&gt;
Pointclouds registered by translating them according to odometry data:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationOdometry.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Running the data set through odometry translation and then pointcloud registration:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationPrecomputed.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Illustration accompanying the data set I used:&lt;br /&gt;
[[File:RegistrationEt4.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Do something new ==&lt;br /&gt;
Things I would do if I were to keep working on this project.&lt;br /&gt;
* Working odometry into the registration process appears to be key.  It would be nice to figure out the best way to do it.&lt;br /&gt;
** I don't know whether / how it's possible to send odometry and pointclouds over the ROS bus and correlate them on the other side.  Do they need to be combined into a single message?  Can the callbacks on the two topics be tied together somehow?  It would be easier to start by skipping the ROS bus altogether and just reading in the pointcloud and omdometry data from file.&lt;br /&gt;
** A new version of pcl should be coming out any day now as I finish this quarter.  A new registration algorithm will take odometry data with each pointcloud; it's called Normal Distributions Transform.  That would be worth trying out.&lt;br /&gt;
** Further research on Euler angles and rotations in 3d space could be useful.  I'm not certain that what I did in my python script is without error.&lt;br /&gt;
* Cleaning noise from the data could be helpful.  I believe the circular artifacts in my images come from noise in the pointclouds.  Without them, registration could be more accurate.&lt;br /&gt;
* Experiment more with max correspondence and epsilon parameters to registration algorithms.&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-06-15T19:51:16Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Registering pointclouds in ROS with PCL for [[Robot_Lab_(Spring_2012)]] =&lt;br /&gt;
Paths followed, lessons learned, code shared.&lt;br /&gt;
&lt;br /&gt;
== Find some data ==&lt;br /&gt;
The data I used is dataset 14 at http://kos.informatik.uni-osnabrueck.de/3Dscans/&lt;br /&gt;
&lt;br /&gt;
My python script, publish_from_file.py, can be easily adjusted to read any similar format, wherein each line gives the coordinates for a point.  [http://en.wikipedia.org/wiki/PLY_(file_format) PLY] is another option; PLY pointclouds can be loaded and viewed in [http://meshlab.sourceforge.net/ Meshlab].&lt;br /&gt;
&lt;br /&gt;
I didn't write any code to read pcl files, but this is the format that the [http://pointclouds.org pointcloud library] reads and writes, so if you found some pcl data and like c++ that would also work.&lt;br /&gt;
&lt;br /&gt;
Ideally, it would be best to take your own data, then you know everything about it.  It turns out the better you know the data (how far did the robot move between images? what unit does your scanner use for measurements -- meters? pixels?) the better off you will be in fine-tuning the registration algorithms.&lt;br /&gt;
&lt;br /&gt;
== Learn about registration ==&lt;br /&gt;
The pcl site has a lot of information.  I would recommend reading the introductory material on &lt;br /&gt;
&lt;br /&gt;
== Try my scripts ==&lt;br /&gt;
&lt;br /&gt;
=== pose_registration ===&lt;br /&gt;
* http://www.euclideanspace.com/maths/geometry/space/coordinates/index.htm&lt;br /&gt;
&lt;br /&gt;
=== publish from file to ROS bus ===&lt;br /&gt;
&lt;br /&gt;
=== pointcloud registration ===&lt;br /&gt;
$ rosmake register_pointclouds&lt;br /&gt;
$ roscore&lt;br /&gt;
$ rosrun register_pointclouds register&lt;br /&gt;
$ &lt;br /&gt;
&lt;br /&gt;
== View results ==&lt;br /&gt;
The results never came out perfectly, but they do nicely show the effects of different types of translation on the data / stages in the process.&lt;br /&gt;
&lt;br /&gt;
Running the original data set through pointcloud registration only:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationOriginal.png|500px]] &lt;br /&gt;
&lt;br /&gt;
Pointclouds registered by translating them according to odometry data:&lt;br /&gt;
[[File:RegistrationOdometry|500px]]&lt;br /&gt;
&lt;br /&gt;
Running the data set through odometry translation and then pointcloud registration:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationPrecomputed.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Illustration accompanying the data set I used:&lt;br /&gt;
[[File:RegistrationEt4.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Do something new ==&lt;br /&gt;
Things I would do if I were to keep working on this project.&lt;br /&gt;
* Working odometry into the registration process appears to be key.  It would be nice to figure out the best way to do it.&lt;br /&gt;
** I don't know whether / how it's possible to send odometry and pointclouds over the ROS bus and correlate them on the other side.  Do they need to be combined into a single message?  Can the callbacks on the two topics be tied together somehow?  It would be easier to start by skipping the ROS bus altogether and just reading in the pointcloud and omdometry data from file.&lt;br /&gt;
** A new version of pcl should be coming out any day now as I finish this quarter.  A new registration algorithm will take odometry data with each pointcloud; it's called Normal Distributions Transform.  That would be worth trying out.&lt;br /&gt;
** Further research on Euler angles and rotations in 3d space could be useful.  I'm not certain that what I did in my python script is without error.&lt;br /&gt;
* Cleaning noise from the data could be helpful.  I believe the circular artifacts in my images come from noise in the pointclouds.  Without them, registration could be more accurate.&lt;br /&gt;
* Experiment more with max correspondence and epsilon parameters to registration algorithms.&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/File:RegistrationOdometry.png</id>
		<title>File:RegistrationOdometry.png</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/File:RegistrationOdometry.png"/>
				<updated>2012-06-15T19:49:48Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: Pointclouds registered by translating them according to odometry data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Pointclouds registered by translating them according to odometry data&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-06-15T19:44:43Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: /* Do something new */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Registering pointclouds in ROS with PCL for [[Robot_Lab_(Spring_2012)]] =&lt;br /&gt;
Paths followed, lessons learned, code shared.&lt;br /&gt;
&lt;br /&gt;
== Find some data ==&lt;br /&gt;
The data I used is dataset 14 at http://kos.informatik.uni-osnabrueck.de/3Dscans/&lt;br /&gt;
&lt;br /&gt;
My python script, publish_from_file.py, can be easily adjusted to read any similar format, wherein each line gives the coordinates for a point.  [http://en.wikipedia.org/wiki/PLY_(file_format) PLY] is another option; PLY pointclouds can be loaded and viewed in [http://meshlab.sourceforge.net/ Meshlab].&lt;br /&gt;
&lt;br /&gt;
I didn't write any code to read pcl files, but this is the format that the [http://pointclouds.org pointcloud library] reads and writes, so if you found some pcl data and like c++ that would also work.&lt;br /&gt;
&lt;br /&gt;
Ideally, it would be best to take your own data, then you know everything about it.  It turns out the better you know the data (how far did the robot move between images? what unit does your scanner use for measurements -- meters? pixels?) the better off you will be in fine-tuning the registration algorithms.&lt;br /&gt;
&lt;br /&gt;
== Learn about registration ==&lt;br /&gt;
The pcl site has a lot of information.  I would recommend reading the introductory material on &lt;br /&gt;
&lt;br /&gt;
== Try my scripts ==&lt;br /&gt;
&lt;br /&gt;
=== pose_registration ===&lt;br /&gt;
* http://www.euclideanspace.com/maths/geometry/space/coordinates/index.htm&lt;br /&gt;
&lt;br /&gt;
=== publish from file to ROS bus ===&lt;br /&gt;
&lt;br /&gt;
=== pointcloud registration ===&lt;br /&gt;
$ rosmake register_pointclouds&lt;br /&gt;
$ roscore&lt;br /&gt;
$ rosrun register_pointclouds register&lt;br /&gt;
$ &lt;br /&gt;
&lt;br /&gt;
== View results ==&lt;br /&gt;
The results never came out perfectly, but they do nicely show the effects of different types of translation on the data / stages in the process.&lt;br /&gt;
&lt;br /&gt;
Running the original data set through pointcloud registration only:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationOriginal.png|500px]] &lt;br /&gt;
&lt;br /&gt;
Running the data set through pose registration only:&lt;br /&gt;
&lt;br /&gt;
Running the data set through pose registration and then pointcloud registration:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationPrecomputed.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Illustration accompanying the data set I used:&lt;br /&gt;
[[File:RegistrationEt4.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Do something new ==&lt;br /&gt;
* Working odometry into the registration process appears to be key.  It would be nice to figure out the best way to do it.&lt;br /&gt;
** I don't know whether / how it's possible to send odometry and pointclouds over the ROS bus and correlate them on the other side.  Do they need to be combined into a single message?  Can the callbacks on the two topics be tied together somehow?  It would be easier to start by skipping the ROS bus altogether and just reading in the pointcloud and omdometry data from file.&lt;br /&gt;
** A new version of pcl should be coming out any day now as I finish this quarter.  A new registration algorithm will take odometry data with each pointcloud; it's called Normal Distributions Transform.  That would be worth trying out.&lt;br /&gt;
** Further research on Euler angles and rotations in 3d space could be useful.  I'm not certain that what I did in my python script is without error.&lt;br /&gt;
* Cleaning noise from the data could be helpful.  I believe the circular artifacts in my images come from noise in the pointclouds.  Without them, registration could be more accurate.&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-06-15T19:43:41Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Registering pointclouds in ROS with PCL for [[Robot_Lab_(Spring_2012)]] =&lt;br /&gt;
Paths followed, lessons learned, code shared.&lt;br /&gt;
&lt;br /&gt;
== Find some data ==&lt;br /&gt;
The data I used is dataset 14 at http://kos.informatik.uni-osnabrueck.de/3Dscans/&lt;br /&gt;
&lt;br /&gt;
My python script, publish_from_file.py, can be easily adjusted to read any similar format, wherein each line gives the coordinates for a point.  [http://en.wikipedia.org/wiki/PLY_(file_format) PLY] is another option; PLY pointclouds can be loaded and viewed in [http://meshlab.sourceforge.net/ Meshlab].&lt;br /&gt;
&lt;br /&gt;
I didn't write any code to read pcl files, but this is the format that the [http://pointclouds.org pointcloud library] reads and writes, so if you found some pcl data and like c++ that would also work.&lt;br /&gt;
&lt;br /&gt;
Ideally, it would be best to take your own data, then you know everything about it.  It turns out the better you know the data (how far did the robot move between images? what unit does your scanner use for measurements -- meters? pixels?) the better off you will be in fine-tuning the registration algorithms.&lt;br /&gt;
&lt;br /&gt;
== Learn about registration ==&lt;br /&gt;
The pcl site has a lot of information.  I would recommend reading the introductory material on &lt;br /&gt;
&lt;br /&gt;
== Try my scripts ==&lt;br /&gt;
&lt;br /&gt;
=== pose_registration ===&lt;br /&gt;
* http://www.euclideanspace.com/maths/geometry/space/coordinates/index.htm&lt;br /&gt;
&lt;br /&gt;
=== publish from file to ROS bus ===&lt;br /&gt;
&lt;br /&gt;
=== pointcloud registration ===&lt;br /&gt;
$ rosmake register_pointclouds&lt;br /&gt;
$ roscore&lt;br /&gt;
$ rosrun register_pointclouds register&lt;br /&gt;
$ &lt;br /&gt;
&lt;br /&gt;
== View results ==&lt;br /&gt;
The results never came out perfectly, but they do nicely show the effects of different types of translation on the data / stages in the process.&lt;br /&gt;
&lt;br /&gt;
Running the original data set through pointcloud registration only:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationOriginal.png|500px]] &lt;br /&gt;
&lt;br /&gt;
Running the data set through pose registration only:&lt;br /&gt;
&lt;br /&gt;
Running the data set through pose registration and then pointcloud registration:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationPrecomputed.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Illustration accompanying the data set I used:&lt;br /&gt;
[[File:RegistrationEt4.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Do something new ==&lt;br /&gt;
* Working odometry into the registration process appears to be key.  It would be nice to figure out the best way to do it.&lt;br /&gt;
** I don't know whether / how it's possible to send odometry and pointclouds over the ROS bus and correlate them on the other side.  Do they need to be combined into a single message?  Can the callbacks on the two topics be tied together somehow?  It would be easier to start by skipping the ROS bus altogether and just reading in the pointcloud and omdometry data from file.&lt;br /&gt;
** A new version of pcl should be coming out any day now as I finish this quarter.  A new registration algorithm will take odometry data; it's called Normal Distributions Transform.  That would be worth trying out.&lt;br /&gt;
** Further research on Euler angles and rotations in 3d space could be useful.  I'm not certain that what I did in my python script is without error.&lt;br /&gt;
* Cleaning noise from the data could be helpful.  I believe the circular artifacts in my images come from noise in the pointclouds.  Without them, registration could be more accurate.&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-06-15T19:42:26Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: /* do something new */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Registering pointclouds in ROS with PCL for [[Robot_Lab_(Spring_2012)]] =&lt;br /&gt;
Paths followed, lessons learned, code shared.&lt;br /&gt;
&lt;br /&gt;
== find some data ==&lt;br /&gt;
The data I used is dataset 14 at http://kos.informatik.uni-osnabrueck.de/3Dscans/&lt;br /&gt;
&lt;br /&gt;
My python script, publish_from_file.py, can be easily adjusted to read any similar format, wherein each line gives the coordinates for a point.  [http://en.wikipedia.org/wiki/PLY_(file_format) PLY] is another option; PLY pointclouds can be loaded and viewed in [http://meshlab.sourceforge.net/ Meshlab].&lt;br /&gt;
&lt;br /&gt;
I didn't write any code to read pcl files, but this is the format that the [http://pointclouds.org pointcloud library] reads and writes, so if you found some pcl data and like c++ that would also work.&lt;br /&gt;
&lt;br /&gt;
Ideally, it would be best to take your own data, then you know everything about it.  It turns out the better you know the data (how far did the robot move between images? what unit does your scanner use for measurements -- meters? pixels?) the better off you will be in fine-tuning the registration algorithms.&lt;br /&gt;
&lt;br /&gt;
== learn about registration ==&lt;br /&gt;
The pcl site has a lot of information.  I would recommend reading the introductory material on &lt;br /&gt;
&lt;br /&gt;
== try my scripts ==&lt;br /&gt;
&lt;br /&gt;
=== pose_registration ===&lt;br /&gt;
* http://www.euclideanspace.com/maths/geometry/space/coordinates/index.htm&lt;br /&gt;
&lt;br /&gt;
=== publish from file to ROS bus ===&lt;br /&gt;
&lt;br /&gt;
=== pointcloud registration ===&lt;br /&gt;
$ rosmake register_pointclouds&lt;br /&gt;
$ roscore&lt;br /&gt;
$ rosrun register_pointclouds register&lt;br /&gt;
$ &lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
The results never came out perfectly, but they do nicely show the effects of different types of translation on the data / stages in the process.&lt;br /&gt;
&lt;br /&gt;
Running the original data set through pointcloud registration only:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationOriginal.png|500px]] &lt;br /&gt;
&lt;br /&gt;
Running the data set through pose registration only:&lt;br /&gt;
&lt;br /&gt;
Running the data set through pose registration and then pointcloud registration:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationPrecomputed.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Illustration accompanying the data set I used:&lt;br /&gt;
[[File:RegistrationEt4.jpg]]&lt;br /&gt;
&lt;br /&gt;
== do something new ==&lt;br /&gt;
* Working odometry into the registration process appears to be key.  It would be nice to figure out the best way to do it.&lt;br /&gt;
** I don't know whether / how it's possible to send odometry and pointclouds over the ROS bus and correlate them on the other side.  Do they need to be combined into a single message?  Can the callbacks on the two topics be tied together somehow?  It would be easier to start by skipping the ROS bus altogether and just reading in the pointcloud and omdometry data from file.&lt;br /&gt;
** A new version of pcl should be coming out any day now as I finish this quarter.  A new registration algorithm will take odometry data; it's called Normal Distributions Transform.  That would be worth trying out.&lt;br /&gt;
** Further research on Euler angles and rotations in 3d space could be useful.  I'm not certain that what I did in my python script is without error.&lt;br /&gt;
* Cleaning noise from the data could be helpful.  I believe the circular artifacts in my images come from noise in the pointclouds.  Without them, registration could be more accurate.&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-06-15T19:39:30Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: /* Results */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Registering pointclouds in ROS with PCL for [[Robot_Lab_(Spring_2012)]] =&lt;br /&gt;
Paths followed, lessons learned, code shared.&lt;br /&gt;
&lt;br /&gt;
== find some data ==&lt;br /&gt;
The data I used is dataset 14 at http://kos.informatik.uni-osnabrueck.de/3Dscans/&lt;br /&gt;
&lt;br /&gt;
My python script, publish_from_file.py, can be easily adjusted to read any similar format, wherein each line gives the coordinates for a point.  [http://en.wikipedia.org/wiki/PLY_(file_format) PLY] is another option; PLY pointclouds can be loaded and viewed in [http://meshlab.sourceforge.net/ Meshlab].&lt;br /&gt;
&lt;br /&gt;
I didn't write any code to read pcl files, but this is the format that the [http://pointclouds.org pointcloud library] reads and writes, so if you found some pcl data and like c++ that would also work.&lt;br /&gt;
&lt;br /&gt;
Ideally, it would be best to take your own data, then you know everything about it.  It turns out the better you know the data (how far did the robot move between images? what unit does your scanner use for measurements -- meters? pixels?) the better off you will be in fine-tuning the registration algorithms.&lt;br /&gt;
&lt;br /&gt;
== learn about registration ==&lt;br /&gt;
The pcl site has a lot of information.  I would recommend reading the introductory material on &lt;br /&gt;
&lt;br /&gt;
== try my scripts ==&lt;br /&gt;
&lt;br /&gt;
=== pose_registration ===&lt;br /&gt;
* http://www.euclideanspace.com/maths/geometry/space/coordinates/index.htm&lt;br /&gt;
&lt;br /&gt;
=== publish from file to ROS bus ===&lt;br /&gt;
&lt;br /&gt;
=== pointcloud registration ===&lt;br /&gt;
$ rosmake register_pointclouds&lt;br /&gt;
$ roscore&lt;br /&gt;
$ rosrun register_pointclouds register&lt;br /&gt;
$ &lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
The results never came out perfectly, but they do nicely show the effects of different types of translation on the data / stages in the process.&lt;br /&gt;
&lt;br /&gt;
Running the original data set through pointcloud registration only:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationOriginal.png|500px]] &lt;br /&gt;
&lt;br /&gt;
Running the data set through pose registration only:&lt;br /&gt;
&lt;br /&gt;
Running the data set through pose registration and then pointcloud registration:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationPrecomputed.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Illustration accompanying the data set I used:&lt;br /&gt;
[[File:RegistrationEt4.jpg]]&lt;br /&gt;
&lt;br /&gt;
== do something new ==&lt;br /&gt;
Working odometry into the registration process appears to be key.  It would be nice to figure out the best way to do it.&lt;br /&gt;
* I don't know whether / how it's possible to send odometry and pointclouds over the ROS bus and correlate them on the other side.  Do they need to be combined into a single message?  Can the callbacks on the two topics be tied together somehow?  It would be easier to start by skipping the ROS bus altogether and just reading in the pointcloud and omdometry data from file.&lt;br /&gt;
* A new version of pcl should be coming out any day now as I finish this quarter.  A new registration algorithm will take odometry data; it's called Normal Distributions Transform.  That would be worth trying out.&lt;br /&gt;
* Further research on Euler angles and rotations in 3d space could be useful.  I'm not certain that what I did in my python script is without error.&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-06-15T19:34:23Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Registering pointclouds in ROS with PCL for [[Robot_Lab_(Spring_2012)]] =&lt;br /&gt;
Paths followed, lessons learned, code shared.&lt;br /&gt;
&lt;br /&gt;
== find some data ==&lt;br /&gt;
The data I used is dataset 14 at http://kos.informatik.uni-osnabrueck.de/3Dscans/&lt;br /&gt;
&lt;br /&gt;
My python script, publish_from_file.py, can be easily adjusted to read any similar format, wherein each line gives the coordinates for a point.  [http://en.wikipedia.org/wiki/PLY_(file_format) PLY] is another option; PLY pointclouds can be loaded and viewed in [http://meshlab.sourceforge.net/ Meshlab].&lt;br /&gt;
&lt;br /&gt;
I didn't write any code to read pcl files, but this is the format that the [http://pointclouds.org pointcloud library] reads and writes, so if you found some pcl data and like c++ that would also work.&lt;br /&gt;
&lt;br /&gt;
Ideally, it would be best to take your own data, then you know everything about it.  It turns out the better you know the data (how far did the robot move between images? what unit does your scanner use for measurements -- meters? pixels?) the better off you will be in fine-tuning the registration algorithms.&lt;br /&gt;
&lt;br /&gt;
== learn about registration ==&lt;br /&gt;
The pcl site has a lot of information.  I would recommend reading the introductory material on &lt;br /&gt;
&lt;br /&gt;
== try my scripts ==&lt;br /&gt;
&lt;br /&gt;
=== pose_registration ===&lt;br /&gt;
* http://www.euclideanspace.com/maths/geometry/space/coordinates/index.htm&lt;br /&gt;
&lt;br /&gt;
=== publish from file to ROS bus ===&lt;br /&gt;
&lt;br /&gt;
=== pointcloud registration ===&lt;br /&gt;
$ rosmake register_pointclouds&lt;br /&gt;
$ roscore&lt;br /&gt;
$ rosrun register_pointclouds register&lt;br /&gt;
$ &lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
Running the original data set through pointcloud registration only:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationOriginal.png|500px]] &lt;br /&gt;
&lt;br /&gt;
Running the data set through pose registration only:&lt;br /&gt;
&lt;br /&gt;
Running the data set through pose registration and then pointcloud registration:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationPrecomputed.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Illustration accompanying the data set I used:&lt;br /&gt;
[[File:RegistrationEt4.jpg]]&lt;br /&gt;
&lt;br /&gt;
== do something new ==&lt;br /&gt;
Working odometry into the registration process appears to be key.  It would be nice to figure out the best way to do it.&lt;br /&gt;
* I don't know whether / how it's possible to send odometry and pointclouds over the ROS bus and correlate them on the other side.  Do they need to be combined into a single message?  Can the callbacks on the two topics be tied together somehow?  It would be easier to start by skipping the ROS bus altogether and just reading in the pointcloud and omdometry data from file.&lt;br /&gt;
* A new version of pcl should be coming out any day now as I finish this quarter.  A new registration algorithm will take odometry data; it's called Normal Distributions Transform.  That would be worth trying out.&lt;br /&gt;
* Further research on Euler angles and rotations in 3d space could be useful.  I'm not certain that what I did in my python script is without error.&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/File:RegistrationEt4.jpg</id>
		<title>File:RegistrationEt4.jpg</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/File:RegistrationEt4.jpg"/>
				<updated>2012-06-15T19:32:55Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: Illustration of registered data that comes with the data set.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Illustration of registered data that comes with the data set.&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-06-15T19:31:28Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: /* Results */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Registering pointclouds in ROS with PCL for [[Robot_Lab_(Spring_2012)]] =&lt;br /&gt;
Paths followed, lessons learned, code shared.&lt;br /&gt;
&lt;br /&gt;
== find some data ==&lt;br /&gt;
The data I used is dataset 14 at http://kos.informatik.uni-osnabrueck.de/3Dscans/&lt;br /&gt;
&lt;br /&gt;
My python script, publish_from_file.py, can be easily adjusted to read any similar format, wherein each line gives the coordinates for a point.  [http://en.wikipedia.org/wiki/PLY_(file_format) PLY] is another option; PLY pointclouds can be loaded and viewed in [http://meshlab.sourceforge.net/ Meshlab].&lt;br /&gt;
&lt;br /&gt;
I didn't write any code to read pcl files, but this is the format that the [http://pointclouds.org pointcloud library] reads and writes, so if you found some pcl data and like c++ that would also work.&lt;br /&gt;
&lt;br /&gt;
Ideally, it would be best to take your own data, then you know everything about it.  It turns out the better you know the data (how far did the robot move between images? what unit does your scanner use for measurements -- meters? pixels?) the better off you will be in fine-tuning the registration algorithms.&lt;br /&gt;
&lt;br /&gt;
== learn about registration ==&lt;br /&gt;
The pcl site has a lot of information.  I would recommend reading the introductory material on &lt;br /&gt;
&lt;br /&gt;
== try my scripts ==&lt;br /&gt;
&lt;br /&gt;
=== pose_registration ===&lt;br /&gt;
* http://www.euclideanspace.com/maths/geometry/space/coordinates/index.htm&lt;br /&gt;
&lt;br /&gt;
=== publish from file to ROS bus ===&lt;br /&gt;
&lt;br /&gt;
=== pointcloud registration ===&lt;br /&gt;
$ rosmake register_pointclouds&lt;br /&gt;
$ roscore&lt;br /&gt;
$ rosrun register_pointclouds register&lt;br /&gt;
$ &lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
Running the original data set through pointcloud registration only:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationOriginal.png|500px]] &lt;br /&gt;
&lt;br /&gt;
Running the data set through pose registration only:&lt;br /&gt;
&lt;br /&gt;
Running the data set through pose registration and then pointcloud registration:&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationPrecomputed.png|500px]]&lt;br /&gt;
&lt;br /&gt;
== do something new ==&lt;br /&gt;
Working odometry into the registration process appears to be key.  It would be nice to figure out the best way to do it.&lt;br /&gt;
* I don't know whether / how it's possible to send odometry and pointclouds over the ROS bus and correlate them on the other side.  Do they need to be combined into a single message?  Can the callbacks on the two topics be tied together somehow?  It would be easier to start by skipping the ROS bus altogether and just reading in the pointcloud and omdometry data from file.&lt;br /&gt;
* A new version of pcl should be coming out any day now as I finish this quarter.  A new registration algorithm will take odometry data; it's called Normal Distributions Transform.  That would be worth trying out.&lt;br /&gt;
* Further research on Euler angles and rotations in 3d space could be useful.  I'm not certain that what I did in my python script is without error.&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-06-15T19:30:54Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Registering pointclouds in ROS with PCL for [[Robot_Lab_(Spring_2012)]] =&lt;br /&gt;
Paths followed, lessons learned, code shared.&lt;br /&gt;
&lt;br /&gt;
== find some data ==&lt;br /&gt;
The data I used is dataset 14 at http://kos.informatik.uni-osnabrueck.de/3Dscans/&lt;br /&gt;
&lt;br /&gt;
My python script, publish_from_file.py, can be easily adjusted to read any similar format, wherein each line gives the coordinates for a point.  [http://en.wikipedia.org/wiki/PLY_(file_format) PLY] is another option; PLY pointclouds can be loaded and viewed in [http://meshlab.sourceforge.net/ Meshlab].&lt;br /&gt;
&lt;br /&gt;
I didn't write any code to read pcl files, but this is the format that the [http://pointclouds.org pointcloud library] reads and writes, so if you found some pcl data and like c++ that would also work.&lt;br /&gt;
&lt;br /&gt;
Ideally, it would be best to take your own data, then you know everything about it.  It turns out the better you know the data (how far did the robot move between images? what unit does your scanner use for measurements -- meters? pixels?) the better off you will be in fine-tuning the registration algorithms.&lt;br /&gt;
&lt;br /&gt;
== learn about registration ==&lt;br /&gt;
The pcl site has a lot of information.  I would recommend reading the introductory material on &lt;br /&gt;
&lt;br /&gt;
== try my scripts ==&lt;br /&gt;
&lt;br /&gt;
=== pose_registration ===&lt;br /&gt;
* http://www.euclideanspace.com/maths/geometry/space/coordinates/index.htm&lt;br /&gt;
&lt;br /&gt;
=== publish from file to ROS bus ===&lt;br /&gt;
&lt;br /&gt;
=== pointcloud registration ===&lt;br /&gt;
$ rosmake register_pointclouds&lt;br /&gt;
$ roscore&lt;br /&gt;
$ rosrun register_pointclouds register&lt;br /&gt;
$ &lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
Running the original data set through pointcloud registration only:&lt;br /&gt;
[[File:RegistrationOriginal.png|500px]] &lt;br /&gt;
&lt;br /&gt;
Running the data set through pose registration only:&lt;br /&gt;
&lt;br /&gt;
Running the data set through pose registration and then pointcloud registration:&lt;br /&gt;
[[File:RegistrationPrecomputed.png|500px]]&lt;br /&gt;
&lt;br /&gt;
== do something new ==&lt;br /&gt;
Working odometry into the registration process appears to be key.  It would be nice to figure out the best way to do it.&lt;br /&gt;
* I don't know whether / how it's possible to send odometry and pointclouds over the ROS bus and correlate them on the other side.  Do they need to be combined into a single message?  Can the callbacks on the two topics be tied together somehow?  It would be easier to start by skipping the ROS bus altogether and just reading in the pointcloud and omdometry data from file.&lt;br /&gt;
* A new version of pcl should be coming out any day now as I finish this quarter.  A new registration algorithm will take odometry data; it's called Normal Distributions Transform.  That would be worth trying out.&lt;br /&gt;
* Further research on Euler angles and rotations in 3d space could be useful.  I'm not certain that what I did in my python script is without error.&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-06-15T19:30:33Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Registering pointclouds in ROS with PCL for [[Robot_Lab_(Spring_2012)]] =&lt;br /&gt;
Paths followed, lessons learned, code shared.&lt;br /&gt;
&lt;br /&gt;
== find some data ==&lt;br /&gt;
The data I used is dataset 14 at http://kos.informatik.uni-osnabrueck.de/3Dscans/&lt;br /&gt;
&lt;br /&gt;
My python script, publish_from_file.py, can be easily adjusted to read any similar format, wherein each line gives the coordinates for a point.  [http://en.wikipedia.org/wiki/PLY_(file_format) PLY] is another option; PLY pointclouds can be loaded and viewed in [http://meshlab.sourceforge.net/ Meshlab].&lt;br /&gt;
&lt;br /&gt;
I didn't write any code to read pcl files, but this is the format that the [http://pointclouds.org pointcloud library] reads and writes, so if you found some pcl data and like c++ that would also work.&lt;br /&gt;
&lt;br /&gt;
Ideally, it would be best to take your own data, then you know everything about it.  It turns out the better you know the data (how far did the robot move between images? what unit does your scanner use for measurements -- meters? pixels?) the better off you will be in fine-tuning the registration algorithms.&lt;br /&gt;
&lt;br /&gt;
== learn about registration ==&lt;br /&gt;
The pcl site has a lot of information.  I would recommend reading the introductory material on &lt;br /&gt;
&lt;br /&gt;
== try my scripts ==&lt;br /&gt;
&lt;br /&gt;
=== pose_registration ===&lt;br /&gt;
* http://www.euclideanspace.com/maths/geometry/space/coordinates/index.htm&lt;br /&gt;
&lt;br /&gt;
=== publish from file to ROS bus ===&lt;br /&gt;
&lt;br /&gt;
=== pointcloud registration ===&lt;br /&gt;
$ rosmake register_pointclouds&lt;br /&gt;
$ roscore&lt;br /&gt;
$ rosrun register_pointclouds register&lt;br /&gt;
$ &lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
Running the original data set through pointcloud registration only:&lt;br /&gt;
[[File:RegistrationOriginal.png 500px]] &lt;br /&gt;
&lt;br /&gt;
Running the data set through pose registration only:&lt;br /&gt;
&lt;br /&gt;
Running the data set through pose registration and then pointcloud registration:&lt;br /&gt;
[[File:RegistrationPrecomputed.png 500px]]&lt;br /&gt;
&lt;br /&gt;
== do something new ==&lt;br /&gt;
Working odometry into the registration process appears to be key.  It would be nice to figure out the best way to do it.&lt;br /&gt;
* I don't know whether / how it's possible to send odometry and pointclouds over the ROS bus and correlate them on the other side.  Do they need to be combined into a single message?  Can the callbacks on the two topics be tied together somehow?  It would be easier to start by skipping the ROS bus altogether and just reading in the pointcloud and omdometry data from file.&lt;br /&gt;
* A new version of pcl should be coming out any day now as I finish this quarter.  A new registration algorithm will take odometry data; it's called Normal Distributions Transform.  That would be worth trying out.&lt;br /&gt;
* Further research on Euler angles and rotations in 3d space could be useful.  I'm not certain that what I did in my python script is without error.&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-06-15T19:27:56Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Registering pointclouds in ROS with PCL for [[Robot_Lab_(Spring_2012)]] =&lt;br /&gt;
Paths followed, lessons learned, code shared.&lt;br /&gt;
&lt;br /&gt;
== find some data ==&lt;br /&gt;
The data I used is dataset 14 at http://kos.informatik.uni-osnabrueck.de/3Dscans/&lt;br /&gt;
&lt;br /&gt;
My python script, publish_from_file.py, can be easily adjusted to read any similar format, wherein each line gives the coordinates for a point.  [http://en.wikipedia.org/wiki/PLY_(file_format) PLY] is another option; PLY pointclouds can be loaded and viewed in [http://meshlab.sourceforge.net/ Meshlab].&lt;br /&gt;
&lt;br /&gt;
I didn't write any code to read pcl files, but this is the format that the [http://pointclouds.org pointcloud library] reads and writes, so if you found some pcl data and like c++ that would also work.&lt;br /&gt;
&lt;br /&gt;
Ideally, it would be best to take your own data, then you know everything about it.  It turns out the better you know the data (how far did the robot move between images? what unit does your scanner use for measurements -- meters? pixels?) the better off you will be in fine-tuning the registration algorithms.&lt;br /&gt;
&lt;br /&gt;
== learn about registration ==&lt;br /&gt;
The pcl site has a lot of information.  I would recommend reading the introductory material on &lt;br /&gt;
&lt;br /&gt;
== try my scripts ==&lt;br /&gt;
&lt;br /&gt;
=== pose_registration ===&lt;br /&gt;
* http://www.euclideanspace.com/maths/geometry/space/coordinates/index.htm&lt;br /&gt;
&lt;br /&gt;
=== publish from file to ROS bus ===&lt;br /&gt;
&lt;br /&gt;
=== pointcloud registration ===&lt;br /&gt;
$ rosmake register_pointclouds&lt;br /&gt;
$ roscore&lt;br /&gt;
$ rosrun register_pointclouds register&lt;br /&gt;
$ &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:RegistrationOriginal.png]] [[File:RegistrationPrecomputed.png]]&lt;br /&gt;
&lt;br /&gt;
== do something new ==&lt;br /&gt;
Working odometry into the registration process appears to be key.  It would be nice to figure out the best way to do it.&lt;br /&gt;
* I don't know whether / how it's possible to send odometry and pointclouds over the ROS bus and correlate them on the other side.  Do they need to be combined into a single message?  Can the callbacks on the two topics be tied together somehow?  It would be easier to start by skipping the ROS bus altogether and just reading in the pointcloud and omdometry data from file.&lt;br /&gt;
* A new version of pcl should be coming out any day now as I finish this quarter.  A new registration algorithm will take odometry data; it's called Normal Distributions Transform.  That would be worth trying out.&lt;br /&gt;
* Further research on Euler angles and rotations in 3d space could be useful.  I'm not certain that what I did in my python script is without error.&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/File:RegistrationPrecomputed.png</id>
		<title>File:RegistrationPrecomputed.png</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/File:RegistrationPrecomputed.png"/>
				<updated>2012-06-15T19:27:31Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: Screenshot of pointclouds that were first transformed according to odometry data, then registered with registration script.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Screenshot of pointclouds that were first transformed according to odometry data, then registered with registration script.&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-06-15T19:26:24Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Registering pointclouds in ROS with PCL for [[Robot_Lab_(Spring_2012)]] =&lt;br /&gt;
Paths followed, lessons learned, code shared.&lt;br /&gt;
&lt;br /&gt;
== find some data ==&lt;br /&gt;
The data I used is dataset 14 at http://kos.informatik.uni-osnabrueck.de/3Dscans/&lt;br /&gt;
&lt;br /&gt;
My python script, publish_from_file.py, can be easily adjusted to read any similar format, wherein each line gives the coordinates for a point.  [http://en.wikipedia.org/wiki/PLY_(file_format) PLY] is another option; PLY pointclouds can be loaded and viewed in [http://meshlab.sourceforge.net/ Meshlab].&lt;br /&gt;
&lt;br /&gt;
I didn't write any code to read pcl files, but this is the format that the [http://pointclouds.org pointcloud library] reads and writes, so if you found some pcl data and like c++ that would also work.&lt;br /&gt;
&lt;br /&gt;
Ideally, it would be best to take your own data, then you know everything about it.  It turns out the better you know the data (how far did the robot move between images? what unit does your scanner use for measurements -- meters? pixels?) the better off you will be in fine-tuning the registration algorithms.&lt;br /&gt;
&lt;br /&gt;
== learn about registration ==&lt;br /&gt;
The pcl site has a lot of information.  I would recommend reading the introductory material on &lt;br /&gt;
&lt;br /&gt;
== try my scripts ==&lt;br /&gt;
&lt;br /&gt;
=== pose_registration ===&lt;br /&gt;
* http://www.euclideanspace.com/maths/geometry/space/coordinates/index.htm&lt;br /&gt;
&lt;br /&gt;
=== publish from file to ROS bus ===&lt;br /&gt;
&lt;br /&gt;
=== pointcloud registration ===&lt;br /&gt;
$ rosmake register_pointclouds&lt;br /&gt;
$ roscore&lt;br /&gt;
$ rosrun register_pointclouds register&lt;br /&gt;
$ &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[File:RegistrationOriginal.png]&lt;br /&gt;
&lt;br /&gt;
== do something new ==&lt;br /&gt;
Working odometry into the registration process appears to be key.  It would be nice to figure out the best way to do it.&lt;br /&gt;
* I don't know whether / how it's possible to send odometry and pointclouds over the ROS bus and correlate them on the other side.  Do they need to be combined into a single message?  Can the callbacks on the two topics be tied together somehow?  It would be easier to start by skipping the ROS bus altogether and just reading in the pointcloud and omdometry data from file.&lt;br /&gt;
* A new version of pcl should be coming out any day now as I finish this quarter.  A new registration algorithm will take odometry data; it's called Normal Distributions Transform.  That would be worth trying out.&lt;br /&gt;
* Further research on Euler angles and rotations in 3d space could be useful.  I'm not certain that what I did in my python script is without error.&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/File:RegistrationOriginal.png</id>
		<title>File:RegistrationOriginal.png</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/File:RegistrationOriginal.png"/>
				<updated>2012-06-15T19:25:52Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: Screenshot of pointcloud registration script on unmodified data set&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Screenshot of pointcloud registration script on unmodified data set&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-06-15T19:21:42Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Registering pointclouds in ROS with PCL for [[Robot_Lab_(Spring_2012)]] =&lt;br /&gt;
Paths followed, lessons learned, code shared.&lt;br /&gt;
&lt;br /&gt;
== find some data ==&lt;br /&gt;
The data I used is dataset 14 at http://kos.informatik.uni-osnabrueck.de/3Dscans/&lt;br /&gt;
&lt;br /&gt;
My python script, publish_from_file.py, can be easily adjusted to read any similar format, wherein each line gives the coordinates for a point.  [http://en.wikipedia.org/wiki/PLY_(file_format) PLY] is another option; PLY pointclouds can be loaded and viewed in [http://meshlab.sourceforge.net/ Meshlab].&lt;br /&gt;
&lt;br /&gt;
I didn't write any code to read pcl files, but this is the format that the [http://pointclouds.org pointcloud library] reads and writes, so if you found some pcl data and like c++ that would also work.&lt;br /&gt;
&lt;br /&gt;
Ideally, it would be best to take your own data, then you know everything about it.  It turns out the better you know the data (how far did the robot move between images? what unit does your scanner use for measurements -- meters? pixels?) the better off you will be in fine-tuning the registration algorithms.&lt;br /&gt;
&lt;br /&gt;
== learn about registration ==&lt;br /&gt;
The pcl site has a lot of information.  I would recommend reading the introductory material on &lt;br /&gt;
&lt;br /&gt;
== try my scripts ==&lt;br /&gt;
&lt;br /&gt;
=== pose_registration ===&lt;br /&gt;
* http://www.euclideanspace.com/maths/geometry/space/coordinates/index.htm&lt;br /&gt;
&lt;br /&gt;
=== publish from file to ROS bus ===&lt;br /&gt;
&lt;br /&gt;
=== pointcloud registration ===&lt;br /&gt;
$ rosmake register_pointclouds&lt;br /&gt;
$ roscore&lt;br /&gt;
$ rosrun register_pointclouds register&lt;br /&gt;
$ &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== do something new ==&lt;br /&gt;
Working odometry into the registration process appears to be key.  It would be nice to figure out the best way to do it.&lt;br /&gt;
* I don't know whether / how it's possible to send odometry and pointclouds over the ROS bus and correlate them on the other side.  Do they need to be combined into a single message?  Can the callbacks on the two topics be tied together somehow?  It would be easier to start by skipping the ROS bus altogether and just reading in the pointcloud and omdometry data from file.&lt;br /&gt;
* A new version of pcl should be coming out any day now as I finish this quarter.  A new registration algorithm will take odometry data; it's called Normal Distributions Transform.  That would be worth trying out.&lt;br /&gt;
* Further research on Euler angles and rotations in 3d space could be useful.  I'm not certain that what I did in my python script is without error.&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-06-15T19:21:32Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Registering pointclouds in ROS with PCL for [[Robot_Lab_(Spring_2012)]] =&lt;br /&gt;
Paths followed, lessons learned, and code shared.&lt;br /&gt;
&lt;br /&gt;
== find some data ==&lt;br /&gt;
The data I used is dataset 14 at http://kos.informatik.uni-osnabrueck.de/3Dscans/&lt;br /&gt;
&lt;br /&gt;
My python script, publish_from_file.py, can be easily adjusted to read any similar format, wherein each line gives the coordinates for a point.  [http://en.wikipedia.org/wiki/PLY_(file_format) PLY] is another option; PLY pointclouds can be loaded and viewed in [http://meshlab.sourceforge.net/ Meshlab].&lt;br /&gt;
&lt;br /&gt;
I didn't write any code to read pcl files, but this is the format that the [http://pointclouds.org pointcloud library] reads and writes, so if you found some pcl data and like c++ that would also work.&lt;br /&gt;
&lt;br /&gt;
Ideally, it would be best to take your own data, then you know everything about it.  It turns out the better you know the data (how far did the robot move between images? what unit does your scanner use for measurements -- meters? pixels?) the better off you will be in fine-tuning the registration algorithms.&lt;br /&gt;
&lt;br /&gt;
== learn about registration ==&lt;br /&gt;
The pcl site has a lot of information.  I would recommend reading the introductory material on &lt;br /&gt;
&lt;br /&gt;
== try my scripts ==&lt;br /&gt;
&lt;br /&gt;
=== pose_registration ===&lt;br /&gt;
* http://www.euclideanspace.com/maths/geometry/space/coordinates/index.htm&lt;br /&gt;
&lt;br /&gt;
=== publish from file to ROS bus ===&lt;br /&gt;
&lt;br /&gt;
=== pointcloud registration ===&lt;br /&gt;
$ rosmake register_pointclouds&lt;br /&gt;
$ roscore&lt;br /&gt;
$ rosrun register_pointclouds register&lt;br /&gt;
$ &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== do something new ==&lt;br /&gt;
Working odometry into the registration process appears to be key.  It would be nice to figure out the best way to do it.&lt;br /&gt;
* I don't know whether / how it's possible to send odometry and pointclouds over the ROS bus and correlate them on the other side.  Do they need to be combined into a single message?  Can the callbacks on the two topics be tied together somehow?  It would be easier to start by skipping the ROS bus altogether and just reading in the pointcloud and omdometry data from file.&lt;br /&gt;
* A new version of pcl should be coming out any day now as I finish this quarter.  A new registration algorithm will take odometry data; it's called Normal Distributions Transform.  That would be worth trying out.&lt;br /&gt;
* Further research on Euler angles and rotations in 3d space could be useful.  I'm not certain that what I did in my python script is without error.&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-06-15T19:20:49Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Registering pointclouds in ROS with PCL for [[Robot_Lab_(Spring_2012)]] =&lt;br /&gt;
&lt;br /&gt;
== find some data ==&lt;br /&gt;
The data I used is dataset 14 at http://kos.informatik.uni-osnabrueck.de/3Dscans/&lt;br /&gt;
&lt;br /&gt;
My python script, publish_from_file.py, can be easily adjusted to read any similar format, wherein each line gives the coordinates for a point.  [http://en.wikipedia.org/wiki/PLY_(file_format) PLY] is another option; PLY pointclouds can be loaded and viewed in [http://meshlab.sourceforge.net/ Meshlab].&lt;br /&gt;
&lt;br /&gt;
I didn't write any code to read pcl files, but this is the format that the [http://pointclouds.org pointcloud library] reads and writes, so if you found some pcl data and like c++ that would also work.&lt;br /&gt;
&lt;br /&gt;
Ideally, it would be best to take your own data, then you know everything about it.  It turns out the better you know the data (how far did the robot move between images? what unit does your scanner use for measurements -- meters? pixels?) the better off you will be in fine-tuning the registration algorithms.&lt;br /&gt;
&lt;br /&gt;
== learn about registration ==&lt;br /&gt;
The pcl site has a lot of information.  I would recommend reading the introductory material on &lt;br /&gt;
&lt;br /&gt;
== try my scripts ==&lt;br /&gt;
&lt;br /&gt;
=== pose_registration ===&lt;br /&gt;
* http://www.euclideanspace.com/maths/geometry/space/coordinates/index.htm&lt;br /&gt;
&lt;br /&gt;
=== publish from file to ROS bus ===&lt;br /&gt;
&lt;br /&gt;
=== pointcloud registration ===&lt;br /&gt;
$ rosmake register_pointclouds&lt;br /&gt;
$ roscore&lt;br /&gt;
$ rosrun register_pointclouds register&lt;br /&gt;
$ &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== do something new ==&lt;br /&gt;
Working odometry into the registration process appears to be key.  It would be nice to figure out the best way to do it.&lt;br /&gt;
* I don't know whether / how it's possible to send odometry and pointclouds over the ROS bus and correlate them on the other side.  Do they need to be combined into a single message?  Can the callbacks on the two topics be tied together somehow?  It would be easier to start by skipping the ROS bus altogether and just reading in the pointcloud and omdometry data from file.&lt;br /&gt;
* A new version of pcl should be coming out any day now as I finish this quarter.  A new registration algorithm will take odometry data; it's called Normal Distributions Transform.  That would be worth trying out.&lt;br /&gt;
* Further research on Euler angles and rotations in 3d space could be useful.  I'm not certain that what I did in my python script is without error.&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-06-15T19:16:40Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Registering pointclouds in ROS with PCL for [[Robot_Lab_(Spring_2012)]] =&lt;br /&gt;
&lt;br /&gt;
== find some data ==&lt;br /&gt;
The data I used is dataset 14 at http://kos.informatik.uni-osnabrueck.de/3Dscans/&lt;br /&gt;
&lt;br /&gt;
My python script, publish_from_file.py, can be easily adjusted to read any similar format, wherein each line gives the coordinates for a point.  [http://en.wikipedia.org/wiki/PLY_(file_format) PLY] is another option; PLY pointclouds can be loaded and viewed in [http://meshlab.sourceforge.net/ Meshlab].&lt;br /&gt;
&lt;br /&gt;
I didn't write any code to read pcl files, but this is the format that the [http://pointclouds.org pointcloud library] reads and writes, so if you found some pcl data and like c++ that would also work.&lt;br /&gt;
&lt;br /&gt;
Ideally, it would be best to take your own data, then you know everything about it.  It turns out the better you know the data (how far did the robot move between images? what unit does your scanner use for measurements -- meters? pixels?) the better off you will be in fine-tuning the registration algorithms.&lt;br /&gt;
&lt;br /&gt;
== learn about registration ==&lt;br /&gt;
The pcl site has a lot of information.  I would recommend reading the introductory material on &lt;br /&gt;
&lt;br /&gt;
== pointcloud registration ==&lt;br /&gt;
$ rosmake register_pointclouds&lt;br /&gt;
$ roscore&lt;br /&gt;
$ rosrun register_pointclouds register&lt;br /&gt;
$ &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== tbd ==&lt;br /&gt;
* can rosparams be set in a config file somewhere and auto-loaded?&lt;br /&gt;
* it seems the /map frame in rviz is different from the /map topic?  because rviz can't find the /map frame even when the /map topic is being published.&lt;br /&gt;
&lt;br /&gt;
== rviz view controls ==&lt;br /&gt;
* regular click: rotate the view&lt;br /&gt;
* shift-click: move the view or focal point&lt;br /&gt;
* host click / scroll: zoom&lt;br /&gt;
&lt;br /&gt;
== create a map from log data and watch it on rviz ==&lt;br /&gt;
 $ roscore&lt;br /&gt;
 $ rosparam set use_sim_time true&lt;br /&gt;
 $ rosrun rviz rviz&lt;br /&gt;
 # make sure map is checked and subscribed to topic /map&lt;br /&gt;
 $ rosrun gmapping slam_gmapping scan:=base_scan&lt;br /&gt;
 $ rosbag play ~/ros/gmap_tester.bag&lt;br /&gt;
 $ rosrun map_server map_saver&lt;br /&gt;
&lt;br /&gt;
== topics ==&lt;br /&gt;
* gmapping: &lt;br /&gt;
** /base_scan&lt;br /&gt;
** /clock&lt;br /&gt;
** /map&lt;br /&gt;
** /map_metadata&lt;br /&gt;
** /slam_gmapping/entropy&lt;br /&gt;
** /tf&lt;br /&gt;
&lt;br /&gt;
== registration ==&lt;br /&gt;
* http://www.euclideanspace.com/maths/geometry/space/coordinates/index.htm&lt;br /&gt;
&lt;br /&gt;
== mapping from point clouds ==&lt;br /&gt;
* http://kos.informatik.uni-osnabrueck.de/3Dscans/&lt;br /&gt;
* http://www.ros.org/wiki/pointcloud_registration&lt;br /&gt;
* http://www.ros.org/wiki/pointcloud_to_laserscan&lt;br /&gt;
* https://code.ros.org/trac/wg-ros-pkg/browser/stacks/object_manipulation/branches/hri12/object_manipulator/src/object_manipulator/point_cloud.py?rev=52799&lt;br /&gt;
* https://code.ros.org/trac/wg-ros-pkg/browser/stacks/object_manipulation/branches/hri12/object_manipulator/src/object_manipulator/convert_functions.py?rev=52799&lt;br /&gt;
&lt;br /&gt;
== future work ==&lt;br /&gt;
Working odometry into the registration process appears to be key.  It would be nice to figure out the best way to do it.&lt;br /&gt;
* I don't know whether / how it's possible to send odometry and pointclouds over the ROS bus and correlate them on the other side.  Do they need to be combined into a single message?  Can the callbacks on the two topics be tied together somehow?  It would be easier to start by skipping the ROS bus altogether and just reading in the pointcloud and omdometry data from file.&lt;br /&gt;
* A new version of pcl should be coming out any day now as I finish this quarter.  A new registration algorithm will take odometry data; it's called Normal Distributions Transform.  That would be worth trying out.&lt;br /&gt;
* Further research on Euler angles and rotations in 3d space could be useful.  I'm not certain that what I did in my python script is without error.&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-06-15T19:04:25Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Registering pointclouds in ROS with PCL for [[Robot_Lab_(Spring_2012)]] =&lt;br /&gt;
&lt;br /&gt;
== find some data ==&lt;br /&gt;
The data I used is dataset 14 at http://kos.informatik.uni-osnabrueck.de/3Dscans/&lt;br /&gt;
&lt;br /&gt;
My python script, publish_from_file.py, can be easily adjusted to read any similar format, wherein each line gives the coordinates for a point.  [http://en.wikipedia.org/wiki/PLY_(file_format) PLY] is another option; PLY pointclouds can be loaded and viewed in [http://meshlab.sourceforge.net/ Meshlab].&lt;br /&gt;
&lt;br /&gt;
I didn't write any code to read pcl files, but this is the format that the [http://pointclouds.org pointcloud library] reads and writes, so if you found some pcl data and like c++ that would also work.&lt;br /&gt;
&lt;br /&gt;
== pointcloud registration ==&lt;br /&gt;
$ rosmake register_pointclouds&lt;br /&gt;
$ roscore&lt;br /&gt;
$ rosrun register_pointclouds register&lt;br /&gt;
$ &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== tbd ==&lt;br /&gt;
* can rosparams be set in a config file somewhere and auto-loaded?&lt;br /&gt;
* it seems the /map frame in rviz is different from the /map topic?  because rviz can't find the /map frame even when the /map topic is being published.&lt;br /&gt;
&lt;br /&gt;
== rviz view controls ==&lt;br /&gt;
* regular click: rotate the view&lt;br /&gt;
* shift-click: move the view or focal point&lt;br /&gt;
* host click / scroll: zoom&lt;br /&gt;
&lt;br /&gt;
== create a map from log data and watch it on rviz ==&lt;br /&gt;
 $ roscore&lt;br /&gt;
 $ rosparam set use_sim_time true&lt;br /&gt;
 $ rosrun rviz rviz&lt;br /&gt;
 # make sure map is checked and subscribed to topic /map&lt;br /&gt;
 $ rosrun gmapping slam_gmapping scan:=base_scan&lt;br /&gt;
 $ rosbag play ~/ros/gmap_tester.bag&lt;br /&gt;
 $ rosrun map_server map_saver&lt;br /&gt;
&lt;br /&gt;
== topics ==&lt;br /&gt;
* gmapping: &lt;br /&gt;
** /base_scan&lt;br /&gt;
** /clock&lt;br /&gt;
** /map&lt;br /&gt;
** /map_metadata&lt;br /&gt;
** /slam_gmapping/entropy&lt;br /&gt;
** /tf&lt;br /&gt;
&lt;br /&gt;
== registration ==&lt;br /&gt;
* http://www.euclideanspace.com/maths/geometry/space/coordinates/index.htm&lt;br /&gt;
&lt;br /&gt;
== mapping from point clouds ==&lt;br /&gt;
* http://kos.informatik.uni-osnabrueck.de/3Dscans/&lt;br /&gt;
* http://www.ros.org/wiki/pointcloud_registration&lt;br /&gt;
* http://www.ros.org/wiki/pointcloud_to_laserscan&lt;br /&gt;
* https://code.ros.org/trac/wg-ros-pkg/browser/stacks/object_manipulation/branches/hri12/object_manipulator/src/object_manipulator/point_cloud.py?rev=52799&lt;br /&gt;
* https://code.ros.org/trac/wg-ros-pkg/browser/stacks/object_manipulation/branches/hri12/object_manipulator/src/object_manipulator/convert_functions.py?rev=52799&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-06-15T18:58:58Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Registering pointclouds in ROS with PCL for [[Robot_Lab_(Spring_2012)]] =&lt;br /&gt;
&lt;br /&gt;
== find some data ==&lt;br /&gt;
The data I used is dataset 14 at http://kos.informatik.uni-osnabrueck.de/3Dscans/&lt;br /&gt;
&lt;br /&gt;
== pointcloud registration ==&lt;br /&gt;
$ rosmake register_pointclouds&lt;br /&gt;
$ roscore&lt;br /&gt;
$ rosrun register_pointclouds register&lt;br /&gt;
$ &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== tbd ==&lt;br /&gt;
* can rosparams be set in a config file somewhere and auto-loaded?&lt;br /&gt;
* it seems the /map frame in rviz is different from the /map topic?  because rviz can't find the /map frame even when the /map topic is being published.&lt;br /&gt;
&lt;br /&gt;
== rviz view controls ==&lt;br /&gt;
* regular click: rotate the view&lt;br /&gt;
* shift-click: move the view or focal point&lt;br /&gt;
* host click / scroll: zoom&lt;br /&gt;
&lt;br /&gt;
== create a map from log data and watch it on rviz ==&lt;br /&gt;
 $ roscore&lt;br /&gt;
 $ rosparam set use_sim_time true&lt;br /&gt;
 $ rosrun rviz rviz&lt;br /&gt;
 # make sure map is checked and subscribed to topic /map&lt;br /&gt;
 $ rosrun gmapping slam_gmapping scan:=base_scan&lt;br /&gt;
 $ rosbag play ~/ros/gmap_tester.bag&lt;br /&gt;
 $ rosrun map_server map_saver&lt;br /&gt;
&lt;br /&gt;
== topics ==&lt;br /&gt;
* gmapping: &lt;br /&gt;
** /base_scan&lt;br /&gt;
** /clock&lt;br /&gt;
** /map&lt;br /&gt;
** /map_metadata&lt;br /&gt;
** /slam_gmapping/entropy&lt;br /&gt;
** /tf&lt;br /&gt;
&lt;br /&gt;
== registration ==&lt;br /&gt;
* http://www.euclideanspace.com/maths/geometry/space/coordinates/index.htm&lt;br /&gt;
&lt;br /&gt;
== mapping from point clouds ==&lt;br /&gt;
* http://kos.informatik.uni-osnabrueck.de/3Dscans/&lt;br /&gt;
* http://www.ros.org/wiki/pointcloud_registration&lt;br /&gt;
* http://www.ros.org/wiki/pointcloud_to_laserscan&lt;br /&gt;
* https://code.ros.org/trac/wg-ros-pkg/browser/stacks/object_manipulation/branches/hri12/object_manipulator/src/object_manipulator/point_cloud.py?rev=52799&lt;br /&gt;
* https://code.ros.org/trac/wg-ros-pkg/browser/stacks/object_manipulation/branches/hri12/object_manipulator/src/object_manipulator/convert_functions.py?rev=52799&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-06-15T18:57:27Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Registering pointclouds in ROS with PCL for [[Robot_Lab_(Spring_2012)]] =&lt;br /&gt;
&lt;br /&gt;
== pointcloud registration ==&lt;br /&gt;
$ rosmake register_pointclouds&lt;br /&gt;
$ roscore&lt;br /&gt;
$ rosrun register_pointclouds register&lt;br /&gt;
$ &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== tbd ==&lt;br /&gt;
* can rosparams be set in a config file somewhere and auto-loaded?&lt;br /&gt;
* it seems the /map frame in rviz is different from the /map topic?  because rviz can't find the /map frame even when the /map topic is being published.&lt;br /&gt;
&lt;br /&gt;
== rviz view controls ==&lt;br /&gt;
* regular click: rotate the view&lt;br /&gt;
* shift-click: move the view or focal point&lt;br /&gt;
* host click / scroll: zoom&lt;br /&gt;
&lt;br /&gt;
== create a map from log data and watch it on rviz ==&lt;br /&gt;
 $ roscore&lt;br /&gt;
 $ rosparam set use_sim_time true&lt;br /&gt;
 $ rosrun rviz rviz&lt;br /&gt;
 # make sure map is checked and subscribed to topic /map&lt;br /&gt;
 $ rosrun gmapping slam_gmapping scan:=base_scan&lt;br /&gt;
 $ rosbag play ~/ros/gmap_tester.bag&lt;br /&gt;
 $ rosrun map_server map_saver&lt;br /&gt;
&lt;br /&gt;
== topics ==&lt;br /&gt;
* gmapping: &lt;br /&gt;
** /base_scan&lt;br /&gt;
** /clock&lt;br /&gt;
** /map&lt;br /&gt;
** /map_metadata&lt;br /&gt;
** /slam_gmapping/entropy&lt;br /&gt;
** /tf&lt;br /&gt;
&lt;br /&gt;
== registration ==&lt;br /&gt;
* http://www.euclideanspace.com/maths/geometry/space/coordinates/index.htm&lt;br /&gt;
&lt;br /&gt;
== mapping from point clouds ==&lt;br /&gt;
* http://kos.informatik.uni-osnabrueck.de/3Dscans/&lt;br /&gt;
* http://www.ros.org/wiki/pointcloud_registration&lt;br /&gt;
* http://www.ros.org/wiki/pointcloud_to_laserscan&lt;br /&gt;
* https://code.ros.org/trac/wg-ros-pkg/browser/stacks/object_manipulation/branches/hri12/object_manipulator/src/object_manipulator/point_cloud.py?rev=52799&lt;br /&gt;
* https://code.ros.org/trac/wg-ros-pkg/browser/stacks/object_manipulation/branches/hri12/object_manipulator/src/object_manipulator/convert_functions.py?rev=52799&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-06-14T02:03:09Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;robot notes for anna by anna&lt;br /&gt;
&lt;br /&gt;
== pages ==&lt;br /&gt;
* [[Robot_Lab_(Spring_2012)]]&lt;br /&gt;
* [[ROS_(Robot_Operating_System)]]&lt;br /&gt;
* [[Navigation]]&lt;br /&gt;
&lt;br /&gt;
== pointcloud registration ==&lt;br /&gt;
$ rosmake register_pointclouds&lt;br /&gt;
$ roscore&lt;br /&gt;
$ rosrun register_pointclouds register&lt;br /&gt;
$ &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== tbd ==&lt;br /&gt;
* can rosparams be set in a config file somewhere and auto-loaded?&lt;br /&gt;
* it seems the /map frame in rviz is different from the /map topic?  because rviz can't find the /map frame even when the /map topic is being published.&lt;br /&gt;
&lt;br /&gt;
== rviz view controls ==&lt;br /&gt;
* regular click: rotate the view&lt;br /&gt;
* shift-click: move the view or focal point&lt;br /&gt;
* host click / scroll: zoom&lt;br /&gt;
&lt;br /&gt;
== create a map from log data and watch it on rviz ==&lt;br /&gt;
 $ roscore&lt;br /&gt;
 $ rosparam set use_sim_time true&lt;br /&gt;
 $ rosrun rviz rviz&lt;br /&gt;
 # make sure map is checked and subscribed to topic /map&lt;br /&gt;
 $ rosrun gmapping slam_gmapping scan:=base_scan&lt;br /&gt;
 $ rosbag play ~/ros/gmap_tester.bag&lt;br /&gt;
 $ rosrun map_server map_saver&lt;br /&gt;
&lt;br /&gt;
== topics ==&lt;br /&gt;
* gmapping: &lt;br /&gt;
** /base_scan&lt;br /&gt;
** /clock&lt;br /&gt;
** /map&lt;br /&gt;
** /map_metadata&lt;br /&gt;
** /slam_gmapping/entropy&lt;br /&gt;
** /tf&lt;br /&gt;
&lt;br /&gt;
== registration ==&lt;br /&gt;
* http://www.euclideanspace.com/maths/geometry/space/coordinates/index.htm&lt;br /&gt;
&lt;br /&gt;
== mapping from point clouds ==&lt;br /&gt;
* http://kos.informatik.uni-osnabrueck.de/3Dscans/&lt;br /&gt;
* http://www.ros.org/wiki/pointcloud_registration&lt;br /&gt;
* http://www.ros.org/wiki/pointcloud_to_laserscan&lt;br /&gt;
* https://code.ros.org/trac/wg-ros-pkg/browser/stacks/object_manipulation/branches/hri12/object_manipulator/src/object_manipulator/point_cloud.py?rev=52799&lt;br /&gt;
* https://code.ros.org/trac/wg-ros-pkg/browser/stacks/object_manipulation/branches/hri12/object_manipulator/src/object_manipulator/convert_functions.py?rev=52799&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-06-07T21:58:13Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;robot notes for anna by anna&lt;br /&gt;
&lt;br /&gt;
== pages ==&lt;br /&gt;
* [[Robot_Lab_(Spring_2012)]]&lt;br /&gt;
* [[ROS_(Robot_Operating_System)]]&lt;br /&gt;
* [[Navigation]]&lt;br /&gt;
&lt;br /&gt;
== tbd ==&lt;br /&gt;
* can rosparams be set in a config file somewhere and auto-loaded?&lt;br /&gt;
* it seems the /map frame in rviz is different from the /map topic?  because rviz can't find the /map frame even when the /map topic is being published.&lt;br /&gt;
&lt;br /&gt;
== rviz view controls ==&lt;br /&gt;
* regular click: rotate the view&lt;br /&gt;
* shift-click: move the view or focal point&lt;br /&gt;
* host click / scroll: zoom&lt;br /&gt;
&lt;br /&gt;
== create a map from log data and watch it on rviz ==&lt;br /&gt;
 $ roscore&lt;br /&gt;
 $ rosparam set use_sim_time true&lt;br /&gt;
 $ rosrun rviz rviz&lt;br /&gt;
 # make sure map is checked and subscribed to topic /map&lt;br /&gt;
 $ rosrun gmapping slam_gmapping scan:=base_scan&lt;br /&gt;
 $ rosbag play ~/ros/gmap_tester.bag&lt;br /&gt;
 $ rosrun map_server map_saver&lt;br /&gt;
&lt;br /&gt;
== topics ==&lt;br /&gt;
* gmapping: &lt;br /&gt;
** /base_scan&lt;br /&gt;
** /clock&lt;br /&gt;
** /map&lt;br /&gt;
** /map_metadata&lt;br /&gt;
** /slam_gmapping/entropy&lt;br /&gt;
** /tf&lt;br /&gt;
&lt;br /&gt;
== registration ==&lt;br /&gt;
* http://www.euclideanspace.com/maths/geometry/space/coordinates/index.htm&lt;br /&gt;
&lt;br /&gt;
== mapping from point clouds ==&lt;br /&gt;
* http://kos.informatik.uni-osnabrueck.de/3Dscans/&lt;br /&gt;
* http://www.ros.org/wiki/pointcloud_registration&lt;br /&gt;
* http://www.ros.org/wiki/pointcloud_to_laserscan&lt;br /&gt;
* https://code.ros.org/trac/wg-ros-pkg/browser/stacks/object_manipulation/branches/hri12/object_manipulator/src/object_manipulator/point_cloud.py?rev=52799&lt;br /&gt;
* https://code.ros.org/trac/wg-ros-pkg/browser/stacks/object_manipulation/branches/hri12/object_manipulator/src/object_manipulator/convert_functions.py?rev=52799&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-05-08T23:37:46Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: /* mapping from point clouds */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;robot notes for anna by anna&lt;br /&gt;
&lt;br /&gt;
== pages ==&lt;br /&gt;
* [[Robot_Lab_(Spring_2012)]]&lt;br /&gt;
* [[ROS_(Robot_Operating_System)]]&lt;br /&gt;
* [[Navigation]]&lt;br /&gt;
&lt;br /&gt;
== tbd ==&lt;br /&gt;
* can rosparams be set in a config file somewhere and auto-loaded?&lt;br /&gt;
* it seems the /map frame in rviz is different from the /map topic?  because rviz can't find the /map frame even when the /map topic is being published.&lt;br /&gt;
&lt;br /&gt;
== rviz view controls ==&lt;br /&gt;
* regular click: rotate the view&lt;br /&gt;
* shift-click: move the view or focal point&lt;br /&gt;
* host click / scroll: zoom&lt;br /&gt;
&lt;br /&gt;
== create a map from log data and watch it on rviz ==&lt;br /&gt;
 $ roscore&lt;br /&gt;
 $ rosparam set use_sim_time true&lt;br /&gt;
 $ rosrun rviz rviz&lt;br /&gt;
 # make sure map is checked and subscribed to topic /map&lt;br /&gt;
 $ rosrun gmapping slam_gmapping scan:=base_scan&lt;br /&gt;
 $ rosbag play ~/ros/gmap_tester.bag&lt;br /&gt;
 $ rosrun map_server map_saver&lt;br /&gt;
&lt;br /&gt;
== topics ==&lt;br /&gt;
* gmapping: &lt;br /&gt;
** /base_scan&lt;br /&gt;
** /clock&lt;br /&gt;
** /map&lt;br /&gt;
** /map_metadata&lt;br /&gt;
** /slam_gmapping/entropy&lt;br /&gt;
** /tf&lt;br /&gt;
&lt;br /&gt;
== mapping from point clouds ==&lt;br /&gt;
* http://kos.informatik.uni-osnabrueck.de/3Dscans/&lt;br /&gt;
* http://www.ros.org/wiki/pointcloud_registration&lt;br /&gt;
* http://www.ros.org/wiki/pointcloud_to_laserscan&lt;br /&gt;
* https://code.ros.org/trac/wg-ros-pkg/browser/stacks/object_manipulation/branches/hri12/object_manipulator/src/object_manipulator/point_cloud.py?rev=52799&lt;br /&gt;
* https://code.ros.org/trac/wg-ros-pkg/browser/stacks/object_manipulation/branches/hri12/object_manipulator/src/object_manipulator/convert_functions.py?rev=52799&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-05-05T18:27:23Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: /* mapping from point clouds */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;robot notes for anna by anna&lt;br /&gt;
&lt;br /&gt;
== pages ==&lt;br /&gt;
* [[Robot_Lab_(Spring_2012)]]&lt;br /&gt;
* [[ROS_(Robot_Operating_System)]]&lt;br /&gt;
* [[Navigation]]&lt;br /&gt;
&lt;br /&gt;
== tbd ==&lt;br /&gt;
* can rosparams be set in a config file somewhere and auto-loaded?&lt;br /&gt;
* it seems the /map frame in rviz is different from the /map topic?  because rviz can't find the /map frame even when the /map topic is being published.&lt;br /&gt;
&lt;br /&gt;
== rviz view controls ==&lt;br /&gt;
* regular click: rotate the view&lt;br /&gt;
* shift-click: move the view or focal point&lt;br /&gt;
* host click / scroll: zoom&lt;br /&gt;
&lt;br /&gt;
== create a map from log data and watch it on rviz ==&lt;br /&gt;
 $ roscore&lt;br /&gt;
 $ rosparam set use_sim_time true&lt;br /&gt;
 $ rosrun rviz rviz&lt;br /&gt;
 # make sure map is checked and subscribed to topic /map&lt;br /&gt;
 $ rosrun gmapping slam_gmapping scan:=base_scan&lt;br /&gt;
 $ rosbag play ~/ros/gmap_tester.bag&lt;br /&gt;
 $ rosrun map_server map_saver&lt;br /&gt;
&lt;br /&gt;
== topics ==&lt;br /&gt;
* gmapping: &lt;br /&gt;
** /base_scan&lt;br /&gt;
** /clock&lt;br /&gt;
** /map&lt;br /&gt;
** /map_metadata&lt;br /&gt;
** /slam_gmapping/entropy&lt;br /&gt;
** /tf&lt;br /&gt;
&lt;br /&gt;
== mapping from point clouds ==&lt;br /&gt;
* http://kos.informatik.uni-osnabrueck.de/3Dscans/&lt;br /&gt;
* http://www.ros.org/wiki/pointcloud_registration&lt;br /&gt;
* http://www.ros.org/wiki/pointcloud_to_laserscan&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-05-03T20:28:27Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;robot notes for anna by anna&lt;br /&gt;
&lt;br /&gt;
== pages ==&lt;br /&gt;
* [[Robot_Lab_(Spring_2012)]]&lt;br /&gt;
* [[ROS_(Robot_Operating_System)]]&lt;br /&gt;
* [[Navigation]]&lt;br /&gt;
&lt;br /&gt;
== tbd ==&lt;br /&gt;
* can rosparams be set in a config file somewhere and auto-loaded?&lt;br /&gt;
* it seems the /map frame in rviz is different from the /map topic?  because rviz can't find the /map frame even when the /map topic is being published.&lt;br /&gt;
&lt;br /&gt;
== rviz view controls ==&lt;br /&gt;
* regular click: rotate the view&lt;br /&gt;
* shift-click: move the view or focal point&lt;br /&gt;
* host click / scroll: zoom&lt;br /&gt;
&lt;br /&gt;
== create a map from log data and watch it on rviz ==&lt;br /&gt;
 $ roscore&lt;br /&gt;
 $ rosparam set use_sim_time true&lt;br /&gt;
 $ rosrun rviz rviz&lt;br /&gt;
 # make sure map is checked and subscribed to topic /map&lt;br /&gt;
 $ rosrun gmapping slam_gmapping scan:=base_scan&lt;br /&gt;
 $ rosbag play ~/ros/gmap_tester.bag&lt;br /&gt;
 $ rosrun map_server map_saver&lt;br /&gt;
&lt;br /&gt;
== topics ==&lt;br /&gt;
* gmapping: &lt;br /&gt;
** /base_scan&lt;br /&gt;
** /clock&lt;br /&gt;
** /map&lt;br /&gt;
** /map_metadata&lt;br /&gt;
** /slam_gmapping/entropy&lt;br /&gt;
** /tf&lt;br /&gt;
&lt;br /&gt;
== mapping from point clouds ==&lt;br /&gt;
* http://www.ros.org/wiki/pointcloud_to_laserscan&lt;br /&gt;
* http://www.ros.org/wiki/rgbdslam - this appears to be just for kinect&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-05-03T19:11:50Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: /* mapping from point clouds */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;robot notes for anna by anna&lt;br /&gt;
&lt;br /&gt;
== pages ==&lt;br /&gt;
* [[Robot_Lab_(Spring_2012)]]&lt;br /&gt;
* [[ROS_(Robot_Operating_System)]]&lt;br /&gt;
* [[Navigation]]&lt;br /&gt;
&lt;br /&gt;
== tbd ==&lt;br /&gt;
* can rosparams be set in a config file somewhere and auto-loaded?&lt;br /&gt;
* it seems the /map frame in rviz is different from the /map topic?  because rviz can't find the /map frame even when the /map topic is being published.&lt;br /&gt;
&lt;br /&gt;
== rviz view controls ==&lt;br /&gt;
* left / regular mouse button: rotate the view&lt;br /&gt;
* middle button (how?): move the view or focal point&lt;br /&gt;
* host click / right click / scroll: zoom&lt;br /&gt;
&lt;br /&gt;
== create a map from log data and watch it on rviz ==&lt;br /&gt;
 $ roscore&lt;br /&gt;
 $ rosparam set use_sim_time true&lt;br /&gt;
 $ rosrun rviz rviz&lt;br /&gt;
 # make sure map is checked and subscribed to topic /map&lt;br /&gt;
 $ rosrun gmapping slam_gmapping scan:=base_scan&lt;br /&gt;
 $ rosbag play ~/ros/gmap_tester.bag&lt;br /&gt;
 $ rosrun map_server map_saver&lt;br /&gt;
&lt;br /&gt;
== topics ==&lt;br /&gt;
* gmapping: &lt;br /&gt;
** /base_scan&lt;br /&gt;
** /clock&lt;br /&gt;
** /map&lt;br /&gt;
** /map_metadata&lt;br /&gt;
** /slam_gmapping/entropy&lt;br /&gt;
** /tf&lt;br /&gt;
&lt;br /&gt;
== mapping from point clouds ==&lt;br /&gt;
* http://www.ros.org/wiki/pointcloud_to_laserscan&lt;br /&gt;
* http://www.ros.org/wiki/rgbdslam - this appears to be just for kinect&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-05-03T18:09:16Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: /* mapping from point clouds */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;robot notes for anna by anna&lt;br /&gt;
&lt;br /&gt;
== pages ==&lt;br /&gt;
* [[Robot_Lab_(Spring_2012)]]&lt;br /&gt;
* [[ROS_(Robot_Operating_System)]]&lt;br /&gt;
* [[Navigation]]&lt;br /&gt;
&lt;br /&gt;
== tbd ==&lt;br /&gt;
* can rosparams be set in a config file somewhere and auto-loaded?&lt;br /&gt;
* it seems the /map frame in rviz is different from the /map topic?  because rviz can't find the /map frame even when the /map topic is being published.&lt;br /&gt;
&lt;br /&gt;
== rviz view controls ==&lt;br /&gt;
* left / regular mouse button: rotate the view&lt;br /&gt;
* middle button (how?): move the view or focal point&lt;br /&gt;
* host click / right click / scroll: zoom&lt;br /&gt;
&lt;br /&gt;
== create a map from log data and watch it on rviz ==&lt;br /&gt;
 $ roscore&lt;br /&gt;
 $ rosparam set use_sim_time true&lt;br /&gt;
 $ rosrun rviz rviz&lt;br /&gt;
 # make sure map is checked and subscribed to topic /map&lt;br /&gt;
 $ rosrun gmapping slam_gmapping scan:=base_scan&lt;br /&gt;
 $ rosbag play ~/ros/gmap_tester.bag&lt;br /&gt;
 $ rosrun map_server map_saver&lt;br /&gt;
&lt;br /&gt;
== topics ==&lt;br /&gt;
* gmapping: &lt;br /&gt;
** /base_scan&lt;br /&gt;
** /clock&lt;br /&gt;
** /map&lt;br /&gt;
** /map_metadata&lt;br /&gt;
** /slam_gmapping/entropy&lt;br /&gt;
** /tf&lt;br /&gt;
&lt;br /&gt;
== mapping from point clouds ==&lt;br /&gt;
* http://www.ros.org/wiki/pointcloud_to_laserscan&lt;br /&gt;
* http://www.ros.org/wiki/rgbdslam&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-05-03T02:34:39Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;robot notes for anna by anna&lt;br /&gt;
&lt;br /&gt;
== pages ==&lt;br /&gt;
* [[Robot_Lab_(Spring_2012)]]&lt;br /&gt;
* [[ROS_(Robot_Operating_System)]]&lt;br /&gt;
* [[Navigation]]&lt;br /&gt;
&lt;br /&gt;
== tbd ==&lt;br /&gt;
* can rosparams be set in a config file somewhere and auto-loaded?&lt;br /&gt;
* it seems the /map frame in rviz is different from the /map topic?  because rviz can't find the /map frame even when the /map topic is being published.&lt;br /&gt;
&lt;br /&gt;
== rviz view controls ==&lt;br /&gt;
* left / regular mouse button: rotate the view&lt;br /&gt;
* middle button (how?): move the view or focal point&lt;br /&gt;
* host click / right click / scroll: zoom&lt;br /&gt;
&lt;br /&gt;
== create a map from log data and watch it on rviz ==&lt;br /&gt;
 $ roscore&lt;br /&gt;
 $ rosparam set use_sim_time true&lt;br /&gt;
 $ rosrun rviz rviz&lt;br /&gt;
 # make sure map is checked and subscribed to topic /map&lt;br /&gt;
 $ rosrun gmapping slam_gmapping scan:=base_scan&lt;br /&gt;
 $ rosbag play ~/ros/gmap_tester.bag&lt;br /&gt;
 $ rosrun map_server map_saver&lt;br /&gt;
&lt;br /&gt;
== topics ==&lt;br /&gt;
* gmapping: &lt;br /&gt;
** /base_scan&lt;br /&gt;
** /clock&lt;br /&gt;
** /map&lt;br /&gt;
** /map_metadata&lt;br /&gt;
** /slam_gmapping/entropy&lt;br /&gt;
** /tf&lt;br /&gt;
&lt;br /&gt;
== mapping from point clouds ==&lt;br /&gt;
http://www.ros.org/wiki/pointcloud_to_laserscan&lt;br /&gt;
http://www.ros.org/wiki/rgbdslam&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-05-03T02:07:49Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: /* mapping from point clouds */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;robot notes for anna by anna&lt;br /&gt;
&lt;br /&gt;
== pages ==&lt;br /&gt;
* [[Robot_Lab_(Spring_2012)]]&lt;br /&gt;
* [[ROS_(Robot_Operating_System)]]&lt;br /&gt;
* [[Navigation]]&lt;br /&gt;
&lt;br /&gt;
== tbd ==&lt;br /&gt;
* can rosparams be set in a config file somewhere and auto-loaded?&lt;br /&gt;
* it seems the /map frame in rviz is different from the /map topic?  because rviz can't find the /map frame even when the /map topic is being published.&lt;br /&gt;
&lt;br /&gt;
== rviz view controls ==&lt;br /&gt;
* left / regular mouse button: rotate the view&lt;br /&gt;
* middle button (how?): move the view or focal point&lt;br /&gt;
* host click / right click / scroll: zoom&lt;br /&gt;
&lt;br /&gt;
== create a map from log data and watch it on rviz ==&lt;br /&gt;
 $ roscore&lt;br /&gt;
 $ rosparam set use_sim_time true&lt;br /&gt;
 $ rosrun rviz rviz&lt;br /&gt;
 # make sure map is checked and subscribed to topic /map&lt;br /&gt;
 $ rosrun gmapping slam_gmapping scan:=base_scan&lt;br /&gt;
 $ rosbag play ~/ros/gmap_tester.bag&lt;br /&gt;
 $ rosrun map_server map_saver&lt;br /&gt;
&lt;br /&gt;
== topics ==&lt;br /&gt;
* gmapping: &lt;br /&gt;
** /base_scan&lt;br /&gt;
** /clock&lt;br /&gt;
** /map&lt;br /&gt;
** /map_metadata&lt;br /&gt;
** /slam_gmapping/entropy&lt;br /&gt;
** /tf&lt;br /&gt;
&lt;br /&gt;
== mapping from point clouds ==&lt;br /&gt;
http://www.ros.org/wiki/pointcloud_to_laserscan&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-05-03T01:59:12Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;robot notes for anna by anna&lt;br /&gt;
&lt;br /&gt;
== pages ==&lt;br /&gt;
* [[Robot_Lab_(Spring_2012)]]&lt;br /&gt;
* [[ROS_(Robot_Operating_System)]]&lt;br /&gt;
* [[Navigation]]&lt;br /&gt;
&lt;br /&gt;
== tbd ==&lt;br /&gt;
* can rosparams be set in a config file somewhere and auto-loaded?&lt;br /&gt;
* it seems the /map frame in rviz is different from the /map topic?  because rviz can't find the /map frame even when the /map topic is being published.&lt;br /&gt;
&lt;br /&gt;
== rviz view controls ==&lt;br /&gt;
* left / regular mouse button: rotate the view&lt;br /&gt;
* middle button (how?): move the view or focal point&lt;br /&gt;
* host click / right click / scroll: zoom&lt;br /&gt;
&lt;br /&gt;
== create a map from log data and watch it on rviz ==&lt;br /&gt;
 $ roscore&lt;br /&gt;
 $ rosparam set use_sim_time true&lt;br /&gt;
 $ rosrun rviz rviz&lt;br /&gt;
 # make sure map is checked and subscribed to topic /map&lt;br /&gt;
 $ rosrun gmapping slam_gmapping scan:=base_scan&lt;br /&gt;
 $ rosbag play ~/ros/gmap_tester.bag&lt;br /&gt;
 $ rosrun map_server map_saver&lt;br /&gt;
&lt;br /&gt;
== topics ==&lt;br /&gt;
* gmapping: &lt;br /&gt;
** /base_scan&lt;br /&gt;
** /clock&lt;br /&gt;
** /map&lt;br /&gt;
** /map_metadata&lt;br /&gt;
** /slam_gmapping/entropy&lt;br /&gt;
** /tf&lt;br /&gt;
&lt;br /&gt;
== mapping from point clouds ==&lt;br /&gt;
http://www.cs.washington.edu/robotics/projects/rgbd-3d-mapping/&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-05-03T00:19:11Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: /* create a map from log data and watch it on rviz */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;robot notes for anna by anna&lt;br /&gt;
&lt;br /&gt;
== pages ==&lt;br /&gt;
* [[Robot_Lab_(Spring_2012)]]&lt;br /&gt;
* [[ROS_(Robot_Operating_System)]]&lt;br /&gt;
* [[Navigation]]&lt;br /&gt;
&lt;br /&gt;
== tbd ==&lt;br /&gt;
* can rosparams be set in a config file somewhere and auto-loaded?&lt;br /&gt;
* it seems the /map frame in rviz is different from the /map topic?  because rviz can't find the /map frame even when the /map topic is being published.&lt;br /&gt;
&lt;br /&gt;
== rviz view controls ==&lt;br /&gt;
* left / regular mouse button: rotate the view&lt;br /&gt;
* middle button (how?): move the view or focal point&lt;br /&gt;
* host click / right click / scroll: zoom&lt;br /&gt;
&lt;br /&gt;
== create a map from log data and watch it on rviz ==&lt;br /&gt;
 $ roscore&lt;br /&gt;
 $ rosparam set use_sim_time true&lt;br /&gt;
 $ rosrun rviz rviz&lt;br /&gt;
 # make sure map is checked and subscribed to topic /map&lt;br /&gt;
 $ rosrun gmapping slam_gmapping scan:=base_scan&lt;br /&gt;
 $ rosbag play ~/ros/gmap_tester.bag&lt;br /&gt;
 $ rosrun map_server map_saver&lt;br /&gt;
&lt;br /&gt;
== topics ==&lt;br /&gt;
* gmapping: &lt;br /&gt;
** /base_scan&lt;br /&gt;
** /clock&lt;br /&gt;
** /map&lt;br /&gt;
** /map_metadata&lt;br /&gt;
** /slam_gmapping/entropy&lt;br /&gt;
** /tf&lt;br /&gt;
&lt;br /&gt;
== sample line from gmap_tester.bag ==&lt;br /&gt;
 [RUNNING]  Bag Time:    125.202523   Duration: 90.602523 / 1239670987.745222&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-05-03T00:14:03Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: /* create a map from log data and watch it on rviz */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;robot notes for anna by anna&lt;br /&gt;
&lt;br /&gt;
== pages ==&lt;br /&gt;
* [[Robot_Lab_(Spring_2012)]]&lt;br /&gt;
* [[ROS_(Robot_Operating_System)]]&lt;br /&gt;
* [[Navigation]]&lt;br /&gt;
&lt;br /&gt;
== tbd ==&lt;br /&gt;
* can rosparams be set in a config file somewhere and auto-loaded?&lt;br /&gt;
* it seems the /map frame in rviz is different from the /map topic?  because rviz can't find the /map frame even when the /map topic is being published.&lt;br /&gt;
&lt;br /&gt;
== rviz view controls ==&lt;br /&gt;
* left / regular mouse button: rotate the view&lt;br /&gt;
* middle button (how?): move the view or focal point&lt;br /&gt;
* host click / right click / scroll: zoom&lt;br /&gt;
&lt;br /&gt;
== create a map from log data and watch it on rviz ==&lt;br /&gt;
 $ roscore&lt;br /&gt;
 $ rosparam set use_sim_time true&lt;br /&gt;
 $ rosrun gmapping slam_gmapping scan:=base_scan&lt;br /&gt;
 $ rosrun rviz rviz&lt;br /&gt;
 # make sure map is checked and subscribed to topic /map&lt;br /&gt;
 $ rosbag play ~/ros/gmap_tester.bag&lt;br /&gt;
 $ rosrun map_server map_saver&lt;br /&gt;
&lt;br /&gt;
== topics ==&lt;br /&gt;
* gmapping: &lt;br /&gt;
** /base_scan&lt;br /&gt;
** /clock&lt;br /&gt;
** /map&lt;br /&gt;
** /map_metadata&lt;br /&gt;
** /slam_gmapping/entropy&lt;br /&gt;
** /tf&lt;br /&gt;
&lt;br /&gt;
== sample line from gmap_tester.bag ==&lt;br /&gt;
 [RUNNING]  Bag Time:    125.202523   Duration: 90.602523 / 1239670987.745222&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-05-03T00:08:28Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;robot notes for anna by anna&lt;br /&gt;
&lt;br /&gt;
== pages ==&lt;br /&gt;
* [[Robot_Lab_(Spring_2012)]]&lt;br /&gt;
* [[ROS_(Robot_Operating_System)]]&lt;br /&gt;
* [[Navigation]]&lt;br /&gt;
&lt;br /&gt;
== tbd ==&lt;br /&gt;
* can rosparams be set in a config file somewhere and auto-loaded?&lt;br /&gt;
* it seems the /map frame in rviz is different from the /map topic?  because rviz can't find the /map frame even when the /map topic is being published.&lt;br /&gt;
&lt;br /&gt;
== rviz view controls ==&lt;br /&gt;
* left / regular mouse button: rotate the view&lt;br /&gt;
* middle button (how?): move the view or focal point&lt;br /&gt;
* host click / right click / scroll: zoom&lt;br /&gt;
&lt;br /&gt;
== create a map from log data and watch it on rviz ==&lt;br /&gt;
 $ roscore&lt;br /&gt;
 $ rosparam set use_sim_time true&lt;br /&gt;
 $ rosrun gmapping slam_gmapping scan:=base_scan&lt;br /&gt;
 $ rosrun rviz rviz&lt;br /&gt;
 $ rosbag play ~/ros/gmap_tester.bag&lt;br /&gt;
 $ rosrun map_server map_saver&lt;br /&gt;
&lt;br /&gt;
== topics ==&lt;br /&gt;
* gmapping: &lt;br /&gt;
** /base_scan&lt;br /&gt;
** /clock&lt;br /&gt;
** /map&lt;br /&gt;
** /map_metadata&lt;br /&gt;
** /slam_gmapping/entropy&lt;br /&gt;
** /tf&lt;br /&gt;
&lt;br /&gt;
== sample line from gmap_tester.bag ==&lt;br /&gt;
 [RUNNING]  Bag Time:    125.202523   Duration: 90.602523 / 1239670987.745222&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-05-02T20:04:13Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;robot notes for anna by anna&lt;br /&gt;
&lt;br /&gt;
== tbd ==&lt;br /&gt;
* can rosparams be set in a config file somewhere and auto-loaded?&lt;br /&gt;
* it seems the /map frame in rviz is different from the /map topic?  because rviz can't find the /map frame even when the /map topic is being published.&lt;br /&gt;
&lt;br /&gt;
== rviz view controls ==&lt;br /&gt;
* left / regular mouse button: rotate the view&lt;br /&gt;
* middle button (how?): move the view or focal point&lt;br /&gt;
* host click / right click / scroll: zoom&lt;br /&gt;
&lt;br /&gt;
== create a map from log data and watch it on rviz ==&lt;br /&gt;
 $ roscore&lt;br /&gt;
 $ rosparam set use_sim_time true&lt;br /&gt;
 $ rosrun gmapping slam_gmapping scan:=base_scan&lt;br /&gt;
 $ rosrun rviz rviz&lt;br /&gt;
 $ rosbag play ~/ros/gmap_tester.bag&lt;br /&gt;
 $ rosrun map_server map_saver&lt;br /&gt;
&lt;br /&gt;
== topics ==&lt;br /&gt;
* gmapping: &lt;br /&gt;
** /base_scan&lt;br /&gt;
** /clock&lt;br /&gt;
** /map&lt;br /&gt;
** /map_metadata&lt;br /&gt;
** /slam_gmapping/entropy&lt;br /&gt;
** /tf&lt;br /&gt;
&lt;br /&gt;
== sample line from gmap_tester.bag ==&lt;br /&gt;
 [RUNNING]  Bag Time:    125.202523   Duration: 90.602523 / 1239670987.745222&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-04-29T23:34:31Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: /* create a map from log data and watch it on rviz */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=robot notes for anna by anna=&lt;br /&gt;
&lt;br /&gt;
== tbd ==&lt;br /&gt;
* can rosparams be set in a config file somewhere and auto-loaded?&lt;br /&gt;
* it seems the /map frame in rviz is different from the /map topic?  because rviz can't find the /map frame even when the /map topic is being published.&lt;br /&gt;
&lt;br /&gt;
== rviz view controls ==&lt;br /&gt;
* left / regular mouse button: rotate the view&lt;br /&gt;
* middle button (how?): move the view or focal point&lt;br /&gt;
* host click / right click / scroll: zoom&lt;br /&gt;
&lt;br /&gt;
== create a map from log data and watch it on rviz ==&lt;br /&gt;
 $ roscore&lt;br /&gt;
 $ rosparam set use_sim_time true&lt;br /&gt;
 $ rosrun gmapping slam_gmapping scan:=base_scan&lt;br /&gt;
 $ rosrun rviz rviz&lt;br /&gt;
 $ rosbag play ~/ros/gmap_tester.bag&lt;br /&gt;
 $ rosrun map_server map_saver&lt;br /&gt;
&lt;br /&gt;
== topics ==&lt;br /&gt;
* gmapping: &lt;br /&gt;
** /base_scan&lt;br /&gt;
** /clock&lt;br /&gt;
** /map&lt;br /&gt;
** /map_metadata&lt;br /&gt;
** /slam_gmapping/entropy&lt;br /&gt;
** /tf&lt;br /&gt;
&lt;br /&gt;
== sample line from gmap_tester.bag ==&lt;br /&gt;
 [RUNNING]  Bag Time:    125.202523   Duration: 90.602523 / 1239670987.745222&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-04-29T23:33:28Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=robot notes for anna by anna=&lt;br /&gt;
&lt;br /&gt;
== tbd ==&lt;br /&gt;
* can rosparams be set in a config file somewhere and auto-loaded?&lt;br /&gt;
* it seems the /map frame in rviz is different from the /map topic?  because rviz can't find the /map frame even when the /map topic is being published.&lt;br /&gt;
&lt;br /&gt;
== rviz view controls ==&lt;br /&gt;
* left / regular mouse button: rotate the view&lt;br /&gt;
* middle button (how?): move the view or focal point&lt;br /&gt;
* host click / right click / scroll: zoom&lt;br /&gt;
&lt;br /&gt;
== create a map from log data and watch it on rviz ==&lt;br /&gt;
&amp;lt;pre&amp;gt;$ roscore&lt;br /&gt;
$ rosparam set use_sim_time true&lt;br /&gt;
$ rosrun gmapping slam_gmapping scan:=base_scan&lt;br /&gt;
$ rosrun rviz rviz&lt;br /&gt;
$ rosbag play ~/ros/gmap_tester.bag&lt;br /&gt;
$ rosrun map_server map_saver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== topics ==&lt;br /&gt;
* gmapping: &lt;br /&gt;
** /base_scan&lt;br /&gt;
** /clock&lt;br /&gt;
** /map&lt;br /&gt;
** /map_metadata&lt;br /&gt;
** /slam_gmapping/entropy&lt;br /&gt;
** /tf&lt;br /&gt;
&lt;br /&gt;
== sample line from gmap_tester.bag ==&lt;br /&gt;
 [RUNNING]  Bag Time:    125.202523   Duration: 90.602523 / 1239670987.745222&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-04-29T23:30:19Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=robot notes for anna by anna=&lt;br /&gt;
&lt;br /&gt;
== tbd ==&lt;br /&gt;
* can rosparams be set in a config file somewhere and auto-loaded?&lt;br /&gt;
* it seems the /map frame in rviz is different from the /map topic?  because rviz can't find the /map frame even when the /map topic is being published.&lt;br /&gt;
&lt;br /&gt;
== rviz view controls ==&lt;br /&gt;
* left / regular mouse button: rotate the view&lt;br /&gt;
* middle button (how?): move the view or focal point&lt;br /&gt;
* host click / right click / scroll: zoom&lt;br /&gt;
&lt;br /&gt;
== create a map from log data and watch it on rviz ==&lt;br /&gt;
&amp;lt;pre&amp;gt;$ roscore&lt;br /&gt;
$ rosparam set use_sim_time true&lt;br /&gt;
$ rosrun gmapping slam_gmapping scan:=base_scan&lt;br /&gt;
$ rosrun rviz rviz&lt;br /&gt;
$ rosbag play ~/ros/gmap_tester.bag&lt;br /&gt;
$ rosrun map_server map_saver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== topics ==&lt;br /&gt;
* gmapping: &lt;br /&gt;
** /base_scan&lt;br /&gt;
** /clock&lt;br /&gt;
** /map&lt;br /&gt;
** /map_metadata&lt;br /&gt;
** /slam_gmapping/entropy&lt;br /&gt;
** /tf&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-04-29T21:49:42Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: /* rviz view controls */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=robot notes for anna by anna=&lt;br /&gt;
&lt;br /&gt;
== tbd ==&lt;br /&gt;
* can rosparams be set in a config file somewhere and auto-loaded?&lt;br /&gt;
* it seems the /map frame in rviz is different from the /map topic?  because rviz can't find the /map frame even when the /map topic is being published.&lt;br /&gt;
&lt;br /&gt;
== rviz view controls ==&lt;br /&gt;
* left / regular mouse button: rotate the view&lt;br /&gt;
* middle button (how?): move the view or focal point&lt;br /&gt;
* host click / right click / scroll: zoom&lt;br /&gt;
&lt;br /&gt;
== how to create a map from log data ==&lt;br /&gt;
&amp;lt;pre&amp;gt;$ roscore&lt;br /&gt;
$ rosparam set use_sim_time true&lt;br /&gt;
$ rosrun gmapping slam_gmapping scan:=base_scan&lt;br /&gt;
$ rosbag play ~/ros/gmap_tester.bag&lt;br /&gt;
$ rosrun map_server map_saver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== topics ==&lt;br /&gt;
* gmapping: &lt;br /&gt;
** /base_scan&lt;br /&gt;
** /clock&lt;br /&gt;
** /map&lt;br /&gt;
** /map_metadata&lt;br /&gt;
** /slam_gmapping/entropy&lt;br /&gt;
** /tf&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/User:Aeh84</id>
		<title>User:Aeh84</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/User:Aeh84"/>
				<updated>2012-04-29T21:43:50Z</updated>
		
		<summary type="html">&lt;p&gt;Aeh84: /* tbd */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=robot notes for anna by anna=&lt;br /&gt;
&lt;br /&gt;
== tbd ==&lt;br /&gt;
* can rosparams be set in a config file somewhere and auto-loaded?&lt;br /&gt;
* it seems the /map frame in rviz is different from the /map topic?  because rviz can't find the /map frame even when the /map topic is being published.&lt;br /&gt;
&lt;br /&gt;
== rviz view controls ==&lt;br /&gt;
* left / regular mouse button: rotate the view&lt;br /&gt;
* middle button (option click): move the view or focal point&lt;br /&gt;
* right button / scroll: zoom&lt;br /&gt;
&lt;br /&gt;
== how to create a map from log data ==&lt;br /&gt;
&amp;lt;pre&amp;gt;$ roscore&lt;br /&gt;
$ rosparam set use_sim_time true&lt;br /&gt;
$ rosrun gmapping slam_gmapping scan:=base_scan&lt;br /&gt;
$ rosbag play ~/ros/gmap_tester.bag&lt;br /&gt;
$ rosrun map_server map_saver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== topics ==&lt;br /&gt;
* gmapping: &lt;br /&gt;
** /base_scan&lt;br /&gt;
** /clock&lt;br /&gt;
** /map&lt;br /&gt;
** /map_metadata&lt;br /&gt;
** /slam_gmapping/entropy&lt;br /&gt;
** /tf&lt;/div&gt;</summary>
		<author><name>Aeh84</name></author>	</entry>

	</feed>