Initial commit
This commit is contained in:
@@ -0,0 +1,301 @@
|
||||
Change history
|
||||
==============
|
||||
|
||||
1.5.2 (2019-01-28)
|
||||
------------------
|
||||
* Merge pull request `#205 <https://github.com/ros-drivers/velodyne/issues/205>`_ from xiesc/master
|
||||
support for 64E-S3
|
||||
* add an example yaml file for S3
|
||||
* Contributors: Joshua Whitley, Shichao XIE, xiesc
|
||||
|
||||
1.5.1 (2018-12-10)
|
||||
------------------
|
||||
* Merge pull request `#194 <https://github.com/ros-drivers/velodyne/issues/194>`_ from ros-drivers/avoid_unnecessary_computation
|
||||
Avoid unnecessary computation - causes approximately 20% performance increase on VLP-32C - should be similar for other sensors
|
||||
* std::vector<>::reserve is your friend
|
||||
* add static to avoid frequence memory allocation
|
||||
* avoid unecesary calculations in unpack()
|
||||
* Contributors: Davide Faconti, Joshua Whitley
|
||||
|
||||
1.5.0 (2018-10-19)
|
||||
------------------
|
||||
* Merge pull request `#164 <https://github.com/ros-drivers/velodyne/issues/164>`_ from ros-drivers/maint/vlp_32c_support
|
||||
Adding VLP-32C support.
|
||||
This was tested by AutonomouStuff and several external users. Though it does not include new information that I've learned (it appears that the distance resolution is different <50m vs >=50m), it is a good start.
|
||||
* Merge pull request `#189 <https://github.com/ros-drivers/velodyne/issues/189>`_ from kveretennicov/patch-1
|
||||
* Fix malformed plugin description XML
|
||||
ROS pluginlib only recognizes multiple <library> elements if they are under
|
||||
<class_libraries> XML root. It silently ignores malformed XMLs with multiple
|
||||
<library> "root"s and just reads the first one, due to relaxed way tinyxml2 does
|
||||
parsing. Though if you do `rosrun nodelet declared_nodelets`, the issue is
|
||||
reported properly.
|
||||
See also similar issue in https://github.com/ros-perception/perception_pcl/issues/131
|
||||
* Adding distance_resolution to test yaml files.
|
||||
* Adding VLP-32C support.
|
||||
Based on work done by @rockcdr. Adds distance_resolution calibration
|
||||
value to support 0.004m distance resolution for VLP-32C.
|
||||
* Contributors: Joshua Whitley, Konstantin Veretennicov
|
||||
|
||||
1.4.0 (2018-09-19)
|
||||
------------------
|
||||
* Merge pull request `#178 <https://github.com/ros-drivers/velodyne/issues/178>`_ from sts-thm/bugfix_issue\_`#174 <https://github.com/ros-drivers/velodyne/issues/174>`_
|
||||
Bugfix issue `#174 <https://github.com/ros-drivers/velodyne/issues/174>`_
|
||||
* Merge pull request `#177 <https://github.com/ros-drivers/velodyne/issues/177>`_ from C-NR/feature/WrapPointcloudData
|
||||
Feature/wrap pointcloud data
|
||||
* Changes fixing deadlock for specific cut_angle values.
|
||||
* moved definition of VPoint and VPointCloud back to namespace rawdata in rawdata.h
|
||||
* put a wrapper around pointcloud data including a generic setter method to enable the use of arbitrary data structures (pcl pointcloud, depth image, octomaps and so on) to be filled by just using RawData::unpack method with the wrapper object as parameter
|
||||
* Merge pull request `#170 <https://github.com/ros-drivers/velodyne/issues/170>`_ from ros-drivers/maint/move_header_files
|
||||
Moving header files to traditional location inside include folders.
|
||||
* Merge pull request `#160 <https://github.com/ros-drivers/velodyne/issues/160>`_ from ros-drivers/maint/updating_package_xml_to_v2
|
||||
* Updated all package.xmls to ver 2. Cleaned up catkin_lint errors.
|
||||
All package.xml files are now compatible with version 2 of the
|
||||
package.xml specification in REP 140. Removed some unnecessary
|
||||
execute permissions on a few files. Fixed a missing test_depend.
|
||||
* Merge pull request `#136 <https://github.com/ros-drivers/velodyne/issues/136>`_ from stsundermann/patch-1
|
||||
Use std::abs instead of abs
|
||||
* Adding missing 32C configuration file.
|
||||
* Merge pull request `#139 <https://github.com/ros-drivers/velodyne/issues/139>`_ from ASDeveloper00/vlp32
|
||||
Adding support for VLP-32C.
|
||||
* Merge pull request `#138 <https://github.com/ros-drivers/velodyne/issues/138>`_ from volkandre/cut_at_specified_angle_feature
|
||||
Cut at specified angle feature
|
||||
* Updated default cut_angle parameters in launch files after switching from deg to rad.
|
||||
* Use std::abs instead of abs
|
||||
abs is the c version which returns an integer. This is probably not intended here, so use the templated std::abs function.
|
||||
* Contributors: Andre Volk, Autonomoustuff Developer, CNR, Joshua Whitley, Kyle Rector, Stephan Sundermann, Tobias Athmer, kennouni
|
||||
|
||||
1.3.0 (2017-11-10)
|
||||
-------------------
|
||||
* Merge pull request `#110 <https://github.com/ros-drivers/velodyne/issues/110>`_ from kmhallen/master
|
||||
Added velodyne_laserscan package
|
||||
* Merge remote-tracking branch ros-drivers/master
|
||||
* Merge pull request `#129 <https://github.com/ros-drivers/velodyne/issues/129>`_ from kmhallen/pluginlib_macro
|
||||
Modern pluginlib macro
|
||||
* Update to use non deprecated pluginlib macro
|
||||
* Merge pull request `#127 <https://github.com/ros-drivers/velodyne/issues/127>`_ from swri-robotics/add_vlp16_hires_support
|
||||
Add VLP16 Puck Hi-Res config file
|
||||
* Add VLP16 Puck Hi-Res support
|
||||
* velodyne_pointcloud: remove incorrect catkin_package() DEPENDS option (`#93 <https://github.com/ros-drivers/velodyne/issues/93>`_)
|
||||
This eliminates a CMake warning when building on Xenial.
|
||||
* Merge pull request `#111 <https://github.com/ros-drivers/velodyne/issues/111>`_ from OrebroUniversity/master
|
||||
Added an interface to set up raw data processing offline
|
||||
* Added an interface to set up raw data processing from a locally defined calibration file. This method is useful when processing data offline from a bag file, without starting any ros master
|
||||
* Added velodyne_laserscan package and inserted into existing launch files
|
||||
* test multiple nodelet manager support (`#108 <https://github.com/ros-drivers/velodyne/issues/108>`_)
|
||||
* add launch args to support multiple devices (`#108 <https://github.com/ros-drivers/velodyne/issues/108>`_)
|
||||
* Merge pull request `#105 <https://github.com/ros-drivers/velodyne/issues/105>`_ from fudger/patch-1
|
||||
Remove unused constants.
|
||||
* Merge pull request `#104 <https://github.com/ros-drivers/velodyne/issues/104>`_ from altrouge/launch_options
|
||||
Add more options in launch files.
|
||||
* Rearranged alphabetically.
|
||||
* Remove unused constants.
|
||||
DISTANCE_MAX and DISTANCE_MAX_UNITS are not used anywhere in the code.
|
||||
Furthermore, using them would lead to errors as both VLP-64 manuals state that returns above 120 m should not be used. The VLP-32 manual allows 70 m as the maximum valid sensor range.
|
||||
* Merge pull request `#103 <https://github.com/ros-drivers/velodyne/issues/103>`_ from fudger/patch-1
|
||||
Fix misleading typecasts.
|
||||
* Add more options in launch files.
|
||||
- rpm, device_ip, port, read_once, read_fast, repeat_delay
|
||||
* Fix misleading typecasts.
|
||||
intensity and VPoint::intensity are both of type float.
|
||||
* update change history
|
||||
* merge current master (`#94 <https://github.com/ros-drivers/velodyne/issues/94>`_)
|
||||
* Merge pull request `#92 <https://github.com/ros-drivers/velodyne/issues/92>`_ from adasta/master
|
||||
GCC Build Warnings
|
||||
* Modified velodyne_point_cloud/src/lib/rawdata.cc to address warning
|
||||
that last_azimuth_diff variable may be used uninitialized. Variable
|
||||
is now initialized to 0 at creation.
|
||||
velodyne/velodyne_pointcloud/src/lib/rawdata.cc:328:57: error: ‘last_azimuth_diff’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
|
||||
azimuth_corrected_f = azimuth + (azimuth_diff * ((dsr*VLP16_DSR_TOFFSET) + (firing*VLP16_FIRING_TOFFSET)) / VLP16_BLOCK_TDURATION);
|
||||
* Modified velodyne_pointcloud/src/conversion/colors.cc to remove
|
||||
address build warning for strict-aliasing.
|
||||
velodyne/velodyne_pointcloud/src/conversions/colors.cc:84:58:
|
||||
* Merge pull request `#89 <https://github.com/ros-drivers/velodyne/issues/89>`_ from Tones29/feat_dynrec_driver
|
||||
Add dynamic latency configuration to velodyne_driver
|
||||
* velodyne_pointcloud: Fix compile warning "Wrong initialization order"
|
||||
* velodyne_pointcloud: add dynamic reconfig update to change log (`#78 <https://github.com/ros-drivers/velodyne/issues/78>`_)
|
||||
* Merge branch fudger-reconfigure_transform_node
|
||||
* velodyne_pointcloud: use recommended add_dependencies() CMake variable `#78 <https://github.com/ros-drivers/velodyne/issues/78>`_
|
||||
* velodyne_pointcloud: fix transform unit tests
|
||||
Use tf2_ros static_transform_publisher for more consistent timing (`#2 <https://github.com/ros-drivers/velodyne/issues/2>`_)
|
||||
* Merge branch reconfigure_transform_node of https://github.com/fudger/velodyne
|
||||
* prepare change history for coming Indigo release (`#59 <https://github.com/ros-drivers/velodyne/issues/59>`_)
|
||||
* calibration: unit test case improvements (`#84 <https://github.com/ros-drivers/velodyne/issues/84>`_)
|
||||
* calibration: read all intensities as float, then convert (`#84 <https://github.com/ros-drivers/velodyne/issues/84>`_)
|
||||
* calibration: add gtest for `#84 <https://github.com/ros-drivers/velodyne/issues/84>`_
|
||||
This currently fails on 64e_s2.1-sztaki.yaml and on issue_84_float_intensities.yaml.
|
||||
* calibration: make max_intensity and min_intensity optional (`#84 <https://github.com/ros-drivers/velodyne/issues/84>`_)
|
||||
This fixes a regression in the 32e and VLP-16 calibrations which do not contain
|
||||
intensity values. There is still a problem with the 64e_s2.1 calibration.
|
||||
* Merge pull request `#76 <https://github.com/ros-drivers/velodyne/issues/76>`_ from pomerlef/master
|
||||
Sign inversion in some equations
|
||||
* Merge pull request `#82 <https://github.com/ros-drivers/velodyne/issues/82>`_ from ros-drivers/fix_pr_80
|
||||
Fix pr 80; adding travis CI tests.
|
||||
* fix the yaml-cpp 0.5 code paths
|
||||
* Merge pull request `#80 <https://github.com/ros-drivers/velodyne/issues/80>`_ from ros-drivers/fix_yaml_import
|
||||
allow floats in min/max_intensity and make horiz_offset_correction optional
|
||||
* allow horiz_offset_correction to be optional with 0 as default
|
||||
* allow floats instead of ints in min/max_intensity
|
||||
* Resolve frame ID name using tf prefix.
|
||||
* Improve coding style.
|
||||
* Set up dynamic reconfiguration for transform_node.
|
||||
Previously, transform_node has neither read parameters other than frame_id from the command line nor has it exposed these parameters via dynamic reconfigure. As parameters like max_range and view_width have been initialized to zero, the inconfigurable transform_node has returned an empty point cloud.
|
||||
Now, transform_node launches an reconfigure server just as cloud_node. In contrast to cloud_node, transform node exposes another parameter for dynamic reconfiguration: frame_id, i.e. the frame of reference the incoming Velodyne points are transformed to.
|
||||
* Merge pull request `#77 <https://github.com/ros-drivers/velodyne/issues/77>`_ from fudger/pretty_print
|
||||
Fix output of calibration data onto console
|
||||
* Add a missing space.
|
||||
* Fix line that always indicates use of model VLP-16.
|
||||
* Align console output of calibration data.
|
||||
* Merge branch master of https://github.com/ros-drivers/velodyne
|
||||
* resolve sign error
|
||||
* Merge pull request `#73 <https://github.com/ros-drivers/velodyne/issues/73>`_ from fudger/master
|
||||
Correct important data type error for VLP-16
|
||||
* Fix data type error that distorts the point cloud.
|
||||
* Fix and add a few comments.
|
||||
* Merge pull request `#68 <https://github.com/ros-drivers/velodyne/issues/68>`_ from jlblancoc/patch-1
|
||||
Remove unused variable
|
||||
* Remove unused variable
|
||||
I think that `dsr` was unused. See line 317:
|
||||
for (int dsr=0; ...
|
||||
* VLP-16: skip badly formatted data packets (`#62 <https://github.com/ros-drivers/velodyne/issues/62>`_, `#63 <https://github.com/ros-drivers/velodyne/issues/63>`_)
|
||||
* restore VLP-16 min_range setting to 0.4 (`#60 <https://github.com/ros-drivers/velodyne/issues/60>`_)
|
||||
NOTE: There is still some other problem keeping that from working.
|
||||
* permit min_range settings below 0.9 meters (`#60 <https://github.com/ros-drivers/velodyne/issues/60>`_)
|
||||
No known models are currently known to return closer measurements.
|
||||
* Merge pull request `#55 <https://github.com/ros-drivers/velodyne/issues/55>`_ from lemiant/azimuth_bug_VLP16
|
||||
Fixed azimuth overflow bug.
|
||||
* Fixed azimuth overflow bug.
|
||||
For interpolated azimuth values between 35999.5 and 36000.0 the nested round(fmod())
|
||||
yields a value of 36000 which is invalid and overflows the pre-computed sin/cos arrays,
|
||||
since they only go form 0..35999
|
||||
* Merge pull request `#51 <https://github.com/ros-drivers/velodyne/issues/51>`_ from kunlileo/master
|
||||
Added vertical sin angle correction
|
||||
* Added vertical sin angle correction
|
||||
* Merge pull request `#47 <https://github.com/ros-drivers/velodyne/issues/47>`_ from prclibo/master
|
||||
fixed rounding bug in intensity calculation found by songshiyu
|
||||
* fixed rounding bug in intensity calculation found by songshiyu
|
||||
* fix some overly long C++ source lines
|
||||
* Merge pull request `#44 <https://github.com/ros-drivers/velodyne/issues/44>`_ from SISegwayRmp/master
|
||||
adding driver and pointcloud support for the VLP16
|
||||
* missed the space in the file name which caused the build to fail, removed space before extension
|
||||
* adding the VLP16 test scripts and updating the CMakeLists to include the test file from http://download.ros.org/data/velodyne/vlp16.pcap
|
||||
* adding support for the VLP16
|
||||
* Merge pull request `#43 <https://github.com/ros-drivers/velodyne/issues/43>`_ from prclibo/fix_rawdata
|
||||
fixed point computation according to the 64e_s2(.1) velodyne manual
|
||||
* fixed point computation according to the 64e_s2(.1) velodyne manual, with luopei"s help
|
||||
* Merge pull request `#41 <https://github.com/ros-drivers/velodyne/issues/41>`_ from prclibo/master
|
||||
fixed a calibration file parsing bug
|
||||
* Merge pull request `#42 <https://github.com/ros-drivers/velodyne/issues/42>`_ from prclibo/fix_gen_calibration
|
||||
fixed gen_calibration min/max intensity type
|
||||
* fixed gen_calibration min/max intensity type
|
||||
* fixed a calibration file parsing bug
|
||||
* Contributors: Adam Stambler, Alex Rodrigues, Alexander Schaefer, Andreas Wachaja, Bo Li, Daniel Jartoux, Gabor Meszaros, Jack OQuin, Jose Luis Blanco-Claraco, Joshua Whitley, Kevin Hallenbeck, Kris Kozak, Kun Li, Micho Radovnikovich, Scott K Logan, Thomas Solatges, Todor Stoyanov, William Woodall, jack.oquin, libo24, phussey, piyushk, pomerlef
|
||||
|
||||
1.2.0 (2014-08-06)
|
||||
------------------
|
||||
|
||||
* velodyne_pointcloud: remove model-dependent "constants" from
|
||||
rawdata.h (`#28
|
||||
<https://github.com/ros-drivers/velodyne/issues/28>`_)
|
||||
* velodyne_pointcloud: change default min_range to 0.9 meters (`#25
|
||||
<https://github.com/ros-drivers/velodyne/issues/25>`_)
|
||||
* Added support for YAML-CPP 0.5+ (`#23
|
||||
<https://github.com/ros-drivers/velodyne/pull/23>`_).
|
||||
* Add dynamic_reconfigure feature.
|
||||
* Add angular limits to the output point cloud, useful for omitting
|
||||
part of it. (`#22 <https://github.com/ros-drivers/velodyne/pull/22>`_).
|
||||
* Contributors: Jack OQuin, Scott K Logan, Thomas Solatges
|
||||
|
||||
1.1.2 (2013-11-05)
|
||||
------------------
|
||||
|
||||
* Move unit test data to download.ros.org (`#18`_).
|
||||
* Install missing gen_calibration.py script (`#20`_).
|
||||
|
||||
1.1.1 (2013-07-30)
|
||||
------------------
|
||||
|
||||
* Fix lost frame_id transform problem caused by PCL 1.7 fix (`#13`_).
|
||||
* Add support for HDL-64E S2 and S2.1 models, which were not working
|
||||
before (`#11`_), thanks to Gabor Meszaros (`#12`_).
|
||||
* Add additional parameters to launch files (`#14`_).
|
||||
* Contributors: Gabor Meszaros, Jack OQuin
|
||||
|
||||
1.1.0 (2013-07-16)
|
||||
------------------
|
||||
|
||||
* Fix build problems due to PCL 1.7 API incompatibilities (`#8`_),
|
||||
thanks to William Woodall. This version also works with Groovy, as
|
||||
long as the correct ``pcl_conversions`` is installed.
|
||||
* Fix errors with Mac OSX compiler (`#8`_).
|
||||
* Install ``pluginlib`` XML files (`#9`_).
|
||||
* Install some launch and parameter files.
|
||||
* Enable unit tests when ``CATKIN_ENABLE_TESTING`` is set (`#10`_).
|
||||
|
||||
1.0.1 (2013-06-15)
|
||||
------------------
|
||||
|
||||
* Declare explicit ``pluginlib`` dependency (`#4`_).
|
||||
|
||||
1.0.0 (2013-06-14)
|
||||
------------------
|
||||
|
||||
* Convert to catkin (`#1`_).
|
||||
* Release to Hydro.
|
||||
|
||||
0.9.2 (2013-07-08)
|
||||
------------------
|
||||
|
||||
* Fix Groovy build problem (`#7`_).
|
||||
|
||||
0.9.1 (2012-06-05)
|
||||
------------------
|
||||
|
||||
* Only include "enabled" lasers in YAML calibration file.
|
||||
* New param subdirectory for parameter files.
|
||||
* Add launch file for the HDL-32E.
|
||||
* Add rviz_points.vcg file for viewing Velodyne point clouds with rviz.
|
||||
* Fix bug when reading configuration with default minIntensity.
|
||||
* Add unit tests with 32E data.
|
||||
* Released to Electric, Fuerte and Groovy.
|
||||
|
||||
0.9.0 (2012-04-03)
|
||||
------------------
|
||||
|
||||
* Completely revised API, anticipating a 1.0.0 release.
|
||||
* HDL-32E device support.
|
||||
* New YAML configuration file format.
|
||||
* New velodyne_driver and velodyne_pointcloud packages.
|
||||
* Old velodyne_common and velodyne_pcl packages no longer included.
|
||||
* Released to Electric, Fuerte and Groovy.
|
||||
|
||||
0.2.6 (2011-02-23)
|
||||
------------------
|
||||
|
||||
* Label all timing-dependent tests "realtime" so they do not run by
|
||||
default on the build farm machines.
|
||||
|
||||
0.2.5 (2010-11-19)
|
||||
------------------
|
||||
|
||||
* Initial implementation of new 0.3 interfaces.
|
||||
* Support for ROS 1.3 `std_msgs::Header` changes.
|
||||
|
||||
0.2.0 (2010-08-17)
|
||||
------------------
|
||||
|
||||
* Initial release to ROS C-turtle.
|
||||
|
||||
.. _`#1`: https://github.com/ros-drivers/velodyne/issues/1
|
||||
.. _`#4`: https://github.com/ros-drivers/velodyne/issues/4
|
||||
.. _`#7`: https://github.com/ros-drivers/velodyne/issues/7
|
||||
.. _`#8`: https://github.com/ros-drivers/velodyne/pull/8
|
||||
.. _`#9`: https://github.com/ros-drivers/velodyne/issues/9
|
||||
.. _`#10`: https://github.com/ros-drivers/velodyne/issues/10
|
||||
.. _`#11`: https://github.com/ros-drivers/velodyne/issues/11
|
||||
.. _`#12`: https://github.com/ros-drivers/velodyne/pull/12
|
||||
.. _`#13`: https://github.com/ros-drivers/velodyne/issues/13
|
||||
.. _`#14`: https://github.com/ros-drivers/velodyne/pull/14
|
||||
.. _`#17`: https://github.com/ros-drivers/velodyne/issues/17
|
||||
.. _`#18`: https://github.com/ros-drivers/velodyne/issues/18
|
||||
.. _`#20`: https://github.com/ros-drivers/velodyne/issues/20
|
||||
.. _`#50`: https://github.com/ros-drivers/velodyne/issue/50
|
||||
@@ -0,0 +1,86 @@
|
||||
cmake_minimum_required(VERSION 2.8.3)
|
||||
project(velodyne_pointcloud)
|
||||
|
||||
# Set minimum C++ standard to C++11
|
||||
if (NOT "${CMAKE_CXX_STANDARD_COMPUTED_DEFAULT}")
|
||||
message(STATUS "Changing CXX_STANDARD from C++98 to C++11")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
||||
elseif ("${CMAKE_CXX_STANDARD_COMPUTED_DEFAULT}" STREQUAL "98")
|
||||
message(STATUS "Changing CXX_STANDARD from C++98 to C++11")
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
endif()
|
||||
|
||||
set(${PROJECT_NAME}_CATKIN_DEPS
|
||||
angles
|
||||
nodelet
|
||||
roscpp
|
||||
roslib
|
||||
sensor_msgs
|
||||
tf
|
||||
velodyne_driver
|
||||
velodyne_msgs
|
||||
dynamic_reconfigure
|
||||
diagnostic_updater
|
||||
)
|
||||
|
||||
find_package(catkin REQUIRED COMPONENTS
|
||||
${${PROJECT_NAME}_CATKIN_DEPS}
|
||||
roslint)
|
||||
|
||||
find_package(Boost COMPONENTS signals)
|
||||
find_package(Eigen3 REQUIRED)
|
||||
# Resolve system dependency on yaml-cpp, which apparently does not
|
||||
# provide a CMake find_package() module.
|
||||
find_package(PkgConfig REQUIRED)
|
||||
pkg_check_modules(YAML_CPP REQUIRED yaml-cpp)
|
||||
find_path(YAML_CPP_INCLUDE_DIR
|
||||
NAMES yaml_cpp.h
|
||||
PATHS ${YAML_CPP_INCLUDE_DIRS})
|
||||
find_library(YAML_CPP_LIBRARY
|
||||
NAMES YAML_CPP
|
||||
PATHS ${YAML_CPP_LIBRARY_DIRS})
|
||||
|
||||
link_directories(${YAML_CPP_LIBRARY_DIRS})
|
||||
|
||||
generate_dynamic_reconfigure_options(
|
||||
cfg/CloudNode.cfg cfg/TransformNode.cfg
|
||||
)
|
||||
|
||||
if(NOT ${YAML_CPP_VERSION} VERSION_LESS "0.5")
|
||||
add_definitions(-DHAVE_NEW_YAMLCPP)
|
||||
endif(NOT ${YAML_CPP_VERSION} VERSION_LESS "0.5")
|
||||
|
||||
include_directories(include ${catkin_INCLUDE_DIRS}
|
||||
${dynamic_reconfigure_PACKAGE_PATH}/cmake/cfgbuild.cmake
|
||||
${EIGEN3_INCLUDE_DIR}
|
||||
)
|
||||
|
||||
catkin_package(
|
||||
CATKIN_DEPENDS ${${PROJECT_NAME}_CATKIN_DEPS}
|
||||
INCLUDE_DIRS include
|
||||
LIBRARIES velodyne_rawdata)
|
||||
|
||||
#add_executable(dynamic_reconfigure_node src/dynamic_reconfigure_node.cpp)
|
||||
#target_link_libraries(dynamic_reconfigure_node
|
||||
# ${catkin_LIBRARIES}
|
||||
# )
|
||||
|
||||
add_subdirectory(src/lib)
|
||||
add_subdirectory(src/conversions)
|
||||
|
||||
install(DIRECTORY include/${PROJECT_NAME}/
|
||||
DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION})
|
||||
install(FILES nodelets.xml
|
||||
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION})
|
||||
install(DIRECTORY launch/
|
||||
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/launch)
|
||||
install(DIRECTORY params/
|
||||
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/params)
|
||||
install(PROGRAMS scripts/gen_calibration.py
|
||||
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})
|
||||
|
||||
roslint_cpp()
|
||||
|
||||
if (CATKIN_ENABLE_TESTING)
|
||||
add_subdirectory(tests)
|
||||
endif()
|
||||
@@ -0,0 +1,19 @@
|
||||
#!/usr/bin/env python
|
||||
PACKAGE = "velodyne_pointcloud"
|
||||
|
||||
from math import pi
|
||||
from dynamic_reconfigure.parameter_generator_catkin import *
|
||||
|
||||
gen = ParameterGenerator()
|
||||
|
||||
gen.add("fixed_frame", str_t, 0, "The desired input frame", "velodyne")
|
||||
gen.add("target_frame", str_t, 0, "The desired output frame", "velodyne")
|
||||
gen.add("min_range", double_t, 0, "min range to publish", 0.9, 0.1, 10.0)
|
||||
gen.add("max_range", double_t, 0, "max range to publish", 130, 0.1, 200)
|
||||
gen.add("view_direction", double_t, 0, "angle defining the center of view",
|
||||
0.0, -pi, pi)
|
||||
gen.add("view_width", double_t, 0, "angle defining the view width",
|
||||
2*pi, 0.0, 2*pi)
|
||||
gen.add("organize_cloud", bool_t, 0, "organized cloud", False)
|
||||
|
||||
exit(gen.generate(PACKAGE, "cloud_node", "CloudNode"))
|
||||
@@ -0,0 +1,45 @@
|
||||
#!/usr/bin/env python
|
||||
PACKAGE = "velodyne_pointcloud"
|
||||
|
||||
from math import pi
|
||||
import dynamic_reconfigure.parameter_generator_catkin as pgc
|
||||
|
||||
gen = pgc.ParameterGenerator()
|
||||
|
||||
gen.add("min_range",
|
||||
pgc.double_t,
|
||||
0,
|
||||
"min range to publish",
|
||||
0.9, 0.1, 10.0)
|
||||
|
||||
gen.add("max_range",
|
||||
pgc.double_t,
|
||||
0,
|
||||
"max range to publish",
|
||||
130, 0.1, 200)
|
||||
|
||||
gen.add("view_direction",
|
||||
pgc.double_t,
|
||||
0,
|
||||
"angle defining the center of view",
|
||||
0.0, -pi, pi)
|
||||
|
||||
gen.add("view_width",
|
||||
pgc.double_t,
|
||||
0,
|
||||
"angle defining the view width",
|
||||
2*pi, 0.0, 2*pi)
|
||||
|
||||
gen.add("frame_id",
|
||||
pgc.str_t,
|
||||
0,
|
||||
"fixed frame of reference for point clouds",
|
||||
"map")
|
||||
|
||||
gen.add("organize_cloud",
|
||||
pgc.bool_t,
|
||||
0,
|
||||
"organize cloud",
|
||||
False)
|
||||
|
||||
exit(gen.generate(PACKAGE, "transform_node", "TransformNode"))
|
||||
@@ -0,0 +1,109 @@
|
||||
// Copyright (C) 2012, 2019 Austin Robot Technology, Piyush Khandelwal, Joshua Whitley
|
||||
// All rights reserved.
|
||||
//
|
||||
// Software License Agreement (BSD License 2.0)
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions
|
||||
// are met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following
|
||||
// disclaimer in the documentation and/or other materials provided
|
||||
// with the distribution.
|
||||
// * Neither the name of {copyright_holder} nor the names of its
|
||||
// contributors may be used to endorse or promote products derived
|
||||
// from this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
// POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
#ifndef VELODYNE_POINTCLOUD_CALIBRATION_H
|
||||
#define VELODYNE_POINTCLOUD_CALIBRATION_H
|
||||
|
||||
#include <map>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
namespace velodyne_pointcloud
|
||||
{
|
||||
|
||||
/** \brief correction values for a single laser
|
||||
*
|
||||
* Correction values for a single laser (as provided by db.xml from
|
||||
* Velodyne). Includes parameters for Velodyne HDL-64E S2.1.
|
||||
*
|
||||
* http://velodynelidar.com/lidar/products/manual/63-HDL64E%20S2%20Manual_Rev%20D_2011_web.pdf
|
||||
*/
|
||||
|
||||
/** \brief Correction information for a single laser. */
|
||||
struct LaserCorrection
|
||||
{
|
||||
/** parameters in db.xml */
|
||||
float rot_correction;
|
||||
float vert_correction;
|
||||
float dist_correction;
|
||||
bool two_pt_correction_available;
|
||||
float dist_correction_x;
|
||||
float dist_correction_y;
|
||||
float vert_offset_correction;
|
||||
float horiz_offset_correction;
|
||||
int max_intensity;
|
||||
int min_intensity;
|
||||
float focal_distance;
|
||||
float focal_slope;
|
||||
|
||||
/** cached values calculated when the calibration file is read */
|
||||
float cos_rot_correction; ///< cosine of rot_correction
|
||||
float sin_rot_correction; ///< sine of rot_correction
|
||||
float cos_vert_correction; ///< cosine of vert_correction
|
||||
float sin_vert_correction; ///< sine of vert_correction
|
||||
|
||||
int laser_ring; ///< ring number for this laser
|
||||
};
|
||||
|
||||
/** \brief Calibration information for the entire device. */
|
||||
class Calibration
|
||||
{
|
||||
public:
|
||||
float distance_resolution_m;
|
||||
std::map<int, LaserCorrection> laser_corrections_map;
|
||||
std::vector<LaserCorrection> laser_corrections;
|
||||
int num_lasers;
|
||||
bool initialized;
|
||||
bool ros_info;
|
||||
|
||||
public:
|
||||
explicit Calibration(bool info = true)
|
||||
: distance_resolution_m(0.002f),
|
||||
num_lasers(0),
|
||||
initialized(false),
|
||||
ros_info(info) {}
|
||||
explicit Calibration(
|
||||
const std::string& calibration_file,
|
||||
bool info = true)
|
||||
: distance_resolution_m(0.002f),
|
||||
ros_info(info)
|
||||
{
|
||||
read(calibration_file);
|
||||
}
|
||||
|
||||
void read(const std::string& calibration_file);
|
||||
void write(const std::string& calibration_file);
|
||||
};
|
||||
|
||||
} // namespace velodyne_pointcloud
|
||||
|
||||
#endif // VELODYNE_POINTCLOUD_CALIBRATION_H
|
||||
@@ -0,0 +1,102 @@
|
||||
// Copyright (C) 2009, 2010, 2011, 2012, 2019 Austin Robot Technology, Jack O'Quin, Jesse Vera, Joshua Whitley
|
||||
// All rights reserved.
|
||||
//
|
||||
// Software License Agreement (BSD License 2.0)
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions
|
||||
// are met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following
|
||||
// disclaimer in the documentation and/or other materials provided
|
||||
// with the distribution.
|
||||
// * Neither the name of {copyright_holder} nor the names of its
|
||||
// contributors may be used to endorse or promote products derived
|
||||
// from this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
// POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
/** @file
|
||||
|
||||
This class converts raw Velodyne 3D LIDAR packets to PointCloud2.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef VELODYNE_POINTCLOUD_CONVERT_H
|
||||
#define VELODYNE_POINTCLOUD_CONVERT_H
|
||||
|
||||
#include <string>
|
||||
|
||||
#include <ros/ros.h>
|
||||
#include <diagnostic_updater/diagnostic_updater.h>
|
||||
#include <diagnostic_updater/publisher.h>
|
||||
|
||||
#include <sensor_msgs/PointCloud2.h>
|
||||
#include <velodyne_pointcloud/rawdata.h>
|
||||
|
||||
#include <dynamic_reconfigure/server.h>
|
||||
#include <velodyne_pointcloud/CloudNodeConfig.h>
|
||||
|
||||
namespace velodyne_pointcloud
|
||||
{
|
||||
class Convert
|
||||
{
|
||||
public:
|
||||
Convert(
|
||||
ros::NodeHandle node,
|
||||
ros::NodeHandle private_nh,
|
||||
std::string const & node_name = ros::this_node::getName());
|
||||
~Convert() {}
|
||||
|
||||
private:
|
||||
void callback(velodyne_pointcloud::CloudNodeConfig &config, uint32_t level);
|
||||
void processScan(const velodyne_msgs::VelodyneScan::ConstPtr &scanMsg);
|
||||
|
||||
boost::shared_ptr<dynamic_reconfigure::Server<velodyne_pointcloud::CloudNodeConfig> > srv_;
|
||||
|
||||
boost::shared_ptr<velodyne_rawdata::RawData> data_;
|
||||
ros::Subscriber velodyne_scan_;
|
||||
ros::Publisher output_;
|
||||
|
||||
boost::shared_ptr<velodyne_rawdata::DataContainerBase> container_ptr_;
|
||||
|
||||
boost::mutex reconfigure_mtx_;
|
||||
|
||||
/// configuration parameters
|
||||
typedef struct
|
||||
{
|
||||
std::string target_frame; ///< target frame
|
||||
std::string fixed_frame; ///< fixed frame
|
||||
bool organize_cloud; ///< enable/disable organized cloud structure
|
||||
double max_range; ///< maximum range to publish
|
||||
double min_range; ///< minimum range to publish
|
||||
uint16_t num_lasers; ///< number of lasers
|
||||
int npackets; ///< number of packets to combine
|
||||
}
|
||||
Config;
|
||||
Config config_;
|
||||
bool first_rcfg_call;
|
||||
|
||||
// diagnostics updater
|
||||
diagnostic_updater::Updater diagnostics_;
|
||||
double diag_min_freq_;
|
||||
double diag_max_freq_;
|
||||
boost::shared_ptr<diagnostic_updater::TopicDiagnostic> diag_topic_;
|
||||
};
|
||||
} // namespace velodyne_pointcloud
|
||||
|
||||
#endif // VELODYNE_POINTCLOUD_CONVERT_H
|
||||
@@ -0,0 +1,208 @@
|
||||
#ifndef VELODYNE_POINTCLOUD_DATACONTAINERBASE_H
|
||||
#define VELODYNE_POINTCLOUD_DATACONTAINERBASE_H
|
||||
// Copyright (C) 2012, 2019 Austin Robot Technology, Jack O'Quin, Joshua Whitley, Sebastian Pütz
|
||||
// All rights reserved.
|
||||
//
|
||||
// Software License Agreement (BSD License 2.0)
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions
|
||||
// are met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following
|
||||
// disclaimer in the documentation and/or other materials provided
|
||||
// with the distribution.
|
||||
// * Neither the name of {copyright_holder} nor the names of its
|
||||
// contributors may be used to endorse or promote products derived
|
||||
// from this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
// POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
#include <tf/transform_listener.h>
|
||||
#include <velodyne_msgs/VelodyneScan.h>
|
||||
#include <sensor_msgs/point_cloud2_iterator.h>
|
||||
#include <Eigen/Dense>
|
||||
#include <string>
|
||||
#include <algorithm>
|
||||
#include <cstdarg>
|
||||
|
||||
namespace velodyne_rawdata
|
||||
{
|
||||
class DataContainerBase
|
||||
{
|
||||
public:
|
||||
DataContainerBase(const double max_range, const double min_range, const std::string& target_frame,
|
||||
const std::string& fixed_frame, const unsigned int init_width, const unsigned int init_height,
|
||||
const bool is_dense, const unsigned int scans_per_packet,
|
||||
boost::shared_ptr<tf::TransformListener>& tf_ptr, int fields, ...)
|
||||
: config_(max_range, min_range, target_frame, fixed_frame, init_width, init_height, is_dense, scans_per_packet)
|
||||
, tf_ptr(tf_ptr)
|
||||
{
|
||||
va_list vl;
|
||||
cloud.fields.clear();
|
||||
cloud.fields.reserve(fields);
|
||||
va_start(vl, fields);
|
||||
int offset = 0;
|
||||
for (int i = 0; i < fields; ++i)
|
||||
{
|
||||
// Create the corresponding PointField
|
||||
std::string name(va_arg(vl, char*));
|
||||
int count(va_arg(vl, int));
|
||||
int datatype(va_arg(vl, int));
|
||||
offset = addPointField(cloud, name, count, datatype, offset);
|
||||
}
|
||||
va_end(vl);
|
||||
cloud.point_step = offset;
|
||||
cloud.row_step = init_width * cloud.point_step;
|
||||
if (config_.transform && !tf_ptr)
|
||||
{
|
||||
tf_ptr = boost::shared_ptr<tf::TransformListener>(new tf::TransformListener);
|
||||
}
|
||||
}
|
||||
|
||||
struct Config
|
||||
{
|
||||
double max_range; ///< maximum range to publish
|
||||
double min_range; ///< minimum range to publish
|
||||
std::string target_frame; ///< target frame to transform a point
|
||||
std::string fixed_frame; ///< fixed frame used for transform
|
||||
unsigned int init_width;
|
||||
unsigned int init_height;
|
||||
bool is_dense;
|
||||
unsigned int scans_per_packet;
|
||||
bool transform; ///< enable / disable transform points
|
||||
|
||||
Config(double max_range, double min_range, std::string target_frame, std::string fixed_frame,
|
||||
unsigned int init_width, unsigned int init_height, bool is_dense, unsigned int scans_per_packet)
|
||||
: max_range(max_range)
|
||||
, min_range(min_range)
|
||||
, target_frame(target_frame)
|
||||
, fixed_frame(fixed_frame)
|
||||
, transform(fixed_frame != target_frame)
|
||||
, init_width(init_width)
|
||||
, init_height(init_height)
|
||||
, is_dense(is_dense)
|
||||
, scans_per_packet(scans_per_packet)
|
||||
{
|
||||
ROS_INFO_STREAM("Initialized container with "
|
||||
<< "min_range: " << min_range << ", max_range: " << max_range
|
||||
<< ", target_frame: " << target_frame << ", fixed_frame: " << fixed_frame
|
||||
<< ", init_width: " << init_width << ", init_height: " << init_height
|
||||
<< ", is_dense: " << is_dense << ", scans_per_packet: " << scans_per_packet);
|
||||
}
|
||||
};
|
||||
|
||||
virtual void setup(const velodyne_msgs::VelodyneScan::ConstPtr& scan_msg)
|
||||
{
|
||||
cloud.header = scan_msg->header;
|
||||
cloud.data.resize(scan_msg->packets.size() * config_.scans_per_packet * cloud.point_step);
|
||||
cloud.width = config_.init_width;
|
||||
cloud.height = config_.init_height;
|
||||
cloud.is_dense = static_cast<uint8_t>(config_.is_dense);
|
||||
}
|
||||
|
||||
virtual void addPoint(float x, float y, float z, const uint16_t ring, const uint16_t azimuth, const float distance,
|
||||
const float intensity, const float time) = 0;
|
||||
virtual void newLine() = 0;
|
||||
|
||||
const sensor_msgs::PointCloud2& finishCloud()
|
||||
{
|
||||
cloud.data.resize(cloud.point_step * cloud.width * cloud.height);
|
||||
cloud.row_step = cloud.point_step * cloud.width;
|
||||
|
||||
if (!config_.target_frame.empty())
|
||||
{
|
||||
cloud.header.frame_id = config_.target_frame;
|
||||
}
|
||||
|
||||
ROS_DEBUG_STREAM("Prepared cloud width" << cloud.height * cloud.width
|
||||
<< " Velodyne points, time: " << cloud.header.stamp);
|
||||
return cloud;
|
||||
}
|
||||
|
||||
void configure(const double max_range, const double min_range, const std::string fixed_frame,
|
||||
const std::string target_frame)
|
||||
{
|
||||
config_.max_range = max_range;
|
||||
config_.min_range = min_range;
|
||||
config_.fixed_frame = fixed_frame;
|
||||
config_.target_frame = target_frame;
|
||||
|
||||
config_.transform = fixed_frame.compare(target_frame) != 0;
|
||||
if (config_.transform && !tf_ptr)
|
||||
{
|
||||
tf_ptr = boost::shared_ptr<tf::TransformListener>(new tf::TransformListener);
|
||||
}
|
||||
}
|
||||
|
||||
sensor_msgs::PointCloud2 cloud;
|
||||
|
||||
inline void vectorTfToEigen(tf::Vector3& tf_vec, Eigen::Vector3f& eigen_vec)
|
||||
{
|
||||
eigen_vec(0) = tf_vec[0];
|
||||
eigen_vec(1) = tf_vec[1];
|
||||
eigen_vec(2) = tf_vec[2];
|
||||
}
|
||||
|
||||
inline bool computeTransformation(const ros::Time& time)
|
||||
{
|
||||
tf::StampedTransform transform;
|
||||
try
|
||||
{
|
||||
tf_ptr->lookupTransform(config_.target_frame, cloud.header.frame_id, time, transform);
|
||||
}
|
||||
catch (tf::LookupException& e)
|
||||
{
|
||||
ROS_ERROR("%s", e.what());
|
||||
return false;
|
||||
}
|
||||
catch (tf::ExtrapolationException& e)
|
||||
{
|
||||
ROS_ERROR("%s", e.what());
|
||||
return false;
|
||||
}
|
||||
|
||||
tf::Quaternion quaternion = transform.getRotation();
|
||||
Eigen::Quaternionf rotation(quaternion.w(), quaternion.x(), quaternion.y(), quaternion.z());
|
||||
|
||||
Eigen::Vector3f eigen_origin;
|
||||
vectorTfToEigen(transform.getOrigin(), eigen_origin);
|
||||
Eigen::Translation3f translation(eigen_origin);
|
||||
transformation = translation * rotation;
|
||||
return true;
|
||||
}
|
||||
|
||||
inline void transformPoint(float& x, float& y, float& z)
|
||||
{
|
||||
Eigen::Vector3f p = transformation * Eigen::Vector3f(x, y, z);
|
||||
x = p.x();
|
||||
y = p.y();
|
||||
z = p.z();
|
||||
}
|
||||
|
||||
inline bool pointInRange(float range)
|
||||
{
|
||||
return (range >= config_.min_range && range <= config_.max_range);
|
||||
}
|
||||
|
||||
protected:
|
||||
Config config_;
|
||||
boost::shared_ptr<tf::TransformListener> tf_ptr; ///< transform listener
|
||||
Eigen::Affine3f transformation;
|
||||
};
|
||||
} /* namespace velodyne_rawdata */
|
||||
#endif // VELODYNE_POINTCLOUD_DATACONTAINERBASE_H
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
// Copyright (C) 2012, 2019 Austin Robot Technology, Jack O'Quin, Joshua Whitley, Sebastian Pütz
|
||||
// All rights reserved.
|
||||
//
|
||||
// Software License Agreement (BSD License 2.0)
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions
|
||||
// are met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following
|
||||
// disclaimer in the documentation and/or other materials provided
|
||||
// with the distribution.
|
||||
// * Neither the name of {copyright_holder} nor the names of its
|
||||
// contributors may be used to endorse or promote products derived
|
||||
// from this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
// POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
#ifndef VELODYNE_POINTCLOUD_ORGANIZED_CLOUDXYZIR_H
|
||||
#define VELODYNE_POINTCLOUD_ORGANIZED_CLOUDXYZIR_H
|
||||
|
||||
#include <velodyne_pointcloud/datacontainerbase.h>
|
||||
#include <sensor_msgs/point_cloud2_iterator.h>
|
||||
#include <string>
|
||||
|
||||
namespace velodyne_pointcloud
|
||||
{
|
||||
class OrganizedCloudXYZIR : public velodyne_rawdata::DataContainerBase
|
||||
{
|
||||
public:
|
||||
OrganizedCloudXYZIR(const double max_range, const double min_range, const std::string& target_frame,
|
||||
const std::string& fixed_frame, const unsigned int num_lasers, const unsigned int scans_per_block,
|
||||
boost::shared_ptr<tf::TransformListener> tf_ptr = boost::shared_ptr<tf::TransformListener>());
|
||||
|
||||
virtual void newLine();
|
||||
|
||||
virtual void setup(const velodyne_msgs::VelodyneScan::ConstPtr& scan_msg);
|
||||
|
||||
virtual void addPoint(float x, float y, float z, const uint16_t ring, const uint16_t azimuth, const float distance,
|
||||
const float intensity, const float time);
|
||||
|
||||
private:
|
||||
sensor_msgs::PointCloud2Iterator<float> iter_x, iter_y, iter_z, iter_intensity, iter_time;
|
||||
sensor_msgs::PointCloud2Iterator<uint16_t> iter_ring;
|
||||
};
|
||||
} /* namespace velodyne_pointcloud */
|
||||
#endif // VELODYNE_POINTCLOUD_ORGANIZED_CLOUDXYZIR_H
|
||||
@@ -0,0 +1,60 @@
|
||||
// Copyright (C) 2012, 2019 Austin Robot Technology, Jack O'Quin, Joshua Whitley, Sebastian Pütz
|
||||
// All rights reserved.
|
||||
//
|
||||
// Software License Agreement (BSD License 2.0)
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions
|
||||
// are met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following
|
||||
// disclaimer in the documentation and/or other materials provided
|
||||
// with the distribution.
|
||||
// * Neither the name of {copyright_holder} nor the names of its
|
||||
// contributors may be used to endorse or promote products derived
|
||||
// from this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
// POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
#ifndef VELODYNE_POINTCLOUD_POINTCLOUDXYZIR_H
|
||||
#define VELODYNE_POINTCLOUD_POINTCLOUDXYZIR_H
|
||||
|
||||
#include <velodyne_pointcloud/datacontainerbase.h>
|
||||
#include <string>
|
||||
|
||||
namespace velodyne_pointcloud
|
||||
{
|
||||
class PointcloudXYZIR : public velodyne_rawdata::DataContainerBase
|
||||
{
|
||||
public:
|
||||
PointcloudXYZIR(const double max_range, const double min_range, const std::string& target_frame,
|
||||
const std::string& fixed_frame, const unsigned int scans_per_block,
|
||||
boost::shared_ptr<tf::TransformListener> tf_ptr = boost::shared_ptr<tf::TransformListener>());
|
||||
|
||||
virtual void newLine();
|
||||
|
||||
virtual void setup(const velodyne_msgs::VelodyneScan::ConstPtr& scan_msg);
|
||||
|
||||
virtual void addPoint(float x, float y, float z, const uint16_t ring, const uint16_t azimuth,
|
||||
const float distance, const float intensity, const float time);
|
||||
|
||||
sensor_msgs::PointCloud2Iterator<float> iter_x, iter_y, iter_z, iter_intensity, iter_time;
|
||||
sensor_msgs::PointCloud2Iterator<uint16_t> iter_ring;
|
||||
};
|
||||
} // namespace velodyne_pointcloud
|
||||
|
||||
#endif // VELODYNE_POINTCLOUD_POINTCLOUDXYZIR_H
|
||||
@@ -0,0 +1,216 @@
|
||||
// Copyright (C) 2007, 2009, 2010, 2012, 2019 Yaxin Liu, Patrick Beeson, Jack O'Quin, Joshua Whitley
|
||||
// All rights reserved.
|
||||
//
|
||||
// Software License Agreement (BSD License 2.0)
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions
|
||||
// are met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following
|
||||
// disclaimer in the documentation and/or other materials provided
|
||||
// with the distribution.
|
||||
// * Neither the name of {copyright_holder} nor the names of its
|
||||
// contributors may be used to endorse or promote products derived
|
||||
// from this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
// POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
/** @file
|
||||
*
|
||||
* @brief Interfaces for interpreting raw packets from the Velodyne 3D LIDAR.
|
||||
*
|
||||
* @author Yaxin Liu
|
||||
* @author Patrick Beeson
|
||||
* @author Jack O'Quin
|
||||
*/
|
||||
|
||||
#ifndef VELODYNE_POINTCLOUD_RAWDATA_H
|
||||
#define VELODYNE_POINTCLOUD_RAWDATA_H
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdint.h>
|
||||
#include <string>
|
||||
#include <boost/format.hpp>
|
||||
#include <math.h>
|
||||
#include <vector>
|
||||
|
||||
#include <ros/ros.h>
|
||||
#include <velodyne_msgs/VelodyneScan.h>
|
||||
#include <velodyne_pointcloud/calibration.h>
|
||||
#include <velodyne_pointcloud/datacontainerbase.h>
|
||||
|
||||
namespace velodyne_rawdata
|
||||
{
|
||||
/**
|
||||
* Raw Velodyne packet constants and structures.
|
||||
*/
|
||||
static const int SIZE_BLOCK = 100;
|
||||
static const int RAW_SCAN_SIZE = 3;
|
||||
static const int SCANS_PER_BLOCK = 32;
|
||||
static const int BLOCK_DATA_SIZE = (SCANS_PER_BLOCK * RAW_SCAN_SIZE);
|
||||
|
||||
static const float ROTATION_RESOLUTION = 0.01f; // [deg]
|
||||
static const uint16_t ROTATION_MAX_UNITS = 36000u; // [deg/100]
|
||||
|
||||
/** @todo make this work for both big and little-endian machines */
|
||||
static const uint16_t UPPER_BANK = 0xeeff;
|
||||
static const uint16_t LOWER_BANK = 0xddff;
|
||||
|
||||
/** Special Defines for VLP16 support **/
|
||||
static const int VLP16_FIRINGS_PER_BLOCK = 2;
|
||||
static const int VLP16_SCANS_PER_FIRING = 16;
|
||||
static const float VLP16_BLOCK_TDURATION = 110.592f; // [µs]
|
||||
static const float VLP16_DSR_TOFFSET = 2.304f; // [µs]
|
||||
static const float VLP16_FIRING_TOFFSET = 55.296f; // [µs]
|
||||
|
||||
/** \brief Raw Velodyne data block.
|
||||
*
|
||||
* Each block contains data from either the upper or lower laser
|
||||
* bank. The device returns three times as many upper bank blocks.
|
||||
*
|
||||
* use stdint.h types, so things work with both 64 and 32-bit machines
|
||||
*/
|
||||
typedef struct raw_block
|
||||
{
|
||||
uint16_t header; ///< UPPER_BANK or LOWER_BANK
|
||||
uint16_t rotation; ///< 0-35999, divide by 100 to get degrees
|
||||
uint8_t data[BLOCK_DATA_SIZE];
|
||||
}
|
||||
raw_block_t;
|
||||
|
||||
/** used for unpacking the first two data bytes in a block
|
||||
*
|
||||
* They are packed into the actual data stream misaligned. I doubt
|
||||
* this works on big endian machines.
|
||||
*/
|
||||
union two_bytes
|
||||
{
|
||||
uint16_t uint;
|
||||
uint8_t bytes[2];
|
||||
};
|
||||
|
||||
static const int PACKET_SIZE = 1206;
|
||||
static const int BLOCKS_PER_PACKET = 12;
|
||||
static const int PACKET_STATUS_SIZE = 4;
|
||||
static const int SCANS_PER_PACKET = (SCANS_PER_BLOCK * BLOCKS_PER_PACKET);
|
||||
|
||||
/** \brief Raw Velodyne packet.
|
||||
*
|
||||
* revolution is described in the device manual as incrementing
|
||||
* (mod 65536) for each physical turn of the device. Our device
|
||||
* seems to alternate between two different values every third
|
||||
* packet. One value increases, the other decreases.
|
||||
*
|
||||
* \todo figure out if revolution is only present for one of the
|
||||
* two types of status fields
|
||||
*
|
||||
* status has either a temperature encoding or the microcode level
|
||||
*/
|
||||
typedef struct raw_packet
|
||||
{
|
||||
raw_block_t blocks[BLOCKS_PER_PACKET];
|
||||
uint16_t revolution;
|
||||
uint8_t status[PACKET_STATUS_SIZE];
|
||||
}
|
||||
raw_packet_t;
|
||||
|
||||
/** \brief Velodyne data conversion class */
|
||||
class RawData
|
||||
{
|
||||
public:
|
||||
RawData();
|
||||
~RawData()
|
||||
{
|
||||
}
|
||||
|
||||
/** \brief Set up for data processing.
|
||||
*
|
||||
* Perform initializations needed before data processing can
|
||||
* begin:
|
||||
*
|
||||
* - read device-specific angles calibration
|
||||
*
|
||||
* @param private_nh private node handle for ROS parameters
|
||||
* @returns an optional calibration
|
||||
*/
|
||||
boost::optional<velodyne_pointcloud::Calibration> setup(ros::NodeHandle private_nh);
|
||||
|
||||
|
||||
/** \brief Set up for data processing offline.
|
||||
* Performs the same initialization as in setup, in the abscence of a ros::NodeHandle.
|
||||
* this method is useful if unpacking data directly from bag files, without passing
|
||||
* through a communication overhead.
|
||||
*
|
||||
* @param calibration_file path to the calibration file
|
||||
* @param max_range_ cutoff for maximum range
|
||||
* @param min_range_ cutoff for minimum range
|
||||
* @returns 0 if successful;
|
||||
* errno value for failure
|
||||
*/
|
||||
int setupOffline(std::string calibration_file, double max_range_, double min_range_);
|
||||
|
||||
void unpack(const velodyne_msgs::VelodynePacket& pkt, DataContainerBase& data,
|
||||
const ros::Time& scan_start_time);
|
||||
|
||||
void setParameters(double min_range, double max_range, double view_direction, double view_width);
|
||||
|
||||
int scansPerPacket() const;
|
||||
|
||||
private:
|
||||
/** configuration parameters */
|
||||
typedef struct
|
||||
{
|
||||
std::string model;
|
||||
std::string calibrationFile; ///< calibration file name
|
||||
double max_range; ///< maximum range to publish
|
||||
double min_range; ///< minimum range to publish
|
||||
int min_angle; ///< minimum angle to publish
|
||||
int max_angle; ///< maximum angle to publish
|
||||
|
||||
double tmp_min_angle;
|
||||
double tmp_max_angle;
|
||||
}
|
||||
Config;
|
||||
Config config_;
|
||||
|
||||
/**
|
||||
* Calibration file
|
||||
*/
|
||||
velodyne_pointcloud::Calibration calibration_;
|
||||
float sin_rot_table_[ROTATION_MAX_UNITS];
|
||||
float cos_rot_table_[ROTATION_MAX_UNITS];
|
||||
|
||||
// timing offset lookup table
|
||||
std::vector< std::vector<float> > timing_offsets;
|
||||
|
||||
/** \brief setup per-point timing offsets
|
||||
*
|
||||
* Runs during initialization and determines the firing time for each point in the scan
|
||||
*
|
||||
* NOTE: Does not support all sensors yet (vlp16, vlp32, and hdl32 are currently supported)
|
||||
*/
|
||||
bool buildTimings();
|
||||
|
||||
/** add private function to handle the VLP16 **/
|
||||
void unpack_vlp16(const velodyne_msgs::VelodynePacket& pkt, DataContainerBase& data,
|
||||
const ros::Time& scan_start_time);
|
||||
};
|
||||
|
||||
} // namespace velodyne_rawdata
|
||||
|
||||
#endif // VELODYNE_POINTCLOUD_RAWDATA_H
|
||||
@@ -0,0 +1,112 @@
|
||||
// Copyright (C) 2009, 2010, 2011, 2012, 2019 Austin Robot Technology, Jack O'Quin, Jesse Vera, Joshua Whitley,
|
||||
// Sebastian Pütz All rights reserved.
|
||||
//
|
||||
// Software License Agreement (BSD License 2.0)
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions
|
||||
// are met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following
|
||||
// disclaimer in the documentation and/or other materials provided
|
||||
// with the distribution.
|
||||
// * Neither the name of {copyright_holder} nor the names of its
|
||||
// contributors may be used to endorse or promote products derived
|
||||
// from this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
// POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
/** @file
|
||||
|
||||
This class transforms raw Velodyne 3D LIDAR packets to PointCloud2
|
||||
in the /map frame of reference.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef VELODYNE_POINTCLOUD_TRANSFORM_H
|
||||
#define VELODYNE_POINTCLOUD_TRANSFORM_H
|
||||
|
||||
#include <string>
|
||||
#include <ros/ros.h>
|
||||
#include "tf/message_filter.h"
|
||||
#include "message_filters/subscriber.h"
|
||||
#include <diagnostic_updater/diagnostic_updater.h>
|
||||
#include <diagnostic_updater/publisher.h>
|
||||
#include <sensor_msgs/PointCloud2.h>
|
||||
|
||||
#include <velodyne_pointcloud/rawdata.h>
|
||||
#include <velodyne_pointcloud/pointcloudXYZIR.h>
|
||||
|
||||
#include <dynamic_reconfigure/server.h>
|
||||
#include <velodyne_pointcloud/TransformNodeConfig.h>
|
||||
|
||||
namespace velodyne_pointcloud
|
||||
{
|
||||
using TransformNodeCfg = velodyne_pointcloud::TransformNodeConfig;
|
||||
|
||||
class Transform
|
||||
{
|
||||
public:
|
||||
Transform(
|
||||
ros::NodeHandle node,
|
||||
ros::NodeHandle private_nh,
|
||||
std::string const & node_name = ros::this_node::getName());
|
||||
~Transform()
|
||||
{
|
||||
}
|
||||
|
||||
private:
|
||||
void processScan(const velodyne_msgs::VelodyneScan::ConstPtr& scanMsg);
|
||||
|
||||
// Pointer to dynamic reconfigure service srv_
|
||||
boost::shared_ptr<dynamic_reconfigure::Server<velodyne_pointcloud::TransformNodeConfig>> srv_;
|
||||
void reconfigure_callback(velodyne_pointcloud::TransformNodeConfig& config, uint32_t level);
|
||||
|
||||
const std::string tf_prefix_;
|
||||
boost::shared_ptr<velodyne_rawdata::RawData> data_;
|
||||
message_filters::Subscriber<velodyne_msgs::VelodyneScan> velodyne_scan_;
|
||||
ros::Publisher output_;
|
||||
boost::shared_ptr<tf::MessageFilter<velodyne_msgs::VelodyneScan>> tf_filter_ptr_;
|
||||
boost::shared_ptr<tf::TransformListener> tf_ptr_;
|
||||
|
||||
/// configuration parameters
|
||||
typedef struct
|
||||
{
|
||||
std::string target_frame; ///< target frame
|
||||
std::string fixed_frame; ///< fixed frame
|
||||
bool organize_cloud; ///< enable/disable organized cloud structure
|
||||
double max_range; ///< maximum range to publish
|
||||
double min_range; ///< minimum range to publish
|
||||
uint16_t num_lasers; ///< number of lasers
|
||||
}
|
||||
Config;
|
||||
Config config_;
|
||||
|
||||
bool first_rcfg_call;
|
||||
|
||||
boost::shared_ptr<velodyne_rawdata::DataContainerBase> container_ptr;
|
||||
|
||||
// diagnostics updater
|
||||
diagnostic_updater::Updater diagnostics_;
|
||||
double diag_min_freq_;
|
||||
double diag_max_freq_;
|
||||
boost::shared_ptr<diagnostic_updater::TopicDiagnostic> diag_topic_;
|
||||
boost::mutex reconfigure_mtx_;
|
||||
};
|
||||
} // namespace velodyne_pointcloud
|
||||
|
||||
#endif // VELODYNE_POINTCLOUD_TRANSFORM_H
|
||||
@@ -0,0 +1,62 @@
|
||||
<!-- -*- mode: XML -*- -->
|
||||
<!-- run velodyne_pointcloud/CloudNodelet in a nodelet manager for an HDL-32E -->
|
||||
|
||||
<launch>
|
||||
|
||||
<!-- declare arguments with default values -->
|
||||
<arg name="calibration" default="$(find velodyne_pointcloud)/params/32db.yaml"/>
|
||||
<arg name="device_ip" default="" />
|
||||
<arg name="frame_id" default="velodyne" />
|
||||
<arg name="manager" default="$(arg frame_id)_nodelet_manager" />
|
||||
<arg name="max_range" default="130.0" />
|
||||
<arg name="min_range" default="0.4" />
|
||||
<arg name="pcap" default="" />
|
||||
<arg name="port" default="2368" />
|
||||
<arg name="read_fast" default="false" />
|
||||
<arg name="read_once" default="false" />
|
||||
<arg name="repeat_delay" default="0.0" />
|
||||
<arg name="rpm" default="600.0" />
|
||||
<arg name="gps_time" default="false" />
|
||||
<arg name="cut_angle" default="-0.01" />
|
||||
<arg name="timestamp_first_packet" default="false" />
|
||||
<arg name="laserscan_ring" default="-1" />
|
||||
<arg name="laserscan_resolution" default="0.007" />
|
||||
<arg name="organize_cloud" default="false" />
|
||||
|
||||
<!-- start nodelet manager and driver nodelets -->
|
||||
<include file="$(find velodyne_driver)/launch/nodelet_manager.launch">
|
||||
<arg name="device_ip" value="$(arg device_ip)"/>
|
||||
<arg name="frame_id" value="$(arg frame_id)"/>
|
||||
<arg name="manager" value="$(arg manager)" />
|
||||
<arg name="model" value="32E"/>
|
||||
<arg name="pcap" value="$(arg pcap)"/>
|
||||
<arg name="port" value="$(arg port)"/>
|
||||
<arg name="read_fast" value="$(arg read_fast)"/>
|
||||
<arg name="read_once" value="$(arg read_once)"/>
|
||||
<arg name="repeat_delay" value="$(arg repeat_delay)"/>
|
||||
<arg name="rpm" value="$(arg rpm)"/>
|
||||
<arg name="gps_time" value="$(arg gps_time)"/>
|
||||
<arg name="cut_angle" value="$(arg cut_angle)"/>
|
||||
<arg name="timestamp_first_packet" value="$(arg timestamp_first_packet)"/>
|
||||
</include>
|
||||
|
||||
<!-- start cloud nodelet -->
|
||||
<include file="$(find velodyne_pointcloud)/launch/cloud_nodelet.launch">
|
||||
<arg name="model" value="32E"/>
|
||||
<arg name="calibration" value="$(arg calibration)"/>
|
||||
<arg name="manager" value="$(arg manager)" />
|
||||
<arg name="fixed_frame" value="$(arg frame_id)" />
|
||||
<arg name="target_frame" value="$(arg frame_id)" />
|
||||
<arg name="max_range" value="$(arg max_range)"/>
|
||||
<arg name="min_range" value="$(arg min_range)"/>
|
||||
<arg name="organize_cloud" value="$(arg organize_cloud)"/>
|
||||
</include>
|
||||
|
||||
<!-- start laserscan nodelet -->
|
||||
<include file="$(find velodyne_pointcloud)/launch/laserscan_nodelet.launch">
|
||||
<arg name="manager" value="$(arg manager)" />
|
||||
<arg name="ring" value="$(arg laserscan_ring)"/>
|
||||
<arg name="resolution" value="$(arg laserscan_resolution)"/>
|
||||
</include>
|
||||
|
||||
</launch>
|
||||
@@ -0,0 +1,61 @@
|
||||
<!-- -*- mode: XML -*- -->
|
||||
<!-- run velodyne_pointcloud/CloudNodelet in a nodelet manager for an HDL-32E -->
|
||||
|
||||
<launch>
|
||||
|
||||
<!-- declare arguments with default values -->
|
||||
<arg name="calibration" default="$(find velodyne_pointcloud)/params/64e_s3-xiesc.yaml"/>
|
||||
<arg name="device_ip" default="" />
|
||||
<arg name="frame_id" default="velodyne" />
|
||||
<arg name="manager" default="$(arg frame_id)_nodelet_manager" />
|
||||
<arg name="max_range" default="130.0" />
|
||||
<arg name="min_range" default="0.4" />
|
||||
<arg name="pcap" default="" />
|
||||
<arg name="port" default="2368" />
|
||||
<arg name="read_fast" default="false" />
|
||||
<arg name="read_once" default="false" />
|
||||
<arg name="repeat_delay" default="0.0" />
|
||||
<arg name="rpm" default="600.0" />
|
||||
<arg name="gps_time" default="false" />
|
||||
<arg name="cut_angle" default="-0.01" />
|
||||
<arg name="timestamp_first_packet" default="false" />
|
||||
<arg name="laserscan_ring" default="-1" />
|
||||
<arg name="laserscan_resolution" default="0.007" />
|
||||
<arg name="model" value="64E_S3"/>
|
||||
|
||||
<!-- start nodelet manager and driver nodelets -->
|
||||
<include file="$(find velodyne_driver)/launch/nodelet_manager.launch">
|
||||
<arg name="device_ip" value="$(arg device_ip)"/>
|
||||
<arg name="frame_id" value="$(arg frame_id)"/>
|
||||
<arg name="manager" value="$(arg manager)" />
|
||||
<arg name="model" value="$(arg model)"/>
|
||||
<arg name="pcap" value="$(arg pcap)"/>
|
||||
<arg name="port" value="$(arg port)"/>
|
||||
<arg name="read_fast" value="$(arg read_fast)"/>
|
||||
<arg name="read_once" value="$(arg read_once)"/>
|
||||
<arg name="repeat_delay" value="$(arg repeat_delay)"/>
|
||||
<arg name="rpm" value="$(arg rpm)"/>
|
||||
<arg name="gps_time" value="$(arg gps_time)"/>
|
||||
<arg name="cut_angle" value="$(arg cut_angle)"/>
|
||||
<arg name="timestamp_first_packet" value="$(arg timestamp_first_packet)"/>
|
||||
</include>
|
||||
|
||||
<!-- start cloud nodelet -->
|
||||
<include file="$(find velodyne_pointcloud)/launch/cloud_nodelet.launch">
|
||||
<arg name="model" value="$(arg model)"/>
|
||||
<arg name="calibration" value="$(arg calibration)"/>
|
||||
<arg name="manager" value="$(arg manager)" />
|
||||
<arg name="fixed_frame" value="$(arg frame_id)" />
|
||||
<arg name="target_frame" value="$(arg frame_id)" />
|
||||
<arg name="max_range" value="$(arg max_range)"/>
|
||||
<arg name="min_range" value="$(arg min_range)"/>
|
||||
</include>
|
||||
|
||||
<!-- start laserscan nodelet -->
|
||||
<include file="$(find velodyne_pointcloud)/launch/laserscan_nodelet.launch">
|
||||
<arg name="manager" value="$(arg manager)" />
|
||||
<arg name="ring" value="$(arg laserscan_ring)"/>
|
||||
<arg name="resolution" value="$(arg laserscan_resolution)"/>
|
||||
</include>
|
||||
|
||||
</launch>
|
||||
@@ -0,0 +1,62 @@
|
||||
<!-- -*- mode: XML -*- -->
|
||||
<!-- run velodyne_pointcloud/CloudNodelet in a nodelet manager for an VLP-32C -->
|
||||
|
||||
<launch>
|
||||
|
||||
<!-- declare arguments with default values -->
|
||||
<arg name="calibration" default="$(find velodyne_pointcloud)/params/VeloView-VLP-32C.yaml"/>
|
||||
<arg name="device_ip" default="" />
|
||||
<arg name="frame_id" default="velodyne" />
|
||||
<arg name="manager" default="$(arg frame_id)_nodelet_manager" />
|
||||
<arg name="max_range" default="200.0" />
|
||||
<arg name="min_range" default="0.4" />
|
||||
<arg name="pcap" default="" />
|
||||
<arg name="port" default="2368" />
|
||||
<arg name="read_fast" default="false" />
|
||||
<arg name="read_once" default="false" />
|
||||
<arg name="repeat_delay" default="0.0" />
|
||||
<arg name="rpm" default="600.0" />
|
||||
<arg name="gps_time" default="false" />
|
||||
<arg name="cut_angle" default="-0.01" />
|
||||
<arg name="timestamp_first_packet" default="false" />
|
||||
<arg name="laserscan_ring" default="-1" />
|
||||
<arg name="laserscan_resolution" default="0.007" />
|
||||
<arg name="organize_cloud" default="false" />
|
||||
|
||||
<!-- start nodelet manager and driver nodelets -->
|
||||
<include file="$(find velodyne_driver)/launch/nodelet_manager.launch">
|
||||
<arg name="device_ip" value="$(arg device_ip)"/>
|
||||
<arg name="frame_id" value="$(arg frame_id)"/>
|
||||
<arg name="manager" value="$(arg manager)" />
|
||||
<arg name="model" value="32C"/>
|
||||
<arg name="pcap" value="$(arg pcap)"/>
|
||||
<arg name="port" value="$(arg port)"/>
|
||||
<arg name="read_fast" value="$(arg read_fast)"/>
|
||||
<arg name="read_once" value="$(arg read_once)"/>
|
||||
<arg name="repeat_delay" value="$(arg repeat_delay)"/>
|
||||
<arg name="rpm" value="$(arg rpm)"/>
|
||||
<arg name="gps_time" value="$(arg gps_time)"/>
|
||||
<arg name="cut_angle" value="$(arg cut_angle)"/>
|
||||
<arg name="timestamp_first_packet" value="$(arg timestamp_first_packet)"/>
|
||||
</include>
|
||||
|
||||
<!-- start cloud nodelet -->
|
||||
<include file="$(find velodyne_pointcloud)/launch/cloud_nodelet.launch">
|
||||
<arg name="model" value="32C"/>
|
||||
<arg name="calibration" value="$(arg calibration)"/>
|
||||
<arg name="manager" value="$(arg manager)" />
|
||||
<arg name="fixed_frame" value="$(arg frame_id)" />
|
||||
<arg name="target_frame" value="$(arg frame_id)" />
|
||||
<arg name="max_range" value="$(arg max_range)"/>
|
||||
<arg name="min_range" value="$(arg min_range)"/>
|
||||
<arg name="organize_cloud" value="$(arg organize_cloud)"/>
|
||||
</include>
|
||||
|
||||
<!-- start laserscan nodelet -->
|
||||
<include file="$(find velodyne_pointcloud)/launch/laserscan_nodelet.launch">
|
||||
<arg name="manager" value="$(arg manager)" />
|
||||
<arg name="ring" value="$(arg laserscan_ring)"/>
|
||||
<arg name="resolution" value="$(arg laserscan_resolution)"/>
|
||||
</include>
|
||||
|
||||
</launch>
|
||||
@@ -0,0 +1,62 @@
|
||||
<!-- -*- mode: XML -*- -->
|
||||
<!-- run velodyne_pointcloud/CloudNodelet in a nodelet manager for a VLP-16 -->
|
||||
|
||||
<launch>
|
||||
|
||||
<!-- declare arguments with default values -->
|
||||
<arg name="calibration" default="$(find velodyne_pointcloud)/params/VLP16db.yaml"/>
|
||||
<arg name="device_ip" default="" />
|
||||
<arg name="frame_id" default="velodyne" />
|
||||
<arg name="manager" default="$(arg frame_id)_nodelet_manager" />
|
||||
<arg name="max_range" default="130.0" />
|
||||
<arg name="min_range" default="0.4" />
|
||||
<arg name="pcap" default="" />
|
||||
<arg name="port" default="2368" />
|
||||
<arg name="read_fast" default="false" />
|
||||
<arg name="read_once" default="false" />
|
||||
<arg name="repeat_delay" default="0.0" />
|
||||
<arg name="rpm" default="600.0" />
|
||||
<arg name="gps_time" default="false" />
|
||||
<arg name="cut_angle" default="-0.01" />
|
||||
<arg name="timestamp_first_packet" default="false" />
|
||||
<arg name="laserscan_ring" default="-1" />
|
||||
<arg name="laserscan_resolution" default="0.007" />
|
||||
<arg name="organize_cloud" default="false" />
|
||||
|
||||
<!-- start nodelet manager and driver nodelets -->
|
||||
<include file="$(find velodyne_driver)/launch/nodelet_manager.launch">
|
||||
<arg name="device_ip" value="$(arg device_ip)"/>
|
||||
<arg name="frame_id" value="$(arg frame_id)"/>
|
||||
<arg name="manager" value="$(arg manager)" />
|
||||
<arg name="model" value="VLP16"/>
|
||||
<arg name="pcap" value="$(arg pcap)"/>
|
||||
<arg name="port" value="$(arg port)"/>
|
||||
<arg name="read_fast" value="$(arg read_fast)"/>
|
||||
<arg name="read_once" value="$(arg read_once)"/>
|
||||
<arg name="repeat_delay" value="$(arg repeat_delay)"/>
|
||||
<arg name="rpm" value="$(arg rpm)"/>
|
||||
<arg name="gps_time" value="$(arg gps_time)"/>
|
||||
<arg name="cut_angle" value="$(arg cut_angle)"/>
|
||||
<arg name="timestamp_first_packet" value="$(arg timestamp_first_packet)"/>
|
||||
</include>
|
||||
|
||||
<!-- start cloud nodelet -->
|
||||
<include file="$(find velodyne_pointcloud)/launch/cloud_nodelet.launch">
|
||||
<arg name="model" value="VLP16"/>
|
||||
<arg name="calibration" value="$(arg calibration)"/>
|
||||
<arg name="manager" value="$(arg manager)" />
|
||||
<arg name="fixed_frame" value="$(arg frame_id)" />
|
||||
<arg name="target_frame" value="$(arg frame_id)" />
|
||||
<arg name="max_range" value="$(arg max_range)"/>
|
||||
<arg name="min_range" value="$(arg min_range)"/>
|
||||
<arg name="organize_cloud" value="$(arg organize_cloud)"/>
|
||||
</include>
|
||||
|
||||
<!-- start laserscan nodelet -->
|
||||
<!-- <include file="$(find velodyne_pointcloud)/launch/laserscan_nodelet.launch">
|
||||
<arg name="manager" value="$(arg manager)" />
|
||||
<arg name="ring" value="$(arg laserscan_ring)"/>
|
||||
<arg name="resolution" value="$(arg laserscan_resolution)"/>
|
||||
</include> -->
|
||||
|
||||
</launch>
|
||||
@@ -0,0 +1,24 @@
|
||||
<!-- -*- mode: XML -*- -->
|
||||
<!-- run velodyne_pointcloud/CloudNodelet in a nodelet manager -->
|
||||
|
||||
<launch>
|
||||
<arg name="model" default="" />
|
||||
<arg name="calibration" default="" />
|
||||
<arg name="manager" default="velodyne_nodelet_manager" />
|
||||
<arg name="fixed_frame" default="velodyne" />
|
||||
<arg name="target_frame" default="velodyne" />
|
||||
<arg name="max_range" default="130.0" />
|
||||
<arg name="min_range" default="0.9" />
|
||||
<arg name="organize_cloud" default="false" />
|
||||
|
||||
<node pkg="nodelet" type="nodelet" name="$(arg manager)_cloud"
|
||||
args="load velodyne_pointcloud/CloudNodelet $(arg manager)">
|
||||
<param name="model" value="$(arg model)"/>
|
||||
<param name="calibration" value="$(arg calibration)"/>
|
||||
<param name="fixed_frame" value="$(arg fixed_frame)"/>
|
||||
<param name="target_frame" value="$(arg target_frame)"/>
|
||||
<param name="max_range" value="$(arg max_range)"/>
|
||||
<param name="min_range" value="$(arg min_range)"/>
|
||||
<param name="organize_cloud" value="$(arg organize_cloud)"/>
|
||||
</node>
|
||||
</launch>
|
||||
@@ -0,0 +1,14 @@
|
||||
<!-- -*- mode: XML -*- -->
|
||||
<!-- run velodyne_laserscan/LaserScanNodelet in a nodelet manager -->
|
||||
|
||||
<launch>
|
||||
<arg name="manager" default="velodyne_nodelet_manager" />
|
||||
<arg name="ring" default="-1" />
|
||||
<arg name="resolution" default="0.007" />
|
||||
|
||||
<node pkg="nodelet" type="nodelet" name="$(arg manager)_laserscan"
|
||||
args="load velodyne_laserscan/LaserScanNodelet $(arg manager)">
|
||||
<param name="ring" value="$(arg ring)"/>
|
||||
<param name="resolution" value="$(arg resolution)"/>
|
||||
</node>
|
||||
</launch>
|
||||
@@ -0,0 +1,21 @@
|
||||
<!-- -*- mode: XML -*- -->
|
||||
<!-- run velodyne_pointcloud/TransformNodelet in a nodelet manager -->
|
||||
|
||||
<launch>
|
||||
<arg name="model" default="" />
|
||||
<arg name="calibration" default="" />
|
||||
<arg name="frame_id" default="map" />
|
||||
<arg name="manager" default="velodyne_nodelet_manager" />
|
||||
<arg name="max_range" default="130.0" />
|
||||
<arg name="min_range" default="0.9" />
|
||||
<arg name="organize_cloud" default="false" />
|
||||
<node pkg="nodelet" type="nodelet" name="$(arg manager)_transform"
|
||||
args="load velodyne_pointcloud/TransformNodelet $(arg manager)" >
|
||||
<param name="model" value="$(arg model)"/>
|
||||
<param name="calibration" value="$(arg calibration)"/>
|
||||
<param name="frame_id" value="$(arg frame_id)"/>
|
||||
<param name="max_range" value="$(arg max_range)"/>
|
||||
<param name="min_range" value="$(arg min_range)"/>
|
||||
<param name="organize_cloud" value="$(arg organize_cloud)"/>
|
||||
</node>
|
||||
</launch>
|
||||
@@ -0,0 +1,8 @@
|
||||
/**
|
||||
\mainpage
|
||||
\htmlinclude manifest.html
|
||||
|
||||
Nodes and nodelets for converting raw Velodyne 3D LIDAR data to point
|
||||
clouds.
|
||||
|
||||
*/
|
||||
@@ -0,0 +1,35 @@
|
||||
<class_libraries>
|
||||
|
||||
<library path="lib/libcloud_nodelet">
|
||||
<class name="velodyne_pointcloud/CloudNodelet"
|
||||
type="velodyne_pointcloud::CloudNodelet"
|
||||
base_class_type="nodelet::Nodelet">
|
||||
<description>
|
||||
Aggregates points from multiple packets, publishing PointCloud2.
|
||||
</description>
|
||||
</class>
|
||||
</library>
|
||||
|
||||
<library path="lib/libringcolors_nodelet">
|
||||
<class name="velodyne_pointcloud/RingColorsNodelet"
|
||||
type="velodyne_pointcloud::RingColorsNodelet"
|
||||
base_class_type="nodelet::Nodelet">
|
||||
<description>
|
||||
Converts a Velodyne PointCloud2 to PointXYZRGB, assigning colors
|
||||
for visualization of the laser rings.
|
||||
</description>
|
||||
</class>
|
||||
</library>
|
||||
|
||||
<library path="lib/libtransform_nodelet">
|
||||
<class name="velodyne_pointcloud/TransformNodelet"
|
||||
type="velodyne_pointcloud::TransformNodelet"
|
||||
base_class_type="nodelet::Nodelet">
|
||||
<description>
|
||||
Transforms packets into /map frame, publishing multiple packets
|
||||
as PointCloud2.
|
||||
</description>
|
||||
</class>
|
||||
</library>
|
||||
|
||||
</class_libraries>
|
||||
@@ -0,0 +1,45 @@
|
||||
<?xml version="1.0"?>
|
||||
<package format="2">
|
||||
<name>velodyne_pointcloud</name>
|
||||
<version>1.5.2</version>
|
||||
<description>
|
||||
Point cloud conversions for Velodyne 3D LIDARs.
|
||||
</description>
|
||||
<maintainer email="josh.whitley@autoware.org">Josh Whitley</maintainer>
|
||||
<author>Jack O'Quin</author>
|
||||
<author>Piyush Khandelwal</author>
|
||||
<author>Jesse Vera</author>
|
||||
<author>Sebastian Pütz</author>
|
||||
<license>BSD</license>
|
||||
<url type="website">http://ros.org/wiki/velodyne_pointcloud</url>
|
||||
<url type="repository">https://github.com/ros-drivers/velodyne</url>
|
||||
<url type="bugtracker">https://github.com/ros-drivers/velodyne/issues</url>
|
||||
|
||||
<buildtool_depend>catkin</buildtool_depend>
|
||||
|
||||
<build_depend>roslint</build_depend>
|
||||
|
||||
<depend>angles</depend>
|
||||
<depend>nodelet</depend>
|
||||
<depend>roscpp</depend>
|
||||
<depend>roslib</depend>
|
||||
<depend>sensor_msgs</depend>
|
||||
<depend>tf</depend>
|
||||
<depend>velodyne_driver</depend>
|
||||
<depend>velodyne_msgs</depend>
|
||||
<depend>yaml-cpp</depend>
|
||||
<depend>dynamic_reconfigure</depend>
|
||||
<depend>diagnostic_updater</depend>
|
||||
<depend>eigen</depend>
|
||||
|
||||
<exec_depend>velodyne_laserscan</exec_depend>
|
||||
|
||||
<test_depend>rosunit</test_depend>
|
||||
<test_depend>roslaunch</test_depend>
|
||||
<test_depend>rostest</test_depend>
|
||||
<test_depend>tf2_ros</test_depend>
|
||||
|
||||
<export>
|
||||
<nodelet plugin="${prefix}/nodelets.xml"/>
|
||||
</export>
|
||||
</package>
|
||||
@@ -0,0 +1,100 @@
|
||||
# standard Velodyne HDL-32E calibration parameters
|
||||
lasers:
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 0, rot_correction: 0.0,
|
||||
vert_correction: -0.5352924815866609, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 1, rot_correction: 0.0,
|
||||
vert_correction: -0.1628392174657417, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 2, rot_correction: 0.0,
|
||||
vert_correction: -0.5119050696099369, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 3, rot_correction: 0.0,
|
||||
vert_correction: -0.13962634015954636, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 4, rot_correction: 0.0,
|
||||
vert_correction: -0.4886921905584123, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 5, rot_correction: 0.0,
|
||||
vert_correction: -0.11641346285335104, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 6, rot_correction: 0.0,
|
||||
vert_correction: -0.4654793115068877, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 7, rot_correction: 0.0,
|
||||
vert_correction: -0.09302604738596851, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 8, rot_correction: 0.0,
|
||||
vert_correction: -0.44209189953016365, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 9, rot_correction: 0.0,
|
||||
vert_correction: -0.06981317007977318, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 10, rot_correction: 0.0,
|
||||
vert_correction: -0.4188790204786391, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 11, rot_correction: 0.0,
|
||||
vert_correction: -0.046600292773577856, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 12, rot_correction: 0.0,
|
||||
vert_correction: -0.39566614142711454, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 13, rot_correction: 0.0,
|
||||
vert_correction: -0.023212879051524585, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 14, rot_correction: 0.0,
|
||||
vert_correction: -0.3722787294503905, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 15, rot_correction: 0.0,
|
||||
vert_correction: 0.0, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 16, rot_correction: 0.0,
|
||||
vert_correction: -0.3490658503988659, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 17, rot_correction: 0.0,
|
||||
vert_correction: 0.023212879051524585, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 18, rot_correction: 0.0,
|
||||
vert_correction: -0.32585297134734137, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 19, rot_correction: 0.0,
|
||||
vert_correction: 0.046600292773577856, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 20, rot_correction: 0.0,
|
||||
vert_correction: -0.30246555937061725, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 21, rot_correction: 0.0,
|
||||
vert_correction: 0.06981317007977318, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 22, rot_correction: 0.0,
|
||||
vert_correction: -0.2792526803190927, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 23, rot_correction: 0.0,
|
||||
vert_correction: 0.09302604738596851, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 24, rot_correction: 0.0,
|
||||
vert_correction: -0.25603980126756815, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 25, rot_correction: 0.0,
|
||||
vert_correction: 0.11641346285335104, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 26, rot_correction: 0.0,
|
||||
vert_correction: -0.23265238929084414, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 27, rot_correction: 0.0,
|
||||
vert_correction: 0.13962634015954636, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 28, rot_correction: 0.0,
|
||||
vert_correction: -0.20943951023931956, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 29, rot_correction: 0.0,
|
||||
vert_correction: 0.1628392174657417, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 30, rot_correction: 0.0,
|
||||
vert_correction: -0.18622663118779495, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 31, rot_correction: 0.0,
|
||||
vert_correction: 0.18622663118779495, vert_offset_correction: 0.0}
|
||||
num_lasers: 32
|
||||
distance_resolution: 0.002
|
||||
@@ -0,0 +1,246 @@
|
||||
lasers:
|
||||
- {dist_correction: 1.5195264000000002, dist_correction_x: 1.5500304, dist_correction_y: 1.5231381,
|
||||
focal_distance: 12.0, focal_slope: 1.4, horiz_offset_correction: 0.025999999, laser_id: 0,
|
||||
max_intensity: 235.0, min_intensity: 30.0, rot_correction: -0.1248942899601548,
|
||||
vert_correction: -0.15304134919741974, vert_offset_correction: 0.19548199}
|
||||
- {dist_correction: 1.5145139, dist_correction_x: 1.5256960000000002, dist_correction_y: 1.5491043,
|
||||
focal_distance: 5.0, focal_slope: 1.0, horiz_offset_correction: -0.025999999, laser_id: 1,
|
||||
min_intensity: 40.0, rot_correction: -0.06924466398252106, vert_correction: -0.1458455539136526,
|
||||
vert_offset_correction: 0.19601112}
|
||||
- {dist_correction: 1.4963768, dist_correction_x: 1.5571011, dist_correction_y: 1.5456782999999998,
|
||||
focal_distance: 5.0, focal_slope: 0.89999998, horiz_offset_correction: 0.025999999,
|
||||
laser_id: 2, min_intensity: 60.0, rot_correction: 0.0824016906676694, vert_correction: 0.04339494149708345,
|
||||
vert_offset_correction: 0.20969539999999998}
|
||||
- {dist_correction: 1.3771207, dist_correction_x: 1.4103835, dist_correction_y: 1.4343457000000002,
|
||||
focal_distance: 9.5, focal_slope: 1.1, horiz_offset_correction: -0.025999999, laser_id: 3,
|
||||
min_intensity: 20.0, rot_correction: 0.137808349360133, vert_correction: 0.05196082373432465,
|
||||
vert_offset_correction: 0.21031273}
|
||||
- {dist_correction: 1.2947885, dist_correction_x: 1.3720455999999999, dist_correction_y: 1.4025244000000001,
|
||||
focal_distance: 10.0, focal_slope: 1.0, horiz_offset_correction: 0.025999999, laser_id: 4,
|
||||
min_intensity: 50.0, rot_correction: -0.011199603626188263, vert_correction: -0.1358262679404349,
|
||||
vert_offset_correction: 0.19674603999999998}
|
||||
- {dist_correction: 1.4395787000000002, dist_correction_x: 1.4801956, dist_correction_y: 1.5074649,
|
||||
focal_distance: 7.0, focal_slope: 1.0, horiz_offset_correction: -0.025999999, laser_id: 5,
|
||||
min_intensity: 30.0, rot_correction: 0.045795414990398894, vert_correction: -0.12678532627942263,
|
||||
vert_offset_correction: 0.19740747}
|
||||
- {dist_correction: 1.3618773, dist_correction_x: 1.4004077000000001, dist_correction_y: 1.3900876,
|
||||
focal_distance: 5.0, focal_slope: 1.1, horiz_offset_correction: 0.025999999, laser_id: 6,
|
||||
min_intensity: 65.0, rot_correction: -0.031646046452444135, vert_correction: -0.1895564226946273,
|
||||
vert_offset_correction: 0.19277746}
|
||||
- {dist_correction: 1.5325716, dist_correction_x: 1.5337143, dist_correction_y: 1.5452948000000002,
|
||||
focal_distance: 6.0, focal_slope: 1.0, horiz_offset_correction: -0.025999999, laser_id: 7,
|
||||
min_intensity: 10.0, rot_correction: 0.023408326257150665, vert_correction: -0.18086723120040343,
|
||||
vert_offset_correction: 0.19342419}
|
||||
- {dist_correction: 1.3743323, dist_correction_x: 1.4474606, dist_correction_y: 1.4533472,
|
||||
focal_distance: 6.0, focal_slope: 1.0, horiz_offset_correction: 0.025999999, laser_id: 8,
|
||||
min_intensity: 30.0, rot_correction: 0.10065885915180103, vert_correction: -0.11973897655818674,
|
||||
vert_offset_correction: 0.19792192}
|
||||
- {dist_correction: 1.4969112000000002, dist_correction_x: 1.4754176, dist_correction_y: 1.4888799000000001,
|
||||
focal_distance: 5.0, focal_slope: 1.0, horiz_offset_correction: -0.025999999, laser_id: 9,
|
||||
min_intensity: 10.0, rot_correction: 0.15996423607269877, vert_correction: -0.10924820210484752,
|
||||
vert_offset_correction: 0.19868624000000001}
|
||||
- {dist_correction: 1.434263, dist_correction_x: 1.4957901000000002, dist_correction_y: 1.5191892999999999,
|
||||
focal_distance: 5.0, focal_slope: 0.89999998, horiz_offset_correction: 0.025999999,
|
||||
laser_id: 10, min_intensity: 35.0, rot_correction: 0.08313316164783874, vert_correction: -0.17135657256846043,
|
||||
vert_offset_correction: 0.19412970999999998}
|
||||
- {dist_correction: 1.5500841, dist_correction_x: 1.542697, dist_correction_y: 1.5716737,
|
||||
focal_distance: 8.0, focal_slope: 1.2, horiz_offset_correction: -0.025999999, laser_id: 11,
|
||||
min_intensity: 30.0, rot_correction: 0.13862572370075624, vert_correction: -0.1630088948849621,
|
||||
vert_offset_correction: 0.19474705}
|
||||
- {dist_correction: 1.3725992, dist_correction_x: 1.4353555, dist_correction_y: 1.3932405,
|
||||
focal_distance: 11.0, focal_slope: 1.1, horiz_offset_correction: 0.025999999, laser_id: 12,
|
||||
min_intensity: 50.0, rot_correction: -0.1255805045528199, vert_correction: -0.04526314018308893,
|
||||
vert_offset_correction: 0.20331627000000002}
|
||||
- {dist_correction: 1.3111591000000002, dist_correction_x: 1.3470857, dist_correction_y: 1.3652054000000002,
|
||||
focal_distance: 6.0, focal_slope: 0.69999999, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 13, min_intensity: 30.0, rot_correction: -0.06716508498014805, vert_correction: -0.03587557613263058,
|
||||
vert_offset_correction: 0.20399239000000002}
|
||||
- {dist_correction: 1.5360803, dist_correction_x: 1.5528035, dist_correction_y: 1.5666801000000001,
|
||||
focal_distance: 8.0, focal_slope: 1.1, horiz_offset_correction: 0.025999999, laser_id: 14,
|
||||
min_intensity: 20.0, rot_correction: -0.14578889529014513, vert_correction: -0.09893566067472198,
|
||||
vert_offset_correction: 0.19943586}
|
||||
- {dist_correction: 1.4755448999999998, dist_correction_x: 1.5032428, dist_correction_y: 1.5326752,
|
||||
focal_distance: 5.0, focal_slope: 0.89999998, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 15, min_intensity: 30.0, rot_correction: -0.08892898296002069, vert_correction: -0.09062974348423608,
|
||||
vert_offset_correction: 0.20003851}
|
||||
- {dist_correction: 1.4410587000000001, dist_correction_x: 1.4870845, dist_correction_y: 1.4627965,
|
||||
focal_distance: 18.0, focal_slope: 0.5, horiz_offset_correction: 0.025999999, laser_id: 16,
|
||||
min_intensity: 40.0, rot_correction: -0.013006177528832626, vert_correction: -0.02770725895504266,
|
||||
vert_offset_correction: 0.20458033}
|
||||
- {dist_correction: 1.4434521, dist_correction_x: 1.4897508, dist_correction_y: 1.4791382,
|
||||
focal_distance: 11.0, focal_slope: 0.80000001, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 17, min_intensity: 55.0, rot_correction: 0.04596628970548614, vert_correction: -0.02014825541794774,
|
||||
vert_offset_correction: 0.20512417}
|
||||
- {dist_correction: 1.3243448000000002, dist_correction_x: 1.3816666000000002, dist_correction_y: 1.3647719,
|
||||
focal_distance: 12.0, focal_slope: 1.0, horiz_offset_correction: 0.025999999, laser_id: 18,
|
||||
min_intensity: 10.0, rot_correction: -0.03237303019110658, vert_correction: -0.08210824496987311,
|
||||
vert_offset_correction: 0.20065581999999998}
|
||||
- {dist_correction: 1.4565853999999998, dist_correction_x: 1.4340645, dist_correction_y: 1.4550516,
|
||||
focal_distance: 20.0, focal_slope: 0.69999999, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 19, min_intensity: 30.0, rot_correction: 0.02431275238487562, vert_correction: -0.0727614640280461,
|
||||
vert_offset_correction: 0.20133196000000003}
|
||||
- {dist_correction: 1.3313776, dist_correction_x: 1.3819601000000001, dist_correction_y: 1.3847791,
|
||||
focal_distance: 5.0, focal_slope: 0.89999998, horiz_offset_correction: 0.025999999,
|
||||
laser_id: 20, min_intensity: 45.0, rot_correction: 0.10029393174916004, vert_correction: -0.009929893699589059,
|
||||
vert_offset_correction: 0.20585909000000002}
|
||||
- {dist_correction: 1.3787535, dist_correction_x: 1.3978789, dist_correction_y: 1.4257806,
|
||||
focal_distance: 10.0, focal_slope: 1.1, horiz_offset_correction: -0.025999999, laser_id: 21,
|
||||
min_intensity: 35.0, rot_correction: 0.15867894419560363, vert_correction: -0.0037977317325845416,
|
||||
vert_offset_correction: 0.20630005}
|
||||
- {dist_correction: 1.3419412, dist_correction_x: 1.4059189, dist_correction_y: 1.4113303,
|
||||
focal_distance: 11.0, focal_slope: 1.0, horiz_offset_correction: 0.025999999, laser_id: 22,
|
||||
min_intensity: 40.0, rot_correction: 0.08044522544540282, vert_correction: -0.06482699129962814,
|
||||
vert_offset_correction: 0.20190518999999998}
|
||||
- {dist_correction: 1.4338304, dist_correction_x: 1.4212059, dist_correction_y: 1.4900565000000001,
|
||||
focal_distance: 11.0, focal_slope: 1.1, horiz_offset_correction: -0.025999999, laser_id: 23,
|
||||
min_intensity: 55.0, rot_correction: 0.13867708175932542, vert_correction: -0.05566171063737453,
|
||||
vert_offset_correction: 0.20256662}
|
||||
- {dist_correction: 1.4930911, dist_correction_x: 1.5572188, dist_correction_y: 1.5182672,
|
||||
focal_distance: 5.0, focal_slope: 1.0, horiz_offset_correction: 0.025999999, laser_id: 24,
|
||||
min_intensity: 25.0, rot_correction: -0.12505298227706313, vert_correction: 0.06113007152996804,
|
||||
vert_offset_correction: 0.21097416}
|
||||
- {dist_correction: 1.4367653000000002, dist_correction_x: 1.4614236, dist_correction_y: 1.4587589,
|
||||
focal_distance: 3.0, focal_slope: 1.0, horiz_offset_correction: -0.025999999, laser_id: 25,
|
||||
min_intensity: 50.0, rot_correction: -0.06814826559971075, vert_correction: 0.06988221181432357,
|
||||
vert_offset_correction: 0.21160620000000002}
|
||||
- {dist_correction: 1.5279892000000002, dist_correction_x: 1.5686107999999999, dist_correction_y: 1.55737,
|
||||
focal_distance: 7.5, focal_slope: 1.0, horiz_offset_correction: 0.025999999, laser_id: 26,
|
||||
min_intensity: 30.0, rot_correction: -0.14531660046790917, vert_correction: 0.00887576771486082,
|
||||
vert_offset_correction: 0.20721134}
|
||||
- {dist_correction: 1.5077638, dist_correction_x: 1.5453738000000001, dist_correction_y: 1.5483368,
|
||||
focal_distance: 4.0, focal_slope: 0.89999998, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 27, min_intensity: 30.0, rot_correction: -0.08904354811745085, vert_correction: 0.017050959569839413,
|
||||
vert_offset_correction: 0.20779928000000003}
|
||||
- {dist_correction: 1.3627797000000001, dist_correction_x: 1.4232985, dist_correction_y: 1.4116524000000001,
|
||||
focal_distance: 4.0, focal_slope: 1.0, horiz_offset_correction: 0.025999999, laser_id: 28,
|
||||
min_intensity: 50.0, rot_correction: -0.012061568860271928, vert_correction: 0.07842048992411524,
|
||||
vert_offset_correction: 0.21222351}
|
||||
- {dist_correction: 1.3749608, dist_correction_x: 1.4045798, dist_correction_y: 1.4006630999999998,
|
||||
focal_distance: 4.0, focal_slope: 1.1, horiz_offset_correction: -0.025999999, laser_id: 29,
|
||||
min_intensity: 40.0, rot_correction: 0.043892943273872005, vert_correction: 0.08674443287511571,
|
||||
vert_offset_correction: 0.21282616000000001}
|
||||
- {dist_correction: 1.2940709000000001, dist_correction_x: 1.392794, dist_correction_y: 1.3225565000000001,
|
||||
focal_distance: 8.0, focal_slope: 0.89999998, horiz_offset_correction: 0.025999999,
|
||||
laser_id: 30, min_intensity: 90.0, rot_correction: -0.033068739374902546, vert_correction: 0.02522388232225749,
|
||||
vert_offset_correction: 0.20838722}
|
||||
- {dist_correction: 1.3907666, dist_correction_x: 1.4365166, dist_correction_y: 1.4501437000000001,
|
||||
focal_distance: 9.0, focal_slope: 1.0, horiz_offset_correction: -0.025999999, laser_id: 31,
|
||||
min_intensity: 5.0, rot_correction: 0.025535290948715324, vert_correction: 0.034414332377654115,
|
||||
vert_offset_correction: 0.20904865}
|
||||
- {dist_correction: 1.3461819, dist_correction_x: 1.3678523000000002, dist_correction_y: 1.3552880999999999,
|
||||
focal_distance: 11.0, focal_slope: 1.5, horiz_offset_correction: 0.025999999, laser_id: 32,
|
||||
min_intensity: 45.0, rot_correction: -0.13309965698710405, vert_correction: -0.39666389380060213,
|
||||
vert_offset_correction: 0.10812234999999999}
|
||||
- {dist_correction: 1.2487466, dist_correction_x: 1.2929747, dist_correction_y: 1.3438803,
|
||||
focal_distance: 5.0, focal_slope: 0.89999998, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 33, min_intensity: 35.0, rot_correction: -0.07241159183553281, vert_correction: -0.39021216204755743,
|
||||
vert_offset_correction: 0.10859233}
|
||||
- {dist_correction: 1.5016498000000003, dist_correction_x: 1.5384890999999998, dist_correction_y: 1.5506186,
|
||||
focal_distance: 4.5, focal_slope: 1.0, horiz_offset_correction: 0.025999999, laser_id: 34,
|
||||
min_intensity: 20.0, rot_correction: 0.08292710807634829, vert_correction: -0.2010672181773803,
|
||||
vert_offset_correction: 0.12148494}
|
||||
- {dist_correction: 1.2495708, dist_correction_x: 1.2891127, dist_correction_y: 1.2943669,
|
||||
focal_distance: 11.0, focal_slope: 1.3, horiz_offset_correction: -0.025999999, laser_id: 35,
|
||||
min_intensity: 25.0, rot_correction: 0.14006506182829093, vert_correction: -0.19103771853737994,
|
||||
vert_offset_correction: 0.12213274}
|
||||
- {dist_correction: 1.2674536, dist_correction_x: 1.3298663, dist_correction_y: 1.3577469,
|
||||
focal_distance: 6.0, focal_slope: 0.89999998, horiz_offset_correction: 0.025999999,
|
||||
laser_id: 36, min_intensity: 35.0, rot_correction: -0.012004346320883118, vert_correction: -0.3819670695815035,
|
||||
vert_offset_correction: 0.10918932}
|
||||
- {dist_correction: 1.2481956, dist_correction_x: 1.28627, dist_correction_y: 1.29235,
|
||||
focal_distance: 14.5, focal_slope: 1.5, horiz_offset_correction: -0.025999999, laser_id: 37,
|
||||
min_intensity: 30.0, rot_correction: 0.04832190474636683, vert_correction: -0.3718940414299584,
|
||||
vert_offset_correction: 0.10991334}
|
||||
- {dist_correction: 1.4516722, dist_correction_x: 1.4842308, dist_correction_y: 1.4868384000000001,
|
||||
focal_distance: 4.0, focal_slope: 1.1, horiz_offset_correction: 0.025999999, laser_id: 38,
|
||||
min_intensity: 55.0, rot_correction: -0.03583078923869515, vert_correction: -0.4336284663746853,
|
||||
vert_offset_correction: 0.1053787}
|
||||
- {dist_correction: 1.3843003999999999, dist_correction_x: 1.4010727, dist_correction_y: 1.4332015999999999,
|
||||
focal_distance: 6.5, focal_slope: 1.3, horiz_offset_correction: -0.025999999, laser_id: 39,
|
||||
min_intensity: 40.0, rot_correction: 0.026883486237381612, vert_correction: -0.4261966798867682,
|
||||
vert_offset_correction: 0.10593759000000001}
|
||||
- {dist_correction: 1.244738, dist_correction_x: 1.3131859000000001, dist_correction_y: 1.354245,
|
||||
focal_distance: 6.5, focal_slope: 1.0, horiz_offset_correction: 0.025999999, laser_id: 40,
|
||||
min_intensity: 25.0, rot_correction: 0.1076316048478218, vert_correction: -0.3640637439139335,
|
||||
vert_offset_correction: 0.11047223}
|
||||
- {dist_correction: 1.3284543, dist_correction_x: 1.3295518000000002, dist_correction_y: 1.3809489,
|
||||
focal_distance: 12.5, focal_slope: 1.7, horiz_offset_correction: -0.025999999, laser_id: 41,
|
||||
min_intensity: 50.0, rot_correction: 0.1679293847080498, vert_correction: -0.3511493721000192,
|
||||
vert_offset_correction: 0.11138678}
|
||||
- {dist_correction: 1.4055542, dist_correction_x: 1.4426663, dist_correction_y: 1.430847,
|
||||
focal_distance: 1.5, focal_slope: 1.1, horiz_offset_correction: 0.025999999, laser_id: 42,
|
||||
min_intensity: 10.0, rot_correction: 0.0861156692854385, vert_correction: -0.4163231777753111,
|
||||
vert_offset_correction: 0.10667431000000001}
|
||||
- {dist_correction: 1.3529747, dist_correction_x: 1.3834917999999998, dist_correction_y: 1.4029074,
|
||||
focal_distance: 6.0, focal_slope: 1.2, horiz_offset_correction: -0.025999999, laser_id: 43,
|
||||
min_intensity: 35.0, rot_correction: 0.15024020221305323, vert_correction: -0.4046365927302973,
|
||||
vert_offset_correction: 0.10753805}
|
||||
- {dist_correction: 1.2407380000000001, dist_correction_x: 1.3171521000000002, dist_correction_y: 1.2836400000000001,
|
||||
focal_distance: 15.0, focal_slope: 1.6, horiz_offset_correction: 0.025999999, laser_id: 44,
|
||||
max_intensity: 220.0, rot_correction: -0.12998527227122358, vert_correction: -0.28892197890806653,
|
||||
vert_offset_correction: 0.11568009}
|
||||
- {dist_correction: 1.5288051999999999, dist_correction_x: 1.5904514, dist_correction_y: 1.6288455,
|
||||
focal_distance: 10.0, focal_slope: 0.89999998, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 45, rot_correction: -0.07009281894983248, vert_correction: -0.28120381879648226,
|
||||
vert_offset_correction: 0.11620087}
|
||||
- {dist_correction: 1.5423979, dist_correction_x: 1.5919412, dist_correction_y: 1.610177,
|
||||
focal_distance: 13.0, focal_slope: 1.7, horiz_offset_correction: 0.025999999, laser_id: 46,
|
||||
rot_correction: -0.1533711640661691, vert_correction: -0.34156398894148127, vert_offset_correction: 0.11205999}
|
||||
- {dist_correction: 1.3086252999999999, dist_correction_x: 1.3737134, dist_correction_y: 1.4177727,
|
||||
focal_distance: 5.5, focal_slope: 0.89999998, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 47, rot_correction: -0.0927890927600715, vert_correction: -0.3348332488542128,
|
||||
vert_offset_correction: 0.11252997}
|
||||
- {dist_correction: 1.3405330000000002, dist_correction_x: 1.4512436, dist_correction_y: 1.4471467999999998,
|
||||
focal_distance: 13.5, focal_slope: 1.0, horiz_offset_correction: 0.025999999, laser_id: 48,
|
||||
rot_correction: -0.012004348415278218, vert_correction: -0.2738300470529015, vert_offset_correction: 0.11669625}
|
||||
- {dist_correction: 1.2994545, dist_correction_x: 1.3971343999999999, dist_correction_y: 1.36849,
|
||||
focal_distance: 14.0, focal_slope: 1.0, horiz_offset_correction: -0.025999999, laser_id: 49,
|
||||
rot_correction: 0.047471358677980184, vert_correction: -0.2649030020882158, vert_offset_correction: 0.11729325}
|
||||
- {dist_correction: 1.4499762999999999, dist_correction_x: 1.5111346, dist_correction_y: 1.542395,
|
||||
focal_distance: 13.0, focal_slope: 1.2, horiz_offset_correction: 0.025999999, laser_id: 50,
|
||||
rot_correction: -0.03378136079915033, vert_correction: -0.32678797913421975, vert_offset_correction: 0.11308886}
|
||||
- {dist_correction: 1.3516956, dist_correction_x: 1.4231836999999998, dist_correction_y: 1.4301146,
|
||||
focal_distance: 13.0, focal_slope: 1.1, horiz_offset_correction: -0.025999999, laser_id: 51,
|
||||
rot_correction: 0.025334358173250228, vert_correction: -0.3179609589889659, vert_offset_correction: 0.11369856}
|
||||
- {dist_correction: 1.2374236, dist_correction_x: 1.308008, dist_correction_y: 1.3549429000000002,
|
||||
focal_distance: 5.0, focal_slope: 0.89999998, horiz_offset_correction: 0.025999999,
|
||||
laser_id: 52, rot_correction: 0.10481975724981128, vert_correction: -0.25478428121685354,
|
||||
vert_offset_correction: 0.11796646000000001}
|
||||
- {dist_correction: 1.3730562000000002, dist_correction_x: 1.403678, dist_correction_y: 1.4347415000000001,
|
||||
focal_distance: 13.0, focal_slope: 1.4, horiz_offset_correction: -0.025999999, laser_id: 53,
|
||||
rot_correction: 0.16311715242247551, vert_correction: -0.24576616497179882, vert_offset_correction: 0.11856346000000001}
|
||||
- {dist_correction: 1.4445888, dist_correction_x: 1.5025624, dist_correction_y: 1.5189749000000001,
|
||||
focal_distance: 10.0, focal_slope: 1.0, horiz_offset_correction: 0.025999999, laser_id: 54,
|
||||
rot_correction: 0.08384971878954978, vert_correction: -0.31000962288931516, vert_offset_correction: 0.11424474999999999}
|
||||
- {dist_correction: 1.3861449, dist_correction_x: 1.4228815000000001, dist_correction_y: 1.4620186000000002,
|
||||
focal_distance: 15.0, focal_slope: 1.6, horiz_offset_correction: -0.025999999, laser_id: 55,
|
||||
rot_correction: 0.14374613400834294, vert_correction: -0.2986601307360315, vert_offset_correction: 0.11501958000000001}
|
||||
- {dist_correction: 1.4635341, dist_correction_x: 1.5232283000000002, dist_correction_y: 1.5063837000000002,
|
||||
focal_distance: 13.0, focal_slope: 1.3, horiz_offset_correction: 0.025999999, laser_id: 56,
|
||||
rot_correction: -0.12741928396895377, vert_correction: -0.18393445537456576, vert_offset_correction: 0.12259002000000001}
|
||||
- {dist_correction: 1.3715826000000002, dist_correction_x: 1.4186972, dist_correction_y: 1.4328435,
|
||||
focal_distance: 3.5, focal_slope: 1.0, horiz_offset_correction: -0.025999999, laser_id: 57,
|
||||
rot_correction: -0.06853129555735342, vert_correction: -0.1744342722087932, vert_offset_correction: 0.12319972}
|
||||
- {dist_correction: 1.4644831999999999, dist_correction_x: 1.5095984000000002, dist_correction_y: 1.5149265,
|
||||
focal_distance: 11.0, focal_slope: 1.4, horiz_offset_correction: 0.025999999, laser_id: 58,
|
||||
rot_correction: -0.1497316045423758, vert_correction: -0.23400086557751998, vert_offset_correction: 0.11933828}
|
||||
- {dist_correction: 1.3074548, dist_correction_x: 1.3521214000000001, dist_correction_y: 1.3830151000000002,
|
||||
focal_distance: 5.0, focal_slope: 0.89999998, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 59, rot_correction: -0.08973572126418226, vert_correction: -0.22644383426247983,
|
||||
vert_offset_correction: 0.11983367}
|
||||
- {dist_correction: 1.4378391, dist_correction_x: 1.4799687000000001, dist_correction_y: 1.4889211,
|
||||
focal_distance: 5.0, focal_slope: 1.1, horiz_offset_correction: 0.025999999, laser_id: 60,
|
||||
rot_correction: -0.011751946229237658, vert_correction: -0.1678843098347878, vert_offset_correction: 0.12361888}
|
||||
- {dist_correction: 1.3585466, dist_correction_x: 1.4135242, dist_correction_y: 1.4170488,
|
||||
focal_distance: 2.0, focal_slope: 0.89999998, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 61, rot_correction: 0.04489272721060892, vert_correction: -0.158331168143522,
|
||||
vert_offset_correction: 0.12422858}
|
||||
- {dist_correction: 1.4478067, dist_correction_x: 1.5442529, dist_correction_y: 1.5512207,
|
||||
focal_distance: 10.0, focal_slope: 1.0, horiz_offset_correction: 0.025999999, laser_id: 62,
|
||||
rot_correction: -0.0340408982402389, vert_correction: -0.21671681763514258, vert_offset_correction: 0.12046877}
|
||||
- {dist_correction: 1.4329738, dist_correction_x: 1.4817114, dist_correction_y: 1.4954124,
|
||||
focal_distance: 9.0, focal_slope: 0.80000001, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 63, rot_correction: 0.024857907722065305, vert_correction: -0.2106649408137298,
|
||||
vert_offset_correction: 0.12086253}
|
||||
num_lasers: 64
|
||||
distance_resolution: 0.002
|
||||
@@ -0,0 +1,227 @@
|
||||
lasers:
|
||||
- {dist_correction: 1.4139490000000001, dist_correction_x: 1.4198446999999998, dist_correction_y: 1.4058145,
|
||||
focal_distance: 10.5, focal_slope: 1.85, horiz_offset_correction: 0.025999999, laser_id: 0,
|
||||
min_intensity: 5, rot_correction: -0.07648247457737148, vert_correction: -0.1261818455292898,
|
||||
vert_offset_correction: 0.21569468}
|
||||
- {dist_correction: 1.5094685, dist_correction_x: 1.5403023, dist_correction_y: 1.5012577999999999,
|
||||
focal_distance: 15.0, focal_slope: 1.2, horiz_offset_correction: -0.025999999, laser_id: 1,
|
||||
min_intensity: 10, rot_correction: -0.03932070772308096, vert_correction: -0.11953745909742221,
|
||||
vert_offset_correction: 0.21520962000000002}
|
||||
- {dist_correction: 1.4579400999999999, dist_correction_x: 1.4846666, dist_correction_y: 1.4228239,
|
||||
focal_distance: 24.0, focal_slope: 1.05, horiz_offset_correction: 0.025999999, laser_id: 2,
|
||||
min_intensity: 30, rot_correction: 0.06005350008746038, vert_correction: 0.00356118725906175,
|
||||
vert_offset_correction: 0.20631704}
|
||||
- {dist_correction: 1.5046124, dist_correction_x: 1.5335535999999999, dist_correction_y: 1.5401996,
|
||||
focal_distance: 14.5, focal_slope: 1.7, horiz_offset_correction: -0.025999999, laser_id: 3,
|
||||
min_intensity: 10, rot_correction: 0.09919490315516696, vert_correction: 0.010306535403103584,
|
||||
vert_offset_correction: 0.20583200000000001}
|
||||
- {dist_correction: 1.4370993, dist_correction_x: 1.4714845, dist_correction_y: 1.4524646,
|
||||
focal_distance: 15.0, focal_slope: 0.40000001, horiz_offset_correction: 0.025999999,
|
||||
laser_id: 4, min_intensity: 30, rot_correction: -0.00095355016485159, vert_correction: -0.1144967440141401,
|
||||
vert_offset_correction: 0.21484217000000003}
|
||||
- {dist_correction: 1.3536626999999999, dist_correction_x: 1.3909094, dist_correction_y: 1.3700326999999999,
|
||||
focal_distance: 17.0, focal_slope: 1.45, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 5, min_intensity: 30, rot_correction: 0.03824387099052699, vert_correction: -0.10803612329921503,
|
||||
vert_offset_correction: 0.21437181}
|
||||
- {dist_correction: 1.4117873, dist_correction_x: 1.4350795, dist_correction_y: 1.3829624999999999,
|
||||
focal_distance: 10.5, focal_slope: 1.0, horiz_offset_correction: 0.025999999, laser_id: 6,
|
||||
min_intensity: 10, rot_correction: -0.015297255529962315, vert_correction: -0.14944538101702426,
|
||||
vert_offset_correction: 0.21739968999999998}
|
||||
- {dist_correction: 1.4269646, dist_correction_x: 1.451161, dist_correction_y: 1.4328421,
|
||||
focal_distance: 14.0, focal_slope: 1.3, horiz_offset_correction: -0.025999999, laser_id: 7,
|
||||
min_intensity: 10, rot_correction: 0.024255809272700053, vert_correction: -0.14344353231329066,
|
||||
vert_offset_correction: 0.21695873}
|
||||
- {dist_correction: 1.3808284000000002, dist_correction_x: 1.421472, dist_correction_y: 1.3838283000000002,
|
||||
focal_distance: 15.0, focal_slope: 0.94999999, horiz_offset_correction: 0.025999999,
|
||||
laser_id: 8, min_intensity: 30, rot_correction: 0.07354442571180776, vert_correction: -0.10278016723125998,
|
||||
vert_offset_correction: 0.21398966000000003}
|
||||
- {dist_correction: 1.3644336000000001, dist_correction_x: 1.3931616, dist_correction_y: 1.3852122,
|
||||
focal_distance: 12.5, focal_slope: 1.95, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 9, min_intensity: 10, rot_correction: 0.11317857886058363, vert_correction: -0.09569590023202451,
|
||||
vert_offset_correction: 0.21347521}
|
||||
- {dist_correction: 1.4102663000000002, dist_correction_x: 1.4163402, dist_correction_y: 1.3592377,
|
||||
focal_distance: 12.5, focal_slope: 1.95, horiz_offset_correction: 0.025999999, laser_id: 10,
|
||||
min_intensity: 10, rot_correction: 0.05954228616823424, vert_correction: -0.1386345201601863,
|
||||
vert_offset_correction: 0.21660597}
|
||||
- {dist_correction: 1.5019737000000002, dist_correction_x: 1.532475, dist_correction_y: 1.5237663000000001,
|
||||
focal_distance: 13.0, focal_slope: 1.9, horiz_offset_correction: -0.025999999, laser_id: 11,
|
||||
min_intensity: 10, rot_correction: 0.09906092120980835, vert_correction: -0.13181073657049397,
|
||||
vert_offset_correction: 0.21610622}
|
||||
- {dist_correction: 1.4399905000000002, dist_correction_x: 1.4887962, dist_correction_y: 1.4455237,
|
||||
focal_distance: 14.5, focal_slope: 1.7, horiz_offset_correction: 0.025999999, laser_id: 12,
|
||||
max_intensity: 235, rot_correction: -0.07574798243226695, vert_correction: -0.054438932963427306,
|
||||
vert_offset_correction: 0.21049141}
|
||||
- {dist_correction: 1.5207593, dist_correction_x: 1.5401453, dist_correction_y: 1.5190082,
|
||||
focal_distance: 20.5, focal_slope: 1.25, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 13, max_intensity: 240, rot_correction: -0.037047761947550245, vert_correction: -0.048730533448148504,
|
||||
vert_offset_correction: 0.21007986}
|
||||
- {dist_correction: 1.4746239, dist_correction_x: 1.5300989999999999, dist_correction_y: 1.4663734,
|
||||
focal_distance: 12.5, focal_slope: 1.9, horiz_offset_correction: 0.025999999, laser_id: 14,
|
||||
max_intensity: 245, rot_correction: -0.0895955468906376, vert_correction: -0.08961595328025192,
|
||||
vert_offset_correction: 0.21303425}
|
||||
- {dist_correction: 1.4697629, dist_correction_x: 1.5051735, dist_correction_y: 1.4558601,
|
||||
focal_distance: 19.5, focal_slope: 0.94999999, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 15, max_intensity: 245, rot_correction: -0.05072966149865084, vert_correction: -0.0839353306800186,
|
||||
vert_offset_correction: 0.21262267999999998}
|
||||
- {dist_correction: 1.4143376, dist_correction_x: 1.4432597000000003, dist_correction_y: 1.4038483,
|
||||
focal_distance: 24.0, focal_slope: 0.69999999, horiz_offset_correction: 0.025999999,
|
||||
laser_id: 16, max_intensity: 245, rot_correction: -0.001864320564407547, vert_correction: -0.043427018903405855,
|
||||
vert_offset_correction: 0.20969770000000001}
|
||||
- {dist_correction: 1.4815961, dist_correction_x: 1.5173615, dist_correction_y: 1.4871606,
|
||||
focal_distance: 14.5, focal_slope: 1.65, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 17, rot_correction: 0.03747852840556422, vert_correction: -0.03648801216715539,
|
||||
vert_offset_correction: 0.20919794}
|
||||
- {dist_correction: 1.420331, dist_correction_x: 1.4755219, dist_correction_y: 1.3919118000000001,
|
||||
focal_distance: 17.5, focal_slope: 1.4, horiz_offset_correction: 0.025999999, laser_id: 18,
|
||||
rot_correction: -0.015194972429011364, vert_correction: -0.07906187922560139, vert_offset_correction: 0.21226994000000002}
|
||||
- {dist_correction: 1.4900717, dist_correction_x: 1.5143349000000002, dist_correction_y: 1.4829907,
|
||||
focal_distance: 24.0, focal_slope: 1.25, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 19, rot_correction: 0.02391977928648433, vert_correction: -0.07255814015150577,
|
||||
vert_offset_correction: 0.21179958}
|
||||
- {dist_correction: 1.4823865, dist_correction_x: 1.5357741999999999, dist_correction_y: 1.4956403,
|
||||
focal_distance: 24.0, focal_slope: 1.1, horiz_offset_correction: 0.025999999, laser_id: 20,
|
||||
rot_correction: 0.07264374331532833, vert_correction: -0.031587736747464255, vert_offset_correction: 0.20884519999999998}
|
||||
- {dist_correction: 1.5553201, dist_correction_x: 1.5698593, dist_correction_y: 1.5624425,
|
||||
focal_distance: 15.5, focal_slope: 1.55, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 21, rot_correction: 0.11143265968730214, vert_correction: -0.025460288914769372,
|
||||
vert_offset_correction: 0.20840424}
|
||||
- {dist_correction: 1.4437845999999999, dist_correction_x: 1.4909378000000002, dist_correction_y: 1.4347861,
|
||||
focal_distance: 20.5, focal_slope: 1.2, horiz_offset_correction: 0.025999999, laser_id: 22,
|
||||
rot_correction: 0.05942554283989759, vert_correction: -0.06665878416276627, vert_offset_correction: 0.21137333000000003}
|
||||
- {dist_correction: 1.4939513, dist_correction_x: 1.5194868, dist_correction_y: 1.5106346,
|
||||
focal_distance: 14.5, focal_slope: 1.65, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 23, rot_correction: 0.09797042203986979, vert_correction: -0.06055112836378901,
|
||||
vert_offset_correction: 0.21093236999999998}
|
||||
- {dist_correction: 1.4521244999999998, dist_correction_x: 1.4884882, dist_correction_y: 1.4649333,
|
||||
focal_distance: 11.5, focal_slope: 2.0, horiz_offset_correction: 0.025999999, laser_id: 24,
|
||||
rot_correction: -0.07658879305408597, vert_correction: 0.015620435355027301, vert_offset_correction: 0.20544985000000002}
|
||||
- {dist_correction: 1.5351622, dist_correction_x: 1.524973, dist_correction_y: 1.5029565,
|
||||
focal_distance: 18.5, focal_slope: 1.25, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 25, rot_correction: -0.0379098725675606, vert_correction: 0.022567997346205196,
|
||||
vert_offset_correction: 0.20495010000000002}
|
||||
- {dist_correction: 1.5321327, dist_correction_x: 1.5833431999999998, dist_correction_y: 1.5359726,
|
||||
focal_distance: 13.0, focal_slope: 1.9, horiz_offset_correction: 0.025999999, laser_id: 26,
|
||||
rot_correction: -0.0904730670226138, vert_correction: -0.019943931467746017, vert_offset_correction: 0.20800737000000002}
|
||||
- {dist_correction: 1.5166023000000002, dist_correction_x: 1.4874829, dist_correction_y: 1.4625635,
|
||||
focal_distance: 21.5, focal_slope: 1.1, horiz_offset_correction: -0.025999999, laser_id: 27,
|
||||
rot_correction: -0.051308328902808065, vert_correction: -0.013200099491225388, vert_offset_correction: 0.20752234000000003}
|
||||
- {dist_correction: 1.4549194, dist_correction_x: 1.4688664, dist_correction_y: 1.4194371000000001,
|
||||
focal_distance: 13.5, focal_slope: 1.83, horiz_offset_correction: 0.025999999, laser_id: 28,
|
||||
rot_correction: -0.0019143155208309244, vert_correction: 0.027266617424120905, vert_offset_correction: 0.20461203000000003}
|
||||
- {dist_correction: 1.5617532, dist_correction_x: 1.5887217999999999, dist_correction_y: 1.5643922000000001,
|
||||
focal_distance: 18.5, focal_slope: 1.35, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 29, rot_correction: 0.03681404490741569, vert_correction: 0.03421014630846329,
|
||||
vert_offset_correction: 0.20411228}
|
||||
- {dist_correction: 1.5132924, dist_correction_x: 1.5661812000000002, dist_correction_y: 1.5102689,
|
||||
focal_distance: 18.5, focal_slope: 1.35, horiz_offset_correction: 0.025999999, laser_id: 30,
|
||||
rot_correction: -0.015542064486559148, vert_correction: -0.007885903531460533, vert_offset_correction: 0.20714018}
|
||||
- {dist_correction: 1.5638524, dist_correction_x: 1.5621136000000002, dist_correction_y: 1.5383017,
|
||||
focal_distance: 21.5, focal_slope: 1.15, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 31, rot_correction: 0.023284423588222334, vert_correction: -0.0015491891506552067,
|
||||
vert_offset_correction: 0.20668451000000002}
|
||||
- {dist_correction: 1.3077792, dist_correction_x: 1.3433452, dist_correction_y: 1.2840973,
|
||||
focal_distance: 10.5, focal_slope: 2.0, horiz_offset_correction: 0.025999999, laser_id: 32,
|
||||
rot_correction: -0.1278634161583795, vert_correction: -0.39021216204755743, vert_offset_correction: 0.15970787}
|
||||
- {dist_correction: 1.4303885, dist_correction_x: 1.4429931999999999, dist_correction_y: 1.4607234,
|
||||
focal_distance: 0.25, focal_slope: 1.0, horiz_offset_correction: -0.025999999, laser_id: 33,
|
||||
rot_correction: -0.066528586091226, vert_correction: -0.38355018793281753, vert_offset_correction: 0.15922519}
|
||||
- {dist_correction: 1.3746819, dist_correction_x: 1.3873923, dist_correction_y: 1.4089924999999999,
|
||||
focal_distance: 0.25, focal_slope: 1.0, horiz_offset_correction: 0.025999999, laser_id: 34,
|
||||
rot_correction: 0.08854290740283328, vert_correction: -0.197138848550284, vert_offset_correction: 0.14656122}
|
||||
- {dist_correction: 1.3814778, dist_correction_x: 1.3932765, dist_correction_y: 1.4301869,
|
||||
focal_distance: 11.0, focal_slope: 2.0, horiz_offset_correction: -0.025999999, laser_id: 35,
|
||||
rot_correction: 0.14547956884148489, vert_correction: -0.18768579625563228, vert_offset_correction: 0.14595152}
|
||||
- {dist_correction: 1.4313307, dist_correction_x: 1.4734517, dist_correction_y: 1.4390849000000001,
|
||||
focal_distance: 9.5, focal_slope: 1.85, horiz_offset_correction: 0.025999999, laser_id: 36,
|
||||
rot_correction: -0.005071588212420635, vert_correction: -0.3750836655445631, vert_offset_correction: 0.15861549}
|
||||
- {dist_correction: 1.3414835, dist_correction_x: 1.3820609, dist_correction_y: 1.355589,
|
||||
focal_distance: 9.5, focal_slope: 1.4, horiz_offset_correction: -0.025999999, laser_id: 37,
|
||||
rot_correction: 0.05427589303135225, vert_correction: -0.36762882325722723, vert_offset_correction: 0.15808201}
|
||||
- {dist_correction: 1.4895827, dist_correction_x: 1.5283238000000001, dist_correction_y: 1.4803529,
|
||||
focal_distance: 9.0, focal_slope: 1.65, horiz_offset_correction: 0.025999999, laser_id: 38,
|
||||
rot_correction: -0.028143856558087547, vert_correction: -0.4285668719175616, vert_offset_correction: 0.16254044}
|
||||
- {dist_correction: 1.3727733000000002, dist_correction_x: 1.3623596, dist_correction_y: 1.392661,
|
||||
focal_distance: 0.25, focal_slope: 1.15, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 39, rot_correction: 0.03172272051181349, vert_correction: -0.4214410765541042,
|
||||
vert_offset_correction: 0.16200695}
|
||||
- {dist_correction: 1.4348983999999998, dist_correction_x: 1.4775407000000003, dist_correction_y: 1.4712174999999998,
|
||||
focal_distance: 0.25, focal_slope: 0.92000002, horiz_offset_correction: 0.025999999,
|
||||
laser_id: 40, rot_correction: 0.11411698480351568, vert_correction: -0.3565455112681652,
|
||||
vert_offset_correction: 0.15729448}
|
||||
- {dist_correction: 1.335618, dist_correction_x: 1.3519691, dist_correction_y: 1.3315152000000001,
|
||||
focal_distance: 11.200000000000001, focal_slope: 2.0, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 41, rot_correction: 0.1735498527902839, vert_correction: -0.34717860842539194,
|
||||
vert_offset_correction: 0.15663397}
|
||||
- {dist_correction: 1.4905824, dist_correction_x: 1.488313, dist_correction_y: 1.4948479000000001,
|
||||
focal_distance: 0.25, focal_slope: 1.1, horiz_offset_correction: 0.025999999, laser_id: 42,
|
||||
rot_correction: 0.09564756333839054, vert_correction: -0.4110102035460227, vert_offset_correction: 0.16123213}
|
||||
- {dist_correction: 1.3288423, dist_correction_x: 1.3409723, dist_correction_y: 1.3440451,
|
||||
focal_distance: 10.0, focal_slope: 1.95, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 43, rot_correction: 0.15538288292189534, vert_correction: -0.40083030888437793,
|
||||
vert_offset_correction: 0.16048269}
|
||||
- {dist_correction: 1.3771290999999999, dist_correction_x: 1.3773239000000002, dist_correction_y: 1.3497290000000002,
|
||||
focal_distance: 11.5, focal_slope: 2.0, horiz_offset_correction: 0.025999999, laser_id: 44,
|
||||
rot_correction: -0.12413605610123538, vert_correction: -0.2840315837972709, vert_offset_correction: 0.15228986}
|
||||
- {dist_correction: 1.3367807, dist_correction_x: 1.370152, dist_correction_y: 1.370934,
|
||||
focal_distance: 0.25, focal_slope: 0.44999999, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 45, rot_correction: -0.06413447432303407, vert_correction: -0.27761533458791926,
|
||||
vert_offset_correction: 0.15185799}
|
||||
- {dist_correction: 1.4788651, dist_correction_x: 1.5014308, dist_correction_y: 1.4727454,
|
||||
focal_distance: 11.5, focal_slope: 2.0, horiz_offset_correction: 0.025999999, laser_id: 46,
|
||||
rot_correction: -0.14872602785785152, vert_correction: -0.3359268721635124, vert_offset_correction: 0.15584644}
|
||||
- {dist_correction: 1.3220766000000002, dist_correction_x: 1.3654865, dist_correction_y: 1.3739757000000001,
|
||||
focal_distance: 0.25, focal_slope: 0.94999999, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 47, rot_correction: -0.08707280959256145, vert_correction: -0.33026751989087316,
|
||||
vert_offset_correction: 0.15545268}
|
||||
- {dist_correction: 1.4612433999999999, dist_correction_x: 1.5250436, dist_correction_y: 1.4817635999999998,
|
||||
focal_distance: 13.0, focal_slope: 1.0, horiz_offset_correction: 0.025999999, laser_id: 48,
|
||||
rot_correction: -0.006799911150716457, vert_correction: -0.26851710773019805, vert_offset_correction: 0.15124829}
|
||||
- {dist_correction: 1.3407353000000002, dist_correction_x: 1.3478844, dist_correction_y: 1.3154279,
|
||||
focal_distance: 13.5, focal_slope: 1.8, horiz_offset_correction: -0.025999999, laser_id: 49,
|
||||
rot_correction: 0.05242808851765633, vert_correction: -0.26051854302098837, vert_offset_correction: 0.1507148}
|
||||
- {dist_correction: 1.3465115, dist_correction_x: 1.3874431999999999, dist_correction_y: 1.3508052000000002,
|
||||
focal_distance: 12.0, focal_slope: 1.85, horiz_offset_correction: 0.025999999, laser_id: 50,
|
||||
rot_correction: -0.028383715411859876, vert_correction: -0.3216451745070007, vert_offset_correction: 0.15485568000000002}
|
||||
- {dist_correction: 1.3629696999999998, dist_correction_x: 1.4037315000000001, dist_correction_y: 1.3869237,
|
||||
focal_distance: 12.0, focal_slope: 1.1, horiz_offset_correction: -0.025999999, laser_id: 51,
|
||||
rot_correction: 0.031843273893907245, vert_correction: -0.3135280670349956, vert_offset_correction: 0.15429679000000002}
|
||||
- {dist_correction: 1.4472754, dist_correction_x: 1.4817390000000001, dist_correction_y: 1.4782272,
|
||||
focal_distance: 2.0, focal_slope: 1.0, horiz_offset_correction: 0.025999999, laser_id: 52,
|
||||
rot_correction: 0.10955275158734502, vert_correction: -0.24941678290173272, vert_offset_correction: 0.14997807999999999}
|
||||
- {dist_correction: 1.3800671, dist_correction_x: 1.3796414, dist_correction_y: 1.3943782,
|
||||
focal_distance: 11.200000000000001, focal_slope: 2.0, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 53, rot_correction: 0.16876716543828738, vert_correction: -0.2409525119882134,
|
||||
vert_offset_correction: 0.14941919}
|
||||
- {dist_correction: 1.5190169, dist_correction_x: 1.5619051, dist_correction_y: 1.5511705,
|
||||
focal_distance: 2.5, focal_slope: 1.05, horiz_offset_correction: 0.025999999, laser_id: 54,
|
||||
rot_correction: 0.09037283276367176, vert_correction: -0.30313513748485243, vert_offset_correction: 0.15358547}
|
||||
- {dist_correction: 1.3803656000000002, dist_correction_x: 1.3960698, dist_correction_y: 1.386106,
|
||||
focal_distance: 12.5, focal_slope: 1.9, horiz_offset_correction: -0.025999999, laser_id: 55,
|
||||
rot_correction: 0.14871534295217081, vert_correction: -0.29323634555253386, vert_offset_correction: 0.15291226}
|
||||
- {dist_correction: 1.5827696, dist_correction_x: 1.6050609, dist_correction_y: 1.5844797,
|
||||
focal_distance: 10.0, focal_slope: 1.95, horiz_offset_correction: 0.025999999, laser_id: 56,
|
||||
rot_correction: -0.12100867217308608, vert_correction: -0.17760463486977288, vert_offset_correction: 0.14530372}
|
||||
- {dist_correction: 1.3843919, dist_correction_x: 1.3915251000000002, dist_correction_y: 1.4156927,
|
||||
focal_distance: 0.25, focal_slope: 0.94999999, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 57, rot_correction: -0.06431965899265843, vert_correction: -0.17006926832673774,
|
||||
vert_offset_correction: 0.14482104}
|
||||
- {dist_correction: 1.5491273, dist_correction_x: 1.5298964000000002, dist_correction_y: 1.5107637,
|
||||
focal_distance: 11.5, focal_slope: 2.0, horiz_offset_correction: 0.025999999, laser_id: 58,
|
||||
rot_correction: -0.14486168214370612, vert_correction: -0.22974121500510264, vert_offset_correction: 0.14868247}
|
||||
- {dist_correction: 1.3646004, dist_correction_x: 1.3803583000000001, dist_correction_y: 1.4061511,
|
||||
focal_distance: 0.25, focal_slope: 1.0, horiz_offset_correction: -0.025999999, laser_id: 59,
|
||||
rot_correction: -0.0852480451703211, vert_correction: -0.22391891879349718, vert_offset_correction: 0.14830141}
|
||||
- {dist_correction: 1.5239935, dist_correction_x: 1.560786, dist_correction_y: 1.5632524,
|
||||
focal_distance: 5.0, focal_slope: 1.15, horiz_offset_correction: 0.025999999, laser_id: 60,
|
||||
rot_correction: -0.005967226432828876, vert_correction: -0.16231529056824404, vert_offset_correction: 0.14432566}
|
||||
- {dist_correction: 1.4112029000000001, dist_correction_x: 1.4223886, dist_correction_y: 1.4542918,
|
||||
focal_distance: 2.5, focal_slope: 1.05, horiz_offset_correction: -0.025999999, laser_id: 61,
|
||||
rot_correction: 0.050600613599087636, vert_correction: -0.15314424682880032, vert_offset_correction: 0.14374136}
|
||||
- {dist_correction: 1.5013637, dist_correction_x: 1.5208610999999999, dist_correction_y: 1.5006433000000001,
|
||||
focal_distance: 16.5, focal_slope: 1.25, horiz_offset_correction: 0.025999999, laser_id: 62,
|
||||
rot_correction: -0.027436902217920986, vert_correction: -0.21457119711920336, vert_offset_correction: 0.14769171}
|
||||
- {dist_correction: 1.4423058, dist_correction_x: 1.4454633000000001, dist_correction_y: 1.4321198000000002,
|
||||
focal_distance: 9.0, focal_slope: 1.45, horiz_offset_correction: -0.025999999, laser_id: 63,
|
||||
rot_correction: 0.0290479702718764, vert_correction: -0.2079266762969834, vert_offset_correction: 0.14725984}
|
||||
num_lasers: 64
|
||||
distance_resolution: 0.002
|
||||
@@ -0,0 +1,259 @@
|
||||
# University of Texas HDL-64E calibration parameters
|
||||
lasers:
|
||||
- {dist_correction: 0.100000001490116, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 0, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.0698131695389748, two_pt_correction_available: false, vert_correction: -0.124932751059532,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.280000001192093, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 1, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.0392699092626572, two_pt_correction_available: false, vert_correction: -0.118993431329727,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.319999992847443, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 2, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0698131695389748, two_pt_correction_available: false, vert_correction: 0.0055470340885222,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.230000004172325, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 3, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.104719758033752, two_pt_correction_available: false, vert_correction: 0.0114863449707627,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.0700000002980232, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 4, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.013962633907795, two_pt_correction_available: false, vert_correction: -0.113056324422359,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.0900000035762787, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 5, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0392699092626572, two_pt_correction_available: false, vert_correction: -0.107121199369431,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.119999997317791, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 6, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0, two_pt_correction_available: false, vert_correction: -0.148716226220131,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.200000002980232, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 7, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0226892791688442, two_pt_correction_available: false, vert_correction: -0.142765983939171,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.129999995231628, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 8, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0820304751396179, two_pt_correction_available: false, vert_correction: -0.101187855005264,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.159999996423721, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 9, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.113446399569511, two_pt_correction_available: false, vert_correction: -0.0952560678124428,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.159999996423721, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 10, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0698131695389748, two_pt_correction_available: false, vert_correction: -0.136818811297417,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.159999996423721, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 11, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.104719758033752, two_pt_correction_available: false, vert_correction: -0.130874469876289,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.129999995231628, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 12, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.068067841231823, two_pt_correction_available: false, vert_correction: -0.05375986546278,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.200000002980232, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 13, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.0349065847694874, two_pt_correction_available: false, vert_correction: -0.0478330813348293,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.170000001788139, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 14, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.0837758108973503, two_pt_correction_available: false, vert_correction: -0.0893256440758705,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.239999994635582, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 15, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.0479965545237064, two_pt_correction_available: false, vert_correction: -0.0833963677287102,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.180000007152557, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 16, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.00872664619237185, two_pt_correction_available: false, vert_correction: -0.0419059917330742,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.0599999986588955, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 17, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0392699092626572, two_pt_correction_available: false, vert_correction: -0.035978376865387,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.140000000596046, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 18, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0, two_pt_correction_available: false, vert_correction: -0.0774680152535439,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.150000005960464, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 19, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0305432621389627, two_pt_correction_available: false, vert_correction: -0.0715404152870178,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.219999998807907, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 20, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0855211317539215, two_pt_correction_available: false, vert_correction: -0.0300500374287367,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.140000000596046, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 21, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.109083078801632, two_pt_correction_available: false, vert_correction: -0.024120757356286,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.0799999982118607, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 22, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0698131695389748, two_pt_correction_available: false, vert_correction: -0.0656133219599724,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.159999996423721, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 23, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.104719758033752, two_pt_correction_available: false, vert_correction: -0.0596865378320217,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.119999997317791, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 24, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.0610865242779255, two_pt_correction_available: false, vert_correction: 0.0174280721694231,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.219999998807907, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 25, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.0349065847694874, two_pt_correction_available: false, vert_correction: 0.0233724191784859,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.159999996423721, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 26, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.0785398185253143, two_pt_correction_available: false, vert_correction: -0.0181903336197138,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.259999990463257, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 27, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.0471238903701305, two_pt_correction_available: false, vert_correction: -0.0122585473582149,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.140000000596046, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 28, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0104719763621688, two_pt_correction_available: false, vert_correction: 0.0293195936828852,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.219999998807907, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 29, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0349065847694874, two_pt_correction_available: false, vert_correction: 0.0352698266506195,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.209999993443489, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 30, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.00436332309618592, two_pt_correction_available: false, vert_correction: -0.00632520206272602,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.140000000596046, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 31, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0296705979853868, two_pt_correction_available: false, vert_correction: -0.000390077300835401,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.119999997317791, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 32, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.122173048555851, two_pt_correction_available: false, vert_correction: -0.396850973367691,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.0199999995529652, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 33, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.0610865242779255, two_pt_correction_available: false, vert_correction: -0.387918144464493,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.100000001490116, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 34, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0959931090474129, two_pt_correction_available: false, vert_correction: -0.200955957174301,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.230000004172325, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 35, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.148352980613708, two_pt_correction_available: false, vert_correction: -0.192023113369942,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.170000001788139, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 36, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.00872664619237185, two_pt_correction_available: false, vert_correction: -0.378992766141891,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.150000005960464, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 37, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0610865242779255, two_pt_correction_available: false, vert_correction: -0.370074152946472,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.0500000007450581, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 38, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.0174532923847437, two_pt_correction_available: false, vert_correction: -0.43128889799118,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.270000010728836, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 39, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0349065847694874, two_pt_correction_available: false, vert_correction: -0.423701733350754,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.180000007152557, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 40, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.122173048555851, two_pt_correction_available: false, vert_correction: -0.361161530017853,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.189999997615814, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 41, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.174532920122147, two_pt_correction_available: false, vert_correction: -0.352254241704941,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.100000001490116, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 42, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.104719758033752, two_pt_correction_available: false, vert_correction: -0.414742022752762,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.200000002980232, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 43, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.165806278586388, two_pt_correction_available: false, vert_correction: -0.405792057514191,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.219999998807907, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 44, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.113446399569511, two_pt_correction_available: false, vert_correction: -0.28999200463295,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.200000002980232, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 45, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.0567231997847557, two_pt_correction_available: false, vert_correction: -0.281101644039154,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.150000005960464, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 46, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.13962633907795, two_pt_correction_available: false, vert_correction: -0.343351542949677,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.219999998807907, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 47, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.0872664600610733, two_pt_correction_available: false, vert_correction: -0.334452718496323,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.0599999986588955, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 48, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0, two_pt_correction_available: false, vert_correction: -0.272210210561752,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.129999995231628, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 49, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0558505356311798, two_pt_correction_available: false, vert_correction: -0.26331701874733,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.00999999977648258, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 50, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.0174532923847437, two_pt_correction_available: false, vert_correction: -0.323895305395126,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.150000005960464, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 51, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0349065847694874, two_pt_correction_available: false, vert_correction: -0.316663861274719,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.200000002980232, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 52, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.122173048555851, two_pt_correction_available: false, vert_correction: -0.254421383142471,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.239999994635582, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 53, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.165806278586388, two_pt_correction_available: false, vert_correction: -0.245522528886795,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.180000007152557, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 54, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.104719758033752, two_pt_correction_available: false, vert_correction: -0.307772427797318,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.219999998807907, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 55, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.157079637050629, two_pt_correction_available: false, vert_correction: -0.298882067203522,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.140000000596046, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 56, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.104719758033752, two_pt_correction_available: false, vert_correction: -0.183082059025764,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.319999992847443, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 57, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.0610865242779255, two_pt_correction_available: false, vert_correction: -0.17413204908371,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.200000002980232, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 58, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.13962633907795, two_pt_correction_available: false, vert_correction: -0.236619830131531,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.25, dist_correction_x: 0, dist_correction_y: 0, focal_distance: 0,
|
||||
focal_slope: 0, laser_id: 59, max_intensity: 255, min_intensity: 0, rot_correction: -0.0785398185253143,
|
||||
two_pt_correction_available: false, vert_correction: -0.22771255671978, vert_offset_correction: 0}
|
||||
- {dist_correction: 0.170000001788139, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 60, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0, two_pt_correction_available: false, vert_correction: -0.16517236828804,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.230000004172325, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 61, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0436332300305367, two_pt_correction_available: false, vert_correction: -0.156202226877213,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.150000005960464, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 62, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.0174532923847437, two_pt_correction_available: false, vert_correction: -0.218799933791161,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.230000004172325, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 63, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0314159244298935, two_pt_correction_available: false, vert_correction: -0.209881335496902,
|
||||
vert_offset_correction: 0}
|
||||
num_lasers: 64
|
||||
distance_resolution: 0.002
|
||||
@@ -0,0 +1,51 @@
|
||||
lasers:
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 0, rot_correction: 0.0,
|
||||
vert_correction: -0.17453292519943295, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 1, rot_correction: 0.0,
|
||||
vert_correction: 0.011635528346628864, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 2, rot_correction: 0.0,
|
||||
vert_correction: -0.15126186850617523, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 3, rot_correction: 0.0,
|
||||
vert_correction: 0.03490658503988659, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 4, rot_correction: 0.0,
|
||||
vert_correction: -0.1279908118129175, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 5, rot_correction: 0.0,
|
||||
vert_correction: 0.05817764173314432, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 6, rot_correction: 0.0,
|
||||
vert_correction: -0.10471975511965977, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 7, rot_correction: 0.0,
|
||||
vert_correction: 0.08144869842640205, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 8, rot_correction: 0.0,
|
||||
vert_correction: -0.08144869842640205, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 9, rot_correction: 0.0,
|
||||
vert_correction: 0.10471975511965977, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 10, rot_correction: 0.0,
|
||||
vert_correction: -0.05817764173314432, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 11, rot_correction: 0.0,
|
||||
vert_correction: 0.1279908118129175, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 12, rot_correction: 0.0,
|
||||
vert_correction: -0.03490658503988659, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 13, rot_correction: 0.0,
|
||||
vert_correction: 0.15126186850617523, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 14, rot_correction: 0.0,
|
||||
vert_correction: -0.011635528346628864, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 15, rot_correction: 0.0,
|
||||
vert_correction: 0.17453292519943295, vert_offset_correction: 0.0}
|
||||
num_lasers: 16
|
||||
distance_resolution: 0.002
|
||||
@@ -0,0 +1,51 @@
|
||||
lasers:
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 0, rot_correction: 0.0,
|
||||
vert_correction: -0.2617993877991494, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 1, rot_correction: 0.0,
|
||||
vert_correction: 0.017453292519943295, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 2, rot_correction: 0.0,
|
||||
vert_correction: -0.22689280275926285, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 3, rot_correction: 0.0,
|
||||
vert_correction: 0.05235987755982989, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 4, rot_correction: 0.0,
|
||||
vert_correction: -0.19198621771937624, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 5, rot_correction: 0.0,
|
||||
vert_correction: 0.08726646259971647, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 6, rot_correction: 0.0,
|
||||
vert_correction: -0.15707963267948966, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 7, rot_correction: 0.0,
|
||||
vert_correction: 0.12217304763960307, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 8, rot_correction: 0.0,
|
||||
vert_correction: -0.12217304763960307, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 9, rot_correction: 0.0,
|
||||
vert_correction: 0.15707963267948966, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 10, rot_correction: 0.0,
|
||||
vert_correction: -0.08726646259971647, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 11, rot_correction: 0.0,
|
||||
vert_correction: 0.19198621771937624, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 12, rot_correction: 0.0,
|
||||
vert_correction: -0.05235987755982989, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 13, rot_correction: 0.0,
|
||||
vert_correction: 0.22689280275926285, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 14, rot_correction: 0.0,
|
||||
vert_correction: -0.017453292519943295, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 15, rot_correction: 0.0,
|
||||
vert_correction: 0.2617993877991494, vert_offset_correction: 0.0}
|
||||
num_lasers: 16
|
||||
distance_resolution: 0.002
|
||||
@@ -0,0 +1,99 @@
|
||||
lasers:
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 0, rot_correction: -0.024434609527920613,
|
||||
vert_correction: -0.4363323129985824, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 1, rot_correction: 0.07330382858376185,
|
||||
vert_correction: -0.017453292519943295, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 2, rot_correction: -0.024434609527920613,
|
||||
vert_correction: -0.029094638630745476, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 3, rot_correction: 0.024434609527920613,
|
||||
vert_correction: -0.2729520417193932, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 4, rot_correction: -0.024434609527920613,
|
||||
vert_correction: -0.19739673840055869, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 5, rot_correction: 0.024434609527920613,
|
||||
vert_correction: 0.0, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 6, rot_correction: -0.07330382858376185,
|
||||
vert_correction: -0.011641346110802179, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 7, rot_correction: 0.024434609527920613,
|
||||
vert_correction: -0.15433946575385857, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 8, rot_correction: -0.024434609527920613,
|
||||
vert_correction: -0.12660618393966866, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 9, rot_correction: 0.07330382858376185,
|
||||
vert_correction: 0.005811946409141118, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 10, rot_correction: -0.024434609527920613,
|
||||
vert_correction: -0.005811946409141118, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 11, rot_correction: 0.024434609527920613,
|
||||
vert_correction: -0.10730284241261137, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 12, rot_correction: -0.07330382858376185,
|
||||
vert_correction: -0.0930784090088576, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 13, rot_correction: 0.024434609527920613,
|
||||
vert_correction: 0.02326523892908441, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 14, rot_correction: -0.07330382858376185,
|
||||
vert_correction: 0.011641346110802179, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 15, rot_correction: 0.024434609527920613,
|
||||
vert_correction: -0.06981317007977318, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 16, rot_correction: -0.024434609527920613,
|
||||
vert_correction: -0.08145451619057535, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 17, rot_correction: 0.07330382858376185,
|
||||
vert_correction: 0.029094638630745476, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 18, rot_correction: -0.024434609527920613,
|
||||
vert_correction: 0.017453292519943295, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 19, rot_correction: 0.07330382858376185,
|
||||
vert_correction: -0.06400122367063206, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 20, rot_correction: -0.07330382858376185,
|
||||
vert_correction: -0.058171823968971005, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 21, rot_correction: 0.024434609527920613,
|
||||
vert_correction: 0.058171823968971005, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 22, rot_correction: -0.024434609527920613,
|
||||
vert_correction: 0.04071853144902771, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 23, rot_correction: 0.024434609527920613,
|
||||
vert_correction: -0.04654793115068877, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 24, rot_correction: -0.024434609527920613,
|
||||
vert_correction: -0.05235987755982989, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 25, rot_correction: 0.024434609527920613,
|
||||
vert_correction: 0.12217304763960307, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 26, rot_correction: -0.024434609527920613,
|
||||
vert_correction: 0.08145451619057535, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 27, rot_correction: 0.07330382858376185,
|
||||
vert_correction: -0.04071853144902771, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 28, rot_correction: -0.07330382858376185,
|
||||
vert_correction: -0.03490658503988659, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 29, rot_correction: 0.024434609527920613,
|
||||
vert_correction: 0.2617993877991494, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 30, rot_correction: -0.024434609527920613,
|
||||
vert_correction: 0.18034487160857407, vert_offset_correction: 0.0}
|
||||
- {dist_correction: 0.0, dist_correction_x: 0.0, dist_correction_y: 0.0, focal_distance: 0.0,
|
||||
focal_slope: 0.0, horiz_offset_correction: 0.0, laser_id: 31, rot_correction: 0.024434609527920613,
|
||||
vert_correction: -0.02326523892908441, vert_offset_correction: 0.0}
|
||||
num_lasers: 32
|
||||
distance_resolution: 0.004
|
||||
@@ -0,0 +1,78 @@
|
||||
Background\ ColorB=0
|
||||
Background\ ColorG=0
|
||||
Background\ ColorR=0
|
||||
Camera\ Config=0.384797 3.10041 41.6639 0 0 0
|
||||
Camera\ Type=rviz::OrbitViewController
|
||||
Fixed\ Frame=/velodyne
|
||||
Grid.Alpha=0.5
|
||||
Grid.Cell\ Size=1
|
||||
Grid.ColorB=0.5
|
||||
Grid.ColorG=0.5
|
||||
Grid.ColorR=0.5
|
||||
Grid.Enabled=1
|
||||
Grid.Line\ Style=0
|
||||
Grid.Line\ Width=0.03
|
||||
Grid.Normal\ Cell\ Count=0
|
||||
Grid.OffsetX=0
|
||||
Grid.OffsetY=0
|
||||
Grid.OffsetZ=0
|
||||
Grid.Plane=0
|
||||
Grid.Plane\ Cell\ Count=50
|
||||
Grid.Reference\ Frame=<Fixed Frame>
|
||||
Property\ Grid\ Splitter=751,78
|
||||
Property\ Grid\ State=expanded=.Global Options,Grid.Enabled,Velodyne Cloud.Enabled;splitterratio=0.5
|
||||
QMainWindow=000000ff00000000fd00000003000000000000011d0000038ffc0200000001fb000000100044006900730070006c006100790073010000001d0000038f000000ee00ffffff00000001000001300000038ffc0200000003fb0000001e0054006f006f006c002000500072006f0070006500720074006900650073010000001d0000011f0000006700fffffffb0000000a00560069006500770073010000014200000145000000bb00fffffffb0000001200530065006c0065006300740069006f006e010000028d0000011f0000006700ffffff00000003000005d10000003efc0100000001fb0000000800540069006d00650100000000000005d1000002bf00ffffff000003780000038f00000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000
|
||||
TF.All\ Enabled=1
|
||||
TF.Enabled=1
|
||||
TF.Frame\ Timeout=15
|
||||
TF.Marker\ Scale=1
|
||||
TF.Show\ Arrows=1
|
||||
TF.Show\ Axes=1
|
||||
TF.Show\ Names=1
|
||||
TF.Update\ Interval=0
|
||||
Target\ Frame=<Fixed Frame>
|
||||
Tool\ 2D\ Nav\ GoalTopic=move_base_simple/goal
|
||||
Tool\ 2D\ Pose\ EstimateTopic=initialpose
|
||||
Velodyne\ Cloud..AxisColorAutocompute\ Value\ Bounds=1
|
||||
Velodyne\ Cloud..AxisColorAxis=2
|
||||
Velodyne\ Cloud..AxisColorMax\ Value=10
|
||||
Velodyne\ Cloud..AxisColorMin\ Value=-10
|
||||
Velodyne\ Cloud..AxisColorUse\ Fixed\ Frame=1
|
||||
Velodyne\ Cloud..FlatColorColorB=1
|
||||
Velodyne\ Cloud..FlatColorColorG=1
|
||||
Velodyne\ Cloud..FlatColorColorR=1
|
||||
Velodyne\ Cloud..IntensityAutocompute\ Intensity\ Bounds=1
|
||||
Velodyne\ Cloud..IntensityChannel\ Name=intensity
|
||||
Velodyne\ Cloud..IntensityMax\ ColorB=1
|
||||
Velodyne\ Cloud..IntensityMax\ ColorG=0.776471
|
||||
Velodyne\ Cloud..IntensityMax\ ColorR=0.796078
|
||||
Velodyne\ Cloud..IntensityMax\ Intensity=255
|
||||
Velodyne\ Cloud..IntensityMin\ ColorB=1
|
||||
Velodyne\ Cloud..IntensityMin\ ColorG=0.0823529
|
||||
Velodyne\ Cloud..IntensityMin\ ColorR=0.141176
|
||||
Velodyne\ Cloud..IntensityMin\ Intensity=95
|
||||
Velodyne\ Cloud..IntensityUse\ full\ RGB\ spectrum=0
|
||||
Velodyne\ Cloud.Alpha=1
|
||||
Velodyne\ Cloud.Billboard\ Size=0.1
|
||||
Velodyne\ Cloud.Color\ Transformer=Intensity
|
||||
Velodyne\ Cloud.Decay\ Time=0
|
||||
Velodyne\ Cloud.Enabled=1
|
||||
Velodyne\ Cloud.Position\ Transformer=XYZ
|
||||
Velodyne\ Cloud.Queue\ Size=10
|
||||
Velodyne\ Cloud.Selectable=1
|
||||
Velodyne\ Cloud.Style=0
|
||||
Velodyne\ Cloud.Topic=/velodyne_points
|
||||
[Display0]
|
||||
ClassName=rviz::GridDisplay
|
||||
Name=Grid
|
||||
[Display1]
|
||||
ClassName=rviz::TFDisplay
|
||||
Name=TF
|
||||
[Display2]
|
||||
ClassName=rviz::PointCloud2Display
|
||||
Name=Velodyne Cloud
|
||||
[Window]
|
||||
Height=1045
|
||||
Width=1505
|
||||
X=-8
|
||||
Y=-29
|
||||
@@ -0,0 +1,209 @@
|
||||
#!/usr/bin/python
|
||||
# Software License Agreement (BSD License)
|
||||
#
|
||||
# Copyright (C) 2012, Austin Robot Technology
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# * Redistributions in binary form must reproduce the above
|
||||
# copyright notice, this list of conditions and the following
|
||||
# disclaimer in the documentation and/or other materials provided
|
||||
# with the distribution.
|
||||
# * Neither the name of Austin Robot Technology, Inc. nor the names
|
||||
# of its contributors may be used to endorse or promote products
|
||||
# derived from this software without specific prior written
|
||||
# permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
# Revision $Id$
|
||||
|
||||
"""
|
||||
Generate YAML calibration file from Velodyne db.xml.
|
||||
|
||||
The input data provided by the manufacturer are in degrees and
|
||||
centimeters. The YAML file uses radians and meters, following ROS
|
||||
standards [REP-0103].
|
||||
|
||||
"""
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
import math
|
||||
import optparse
|
||||
import os
|
||||
import sys
|
||||
from xml.etree import ElementTree
|
||||
import yaml
|
||||
|
||||
# parse the command line
|
||||
usage = """usage: %prog infile.xml [outfile.yaml]
|
||||
|
||||
Default output file is input file with .yaml suffix."""
|
||||
parser = optparse.OptionParser(usage=usage)
|
||||
options, args = parser.parse_args()
|
||||
|
||||
if len(args) < 1:
|
||||
parser.error('XML file name missing')
|
||||
sys.exit(9)
|
||||
|
||||
xmlFile = args[0]
|
||||
if len(args) >= 2:
|
||||
yamlFile = args[1]
|
||||
else:
|
||||
yamlFile, ext = os.path.splitext(xmlFile)
|
||||
yamlFile += '.yaml'
|
||||
|
||||
print('converting "' + xmlFile + '" to "' + yamlFile + '"')
|
||||
|
||||
calibrationGood = True
|
||||
def xmlError(msg):
|
||||
'handle XML calibration error'
|
||||
global calibrationGood
|
||||
calibrationGood = False
|
||||
print('gen_calibration.py: ' + msg)
|
||||
|
||||
db = None
|
||||
try:
|
||||
db = ElementTree.parse(xmlFile)
|
||||
except IOError:
|
||||
xmlError('unable to read ' + xmlFile)
|
||||
except ElementTree.ParseError:
|
||||
xmlError('XML parse failed for ' + xmlFile)
|
||||
|
||||
if not calibrationGood:
|
||||
sys.exit(2)
|
||||
|
||||
# create a dictionary to hold all relevant calibration values
|
||||
calibration = {'num_lasers': 0, 'lasers': [], 'distance_resolution': 0.2}
|
||||
cm2meters = 0.01 # convert centimeters to meters
|
||||
|
||||
def addLaserCalibration(laser_num, key, val):
|
||||
'Define key and corresponding value for laser_num'
|
||||
global calibration
|
||||
if laser_num < len(calibration['lasers']):
|
||||
calibration['lasers'][laser_num][key] = val
|
||||
else:
|
||||
calibration['lasers'].append({key: val})
|
||||
|
||||
# add enabled flags
|
||||
num_enabled = 0
|
||||
enabled_lasers = []
|
||||
enabled = db.find('DB/enabled_')
|
||||
if enabled == None:
|
||||
print('no enabled tags found: assuming all 64 enabled')
|
||||
num_enabled = 64
|
||||
enabled_lasers = [True for i in xrange(num_enabled)]
|
||||
else:
|
||||
index = 0
|
||||
for el in enabled:
|
||||
if el.tag == 'item':
|
||||
this_enabled = int(el.text) != 0
|
||||
enabled_lasers.append(this_enabled)
|
||||
index += 1
|
||||
if this_enabled:
|
||||
num_enabled += 1
|
||||
|
||||
calibration['num_lasers'] = num_enabled
|
||||
print(str(num_enabled) + ' lasers')
|
||||
|
||||
# add distance resolution (cm)
|
||||
distLSB = db.find('DB/distLSB_')
|
||||
if distLSB != None:
|
||||
calibration['distance_resolution'] = float(distLSB.text) * cm2meters
|
||||
|
||||
# add minimum laser intensities
|
||||
minIntensities = db.find('DB/minIntensity_')
|
||||
if minIntensities != None:
|
||||
index = 0
|
||||
for el in minIntensities:
|
||||
if el.tag == 'item':
|
||||
if enabled_lasers[index]:
|
||||
value = int(el.text)
|
||||
if value != 0:
|
||||
addLaserCalibration(index, 'min_intensity', value)
|
||||
index += 1
|
||||
|
||||
# add maximum laser intensities
|
||||
maxIntensities = db.find('DB/maxIntensity_')
|
||||
if maxIntensities != None:
|
||||
index = 0
|
||||
for el in maxIntensities:
|
||||
if el.tag == 'item':
|
||||
if enabled_lasers[index]:
|
||||
value = int(el.text)
|
||||
if value != 255:
|
||||
addLaserCalibration(index, 'max_intensity', value)
|
||||
index += 1
|
||||
|
||||
# add calibration information for each laser
|
||||
for el in db.find('DB/points_'):
|
||||
if el.tag == 'item':
|
||||
for px in el:
|
||||
for field in px:
|
||||
if field.tag == 'id_':
|
||||
index = int(field.text)
|
||||
if not enabled_lasers[index]:
|
||||
break # skip this laser, it is not enabled
|
||||
addLaserCalibration(index, 'laser_id', index)
|
||||
|
||||
if field.tag == 'rotCorrection_':
|
||||
addLaserCalibration(index, 'rot_correction',
|
||||
math.radians(float(field.text)))
|
||||
elif field.tag == 'vertCorrection_':
|
||||
addLaserCalibration(index, 'vert_correction',
|
||||
math.radians(float(field.text)))
|
||||
elif field.tag == 'distCorrection_':
|
||||
addLaserCalibration(index, 'dist_correction',
|
||||
float(field.text) * cm2meters)
|
||||
elif field.tag == 'distCorrectionX_':
|
||||
addLaserCalibration(index, 'dist_correction_x',
|
||||
float(field.text) * cm2meters)
|
||||
elif field.tag == 'distCorrectionY_':
|
||||
addLaserCalibration(index, 'dist_correction_y',
|
||||
float(field.text) * cm2meters)
|
||||
elif field.tag == 'vertOffsetCorrection_':
|
||||
addLaserCalibration(index, 'vert_offset_correction',
|
||||
float(field.text) * cm2meters)
|
||||
elif field.tag == 'horizOffsetCorrection_':
|
||||
addLaserCalibration(index, 'horiz_offset_correction',
|
||||
float(field.text) * cm2meters)
|
||||
elif field.tag == 'focalDistance_':
|
||||
addLaserCalibration(index, 'focal_distance',
|
||||
float(field.text) * cm2meters)
|
||||
elif field.tag == 'focalSlope_':
|
||||
addLaserCalibration(index, 'focal_slope', float(field.text))
|
||||
|
||||
# validate input data
|
||||
if calibration['num_lasers'] <= 0:
|
||||
xmlError('no lasers defined')
|
||||
elif calibration['num_lasers'] != num_enabled:
|
||||
xmlError('inconsistent number of lasers defined')
|
||||
|
||||
# TODO: make sure all required fields are present.
|
||||
# (Which ones are required?)
|
||||
|
||||
if calibrationGood:
|
||||
|
||||
# write calibration data to YAML file
|
||||
f = open(yamlFile, 'w')
|
||||
try:
|
||||
yaml.dump(calibration, f)
|
||||
finally:
|
||||
f.close()
|
||||
@@ -0,0 +1,31 @@
|
||||
add_executable(cloud_node cloud_node.cc convert.cc pointcloudXYZIR.cc organized_cloudXYZIR.cc)
|
||||
add_dependencies(cloud_node ${${PROJECT_NAME}_EXPORTED_TARGETS})
|
||||
target_link_libraries(cloud_node velodyne_rawdata
|
||||
${catkin_LIBRARIES} ${YAML_CPP_LIBRARIES})
|
||||
install(TARGETS cloud_node
|
||||
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})
|
||||
|
||||
add_library(cloud_nodelet cloud_nodelet.cc convert.cc pointcloudXYZIR.cc organized_cloudXYZIR.cc)
|
||||
add_dependencies(cloud_nodelet ${${PROJECT_NAME}_EXPORTED_TARGETS})
|
||||
target_link_libraries(cloud_nodelet velodyne_rawdata
|
||||
${catkin_LIBRARIES} ${YAML_CPP_LIBRARIES})
|
||||
install(TARGETS cloud_nodelet
|
||||
RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
|
||||
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
|
||||
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION})
|
||||
|
||||
add_executable(transform_node transform_node.cc transform.cc pointcloudXYZIR.cc organized_cloudXYZIR.cc)
|
||||
add_dependencies(transform_node ${${PROJECT_NAME}_EXPORTED_TARGETS})
|
||||
target_link_libraries(transform_node velodyne_rawdata
|
||||
${catkin_LIBRARIES} ${YAML_CPP_LIBRARIES})
|
||||
install(TARGETS transform_node
|
||||
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})
|
||||
|
||||
add_library(transform_nodelet transform_nodelet.cc transform.cc pointcloudXYZIR.cc organized_cloudXYZIR.cc)
|
||||
add_dependencies(transform_nodelet ${${PROJECT_NAME}_EXPORTED_TARGETS})
|
||||
target_link_libraries(transform_nodelet velodyne_rawdata
|
||||
${catkin_LIBRARIES} ${YAML_CPP_LIBRARIES})
|
||||
install(TARGETS transform_nodelet
|
||||
RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
|
||||
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
|
||||
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION})
|
||||
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Copyright (C) 2012 Austin Robot Technology, Jack O'Quin
|
||||
* License: Modified BSD Software License Agreement
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/** \file
|
||||
|
||||
This ROS node converts raw Velodyne LIDAR packets to PointCloud2.
|
||||
|
||||
*/
|
||||
|
||||
#include <ros/ros.h>
|
||||
#include "velodyne_pointcloud/convert.h"
|
||||
|
||||
/** Main node entry point. */
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
ros::init(argc, argv, "cloud_node");
|
||||
ros::NodeHandle node;
|
||||
ros::NodeHandle priv_nh("~");
|
||||
|
||||
// create conversion class, which subscribes to raw data
|
||||
velodyne_pointcloud::Convert conv(node, priv_nh);
|
||||
|
||||
// handle callbacks until shut down
|
||||
ros::spin();
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* Copyright (C) 2012 Austin Robot Technology, Jack O'Quin
|
||||
* License: Modified BSD Software License Agreement
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/** @file
|
||||
|
||||
This ROS nodelet converts raw Velodyne 3D LIDAR packets to a
|
||||
PointCloud2.
|
||||
|
||||
*/
|
||||
|
||||
#include <ros/ros.h>
|
||||
#include <pluginlib/class_list_macros.h>
|
||||
#include <nodelet/nodelet.h>
|
||||
|
||||
#include "velodyne_pointcloud/convert.h"
|
||||
|
||||
namespace velodyne_pointcloud
|
||||
{
|
||||
class CloudNodelet: public nodelet::Nodelet
|
||||
{
|
||||
public:
|
||||
|
||||
CloudNodelet() {}
|
||||
~CloudNodelet() {}
|
||||
|
||||
private:
|
||||
|
||||
virtual void onInit();
|
||||
boost::shared_ptr<Convert> conv_;
|
||||
};
|
||||
|
||||
/** @brief Nodelet initialization. */
|
||||
void CloudNodelet::onInit()
|
||||
{
|
||||
conv_.reset(new Convert(getNodeHandle(), getPrivateNodeHandle(), getName()));
|
||||
}
|
||||
|
||||
} // namespace velodyne_pointcloud
|
||||
|
||||
|
||||
// Register this plugin with pluginlib. Names must match nodelets.xml.
|
||||
//
|
||||
// parameters: class type, base class type
|
||||
PLUGINLIB_EXPORT_CLASS(velodyne_pointcloud::CloudNodelet, nodelet::Nodelet)
|
||||
@@ -0,0 +1,150 @@
|
||||
/*
|
||||
* Copyright (C) 2009, 2010 Austin Robot Technology, Jack O'Quin
|
||||
* Copyright (C) 2011 Jesse Vera
|
||||
* Copyright (C) 2012 Austin Robot Technology, Jack O'Quin
|
||||
* License: Modified BSD Software License Agreement
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/** @file
|
||||
|
||||
This class converts raw Velodyne 3D LIDAR packets to PointCloud2.
|
||||
|
||||
*/
|
||||
|
||||
#include "velodyne_pointcloud/convert.h"
|
||||
|
||||
#include <velodyne_pointcloud/pointcloudXYZIR.h>
|
||||
#include <velodyne_pointcloud/organized_cloudXYZIR.h>
|
||||
|
||||
namespace velodyne_pointcloud
|
||||
{
|
||||
/** @brief Constructor. */
|
||||
Convert::Convert(ros::NodeHandle node, ros::NodeHandle private_nh, std::string const & node_name):
|
||||
data_(new velodyne_rawdata::RawData()), first_rcfg_call(true),
|
||||
diagnostics_(node, private_nh, node_name)
|
||||
{
|
||||
// Get startup parameters
|
||||
private_nh.param<std::string>("fixed_frame", config_.fixed_frame, "velodyne");
|
||||
private_nh.param<std::string>("target_Frame", config_.target_frame, "velodyne");
|
||||
private_nh.param<double>("min_range", config_.min_range, 10.0);
|
||||
private_nh.param<double>("max_range", config_.max_range, 200.0);
|
||||
private_nh.param<bool>("organize_cloud", config_.organize_cloud, false);
|
||||
|
||||
boost::optional<velodyne_pointcloud::Calibration> calibration = data_->setup(private_nh);
|
||||
if(calibration)
|
||||
{
|
||||
ROS_DEBUG_STREAM("Calibration file loaded.");
|
||||
config_.num_lasers = static_cast<uint16_t>(calibration.get().num_lasers);
|
||||
}
|
||||
else
|
||||
{
|
||||
ROS_ERROR_STREAM("Could not load calibration file!");
|
||||
}
|
||||
|
||||
if(config_.organize_cloud)
|
||||
{
|
||||
container_ptr_ = boost::shared_ptr<OrganizedCloudXYZIR>(
|
||||
new OrganizedCloudXYZIR(config_.max_range, config_.min_range,
|
||||
config_.target_frame, config_.fixed_frame,
|
||||
config_.num_lasers, data_->scansPerPacket()));
|
||||
}
|
||||
else
|
||||
{
|
||||
container_ptr_ = boost::shared_ptr<PointcloudXYZIR>(
|
||||
new PointcloudXYZIR(config_.max_range, config_.min_range,
|
||||
config_.target_frame, config_.fixed_frame,
|
||||
data_->scansPerPacket()));
|
||||
}
|
||||
|
||||
|
||||
// advertise output point cloud (before subscribing to input data)
|
||||
output_ =
|
||||
node.advertise<sensor_msgs::PointCloud2>("velodyne_points", 10);
|
||||
|
||||
srv_ = boost::make_shared <dynamic_reconfigure::Server<velodyne_pointcloud::
|
||||
CloudNodeConfig> > (private_nh);
|
||||
dynamic_reconfigure::Server<velodyne_pointcloud::CloudNodeConfig>::
|
||||
CallbackType f;
|
||||
f = boost::bind (&Convert::callback, this, _1, _2);
|
||||
srv_->setCallback (f);
|
||||
|
||||
// subscribe to VelodyneScan packets
|
||||
velodyne_scan_ =
|
||||
node.subscribe("velodyne_packets", 10,
|
||||
&Convert::processScan, (Convert *) this,
|
||||
ros::TransportHints().tcpNoDelay(true));
|
||||
|
||||
// Diagnostics
|
||||
diagnostics_.setHardwareID("Velodyne Convert");
|
||||
// Arbitrary frequencies since we don't know which RPM is used, and are only
|
||||
// concerned about monitoring the frequency.
|
||||
diag_min_freq_ = 2.0;
|
||||
diag_max_freq_ = 20.0;
|
||||
using namespace diagnostic_updater;
|
||||
diag_topic_.reset(new TopicDiagnostic("velodyne_points", diagnostics_,
|
||||
FrequencyStatusParam(&diag_min_freq_,
|
||||
&diag_max_freq_,
|
||||
0.1, 10),
|
||||
TimeStampStatusParam()));
|
||||
}
|
||||
|
||||
void Convert::callback(velodyne_pointcloud::CloudNodeConfig &config,
|
||||
uint32_t level)
|
||||
{
|
||||
ROS_INFO("Reconfigure Request");
|
||||
data_->setParameters(config.min_range, config.max_range, config.view_direction,
|
||||
config.view_width);
|
||||
config_.fixed_frame = config.fixed_frame;
|
||||
config_.target_frame = config.target_frame;
|
||||
config_.min_range = config.min_range;
|
||||
config_.max_range = config.max_range;
|
||||
|
||||
if(first_rcfg_call || config.organize_cloud != config_.organize_cloud){
|
||||
first_rcfg_call = false;
|
||||
config_.organize_cloud = config.organize_cloud;
|
||||
if(config_.organize_cloud) // TODO only on change
|
||||
{
|
||||
ROS_INFO_STREAM("Using the organized cloud format...");
|
||||
container_ptr_ = boost::shared_ptr<OrganizedCloudXYZIR>(
|
||||
new OrganizedCloudXYZIR(config_.max_range, config_.min_range,
|
||||
config_.target_frame, config_.fixed_frame,
|
||||
config_.num_lasers, data_->scansPerPacket()));
|
||||
}
|
||||
else
|
||||
{
|
||||
container_ptr_ = boost::shared_ptr<PointcloudXYZIR>(
|
||||
new PointcloudXYZIR(config_.max_range, config_.min_range,
|
||||
config_.target_frame, config_.fixed_frame,
|
||||
data_->scansPerPacket()));
|
||||
}
|
||||
}
|
||||
|
||||
container_ptr_->configure(config_.max_range, config_.min_range, config_.fixed_frame, config_.target_frame);
|
||||
|
||||
}
|
||||
|
||||
/** @brief Callback for raw scan messages. */
|
||||
void Convert::processScan(const velodyne_msgs::VelodyneScan::ConstPtr &scanMsg)
|
||||
{
|
||||
if (output_.getNumSubscribers() == 0) // no one listening?
|
||||
return; // avoid much work
|
||||
|
||||
boost::lock_guard<boost::mutex> guard(reconfigure_mtx_);
|
||||
// allocate a point cloud with same time and frame ID as raw data
|
||||
container_ptr_->setup(scanMsg);
|
||||
|
||||
// process each packet provided by the driver
|
||||
for (size_t i = 0; i < scanMsg->packets.size(); ++i)
|
||||
{
|
||||
data_->unpack(scanMsg->packets[i], *container_ptr_, scanMsg->header.stamp);
|
||||
}
|
||||
|
||||
// publish the accumulated cloud message
|
||||
diag_topic_->tick(scanMsg->header.stamp);
|
||||
diagnostics_.update();
|
||||
output_.publish(container_ptr_->finishCloud());
|
||||
}
|
||||
|
||||
} // namespace velodyne_pointcloud
|
||||
@@ -0,0 +1,80 @@
|
||||
|
||||
#include <velodyne_pointcloud/organized_cloudXYZIR.h>
|
||||
|
||||
namespace velodyne_pointcloud
|
||||
{
|
||||
|
||||
OrganizedCloudXYZIR::OrganizedCloudXYZIR(
|
||||
const double max_range, const double min_range,
|
||||
const std::string& target_frame, const std::string& fixed_frame,
|
||||
const unsigned int num_lasers, const unsigned int scans_per_block,
|
||||
boost::shared_ptr<tf::TransformListener> tf_ptr)
|
||||
: DataContainerBase(
|
||||
max_range, min_range, target_frame, fixed_frame,
|
||||
num_lasers, 0, false, scans_per_block, tf_ptr, 6,
|
||||
"x", 1, sensor_msgs::PointField::FLOAT32,
|
||||
"y", 1, sensor_msgs::PointField::FLOAT32,
|
||||
"z", 1, sensor_msgs::PointField::FLOAT32,
|
||||
"intensity", 1, sensor_msgs::PointField::FLOAT32,
|
||||
"ring", 1, sensor_msgs::PointField::UINT16,
|
||||
"time", 1, sensor_msgs::PointField::FLOAT32),
|
||||
iter_x(cloud, "x"), iter_y(cloud, "y"), iter_z(cloud, "z"),
|
||||
iter_intensity(cloud, "intensity"), iter_ring(cloud, "ring"), iter_time(cloud, "time")
|
||||
{
|
||||
}
|
||||
|
||||
void OrganizedCloudXYZIR::newLine()
|
||||
{
|
||||
iter_x = iter_x + config_.init_width;
|
||||
iter_y = iter_y + config_.init_width;
|
||||
iter_z = iter_z + config_.init_width;
|
||||
iter_ring = iter_ring + config_.init_width;
|
||||
iter_intensity = iter_intensity + config_.init_width;
|
||||
iter_time = iter_time + config_.init_width;
|
||||
++cloud.height;
|
||||
}
|
||||
|
||||
void OrganizedCloudXYZIR::setup(const velodyne_msgs::VelodyneScan::ConstPtr& scan_msg){
|
||||
DataContainerBase::setup(scan_msg);
|
||||
iter_x = sensor_msgs::PointCloud2Iterator<float>(cloud, "x");
|
||||
iter_y = sensor_msgs::PointCloud2Iterator<float>(cloud, "y");
|
||||
iter_z = sensor_msgs::PointCloud2Iterator<float>(cloud, "z");
|
||||
iter_intensity = sensor_msgs::PointCloud2Iterator<float>(cloud, "intensity");
|
||||
iter_ring = sensor_msgs::PointCloud2Iterator<uint16_t >(cloud, "ring");
|
||||
iter_time = sensor_msgs::PointCloud2Iterator<float >(cloud, "time");
|
||||
}
|
||||
|
||||
|
||||
void OrganizedCloudXYZIR::addPoint(float x, float y, float z,
|
||||
const uint16_t ring, const uint16_t /*azimuth*/, const float distance, const float intensity, const float time)
|
||||
{
|
||||
/** The laser values are not ordered, the organized structure
|
||||
* needs ordered neighbour points. The right order is defined
|
||||
* by the laser_ring value.
|
||||
* To keep the right ordering, the filtered values are set to
|
||||
* NaN.
|
||||
*/
|
||||
if (pointInRange(distance))
|
||||
{
|
||||
if(config_.transform)
|
||||
transformPoint(x, y, z);
|
||||
|
||||
*(iter_x+ring) = x;
|
||||
*(iter_y+ring) = y;
|
||||
*(iter_z+ring) = z;
|
||||
*(iter_intensity+ring) = intensity;
|
||||
*(iter_ring+ring) = ring;
|
||||
*(iter_time+time) = time;
|
||||
}
|
||||
else
|
||||
{
|
||||
*(iter_x+ring) = nanf("");
|
||||
*(iter_y+ring) = nanf("");
|
||||
*(iter_z+ring) = nanf("");
|
||||
*(iter_intensity+ring) = nanf("");
|
||||
*(iter_ring+ring) = ring;
|
||||
*(iter_time+time) = time;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
|
||||
|
||||
|
||||
#include <velodyne_pointcloud/pointcloudXYZIR.h>
|
||||
|
||||
namespace velodyne_pointcloud
|
||||
{
|
||||
|
||||
PointcloudXYZIR::PointcloudXYZIR(
|
||||
const double max_range, const double min_range,
|
||||
const std::string& target_frame, const std::string& fixed_frame,
|
||||
const unsigned int scans_per_block, boost::shared_ptr<tf::TransformListener> tf_ptr)
|
||||
: DataContainerBase(
|
||||
max_range, min_range, target_frame, fixed_frame,
|
||||
0, 1, true, scans_per_block, tf_ptr, 6,
|
||||
"x", 1, sensor_msgs::PointField::FLOAT32,
|
||||
"y", 1, sensor_msgs::PointField::FLOAT32,
|
||||
"z", 1, sensor_msgs::PointField::FLOAT32,
|
||||
"intensity", 1, sensor_msgs::PointField::FLOAT32,
|
||||
"ring", 1, sensor_msgs::PointField::UINT16,
|
||||
"time", 1, sensor_msgs::PointField::FLOAT32),
|
||||
iter_x(cloud, "x"), iter_y(cloud, "y"), iter_z(cloud, "z"),
|
||||
iter_ring(cloud, "ring"), iter_intensity(cloud, "intensity"), iter_time(cloud, "time")
|
||||
{};
|
||||
|
||||
void PointcloudXYZIR::setup(const velodyne_msgs::VelodyneScan::ConstPtr& scan_msg){
|
||||
DataContainerBase::setup(scan_msg);
|
||||
iter_x = sensor_msgs::PointCloud2Iterator<float>(cloud, "x");
|
||||
iter_y = sensor_msgs::PointCloud2Iterator<float>(cloud, "y");
|
||||
iter_z = sensor_msgs::PointCloud2Iterator<float>(cloud, "z");
|
||||
iter_intensity = sensor_msgs::PointCloud2Iterator<float>(cloud, "intensity");
|
||||
iter_ring = sensor_msgs::PointCloud2Iterator<uint16_t >(cloud, "ring");
|
||||
iter_time = sensor_msgs::PointCloud2Iterator<float >(cloud, "time");
|
||||
}
|
||||
|
||||
void PointcloudXYZIR::newLine()
|
||||
{}
|
||||
|
||||
void PointcloudXYZIR::addPoint(float x, float y, float z, uint16_t ring, uint16_t /*azimuth*/, float distance, float intensity, float time)
|
||||
{
|
||||
if(!pointInRange(distance)) return;
|
||||
|
||||
// convert polar coordinates to Euclidean XYZ
|
||||
|
||||
if(config_.transform)
|
||||
transformPoint(x, y, z);
|
||||
|
||||
*iter_x = x;
|
||||
*iter_y = y;
|
||||
*iter_z = z;
|
||||
*iter_ring = ring;
|
||||
*iter_intensity = intensity;
|
||||
*iter_time = time;
|
||||
|
||||
++cloud.width;
|
||||
++iter_x;
|
||||
++iter_y;
|
||||
++iter_z;
|
||||
++iter_ring;
|
||||
++iter_intensity;
|
||||
++iter_time;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,158 @@
|
||||
/*
|
||||
* Copyright (C) 2009, 2010 Austin Robot Technology, Jack O'Quin
|
||||
* Copyright (C) 2011 Jesse Vera
|
||||
* Copyright (C) 2012 Austin Robot Technology, Jack O'Quin
|
||||
* License: Modified BSD Software License Agreement
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/** @file
|
||||
|
||||
This class transforms raw Velodyne 3D LIDAR packets to PointCloud2
|
||||
in the /map frame of reference.
|
||||
|
||||
@author Jack O'Quin
|
||||
@author Jesse Vera
|
||||
@author Sebastian Pütz
|
||||
|
||||
*/
|
||||
|
||||
#include "velodyne_pointcloud/transform.h"
|
||||
|
||||
#include <velodyne_pointcloud/pointcloudXYZIR.h>
|
||||
#include <velodyne_pointcloud/organized_cloudXYZIR.h>
|
||||
|
||||
namespace velodyne_pointcloud
|
||||
{
|
||||
/** @brief Constructor. */
|
||||
Transform::Transform(ros::NodeHandle node, ros::NodeHandle private_nh, std::string const & node_name):
|
||||
tf_prefix_(tf::getPrefixParam(private_nh)),
|
||||
data_(new velodyne_rawdata::RawData),
|
||||
first_rcfg_call(true),
|
||||
diagnostics_(node, private_nh, node_name)
|
||||
{
|
||||
boost::optional<velodyne_pointcloud::Calibration> calibration = data_->setup(private_nh);
|
||||
if(calibration)
|
||||
{
|
||||
ROS_DEBUG_STREAM("Calibration file loaded.");
|
||||
config_.num_lasers = static_cast<uint16_t>(calibration.get().num_lasers);
|
||||
}
|
||||
else
|
||||
{
|
||||
ROS_ERROR_STREAM("Could not load calibration file!");
|
||||
}
|
||||
|
||||
config_.target_frame = config_.fixed_frame = "velodyne";
|
||||
tf_ptr_ = boost::make_shared<tf::TransformListener>();
|
||||
|
||||
if(config_.organize_cloud)
|
||||
{
|
||||
container_ptr = boost::shared_ptr<OrganizedCloudXYZIR>(
|
||||
new OrganizedCloudXYZIR(config_.max_range, config_.min_range, config_.target_frame, config_.fixed_frame,
|
||||
config_.num_lasers, data_->scansPerPacket(), tf_ptr_));
|
||||
}
|
||||
else
|
||||
{
|
||||
container_ptr = boost::shared_ptr<PointcloudXYZIR>(
|
||||
new PointcloudXYZIR(config_.max_range, config_.min_range,
|
||||
config_.target_frame, config_.fixed_frame,
|
||||
data_->scansPerPacket(), tf_ptr_));
|
||||
}
|
||||
|
||||
// advertise output point cloud (before subscribing to input data)
|
||||
output_ =
|
||||
node.advertise<sensor_msgs::PointCloud2>("velodyne_points", 10);
|
||||
|
||||
srv_ = boost::make_shared<dynamic_reconfigure::Server<TransformNodeCfg>> (private_nh);
|
||||
dynamic_reconfigure::Server<TransformNodeCfg>::CallbackType f;
|
||||
f = boost::bind (&Transform::reconfigure_callback, this, _1, _2);
|
||||
srv_->setCallback (f);
|
||||
|
||||
// subscribe to VelodyneScan packets using transform filter
|
||||
velodyne_scan_.subscribe(node, "velodyne_packets", 10);
|
||||
tf_filter_ptr_ = boost::shared_ptr<tf::MessageFilter<velodyne_msgs::VelodyneScan> >(
|
||||
new tf::MessageFilter<velodyne_msgs::VelodyneScan>(velodyne_scan_, *tf_ptr_, config_.target_frame, 10));
|
||||
tf_filter_ptr_->registerCallback(boost::bind(&Transform::processScan, this, _1));
|
||||
private_nh.param<std::string>("fixed_frame", config_.fixed_frame, "odom");
|
||||
|
||||
// Diagnostics
|
||||
diagnostics_.setHardwareID("Velodyne Transform");
|
||||
// Arbitrary frequencies since we don't know which RPM is used, and are only
|
||||
// concerned about monitoring the frequency.
|
||||
diag_min_freq_ = 2.0;
|
||||
diag_max_freq_ = 20.0;
|
||||
using namespace diagnostic_updater;
|
||||
diag_topic_.reset(new TopicDiagnostic("velodyne_points", diagnostics_,
|
||||
FrequencyStatusParam(&diag_min_freq_,
|
||||
&diag_max_freq_,
|
||||
0.1, 10),
|
||||
TimeStampStatusParam()));
|
||||
|
||||
}
|
||||
|
||||
void Transform::reconfigure_callback(
|
||||
velodyne_pointcloud::TransformNodeConfig &config, uint32_t level)
|
||||
{
|
||||
ROS_INFO_STREAM("Reconfigure request.");
|
||||
data_->setParameters(config.min_range, config.max_range,
|
||||
config.view_direction, config.view_width);
|
||||
config_.target_frame = tf::resolve(tf_prefix_, config.frame_id);
|
||||
ROS_INFO_STREAM("Target frame ID now: " << config_.target_frame);
|
||||
config_.min_range = config.min_range;
|
||||
config_.max_range = config.max_range;
|
||||
|
||||
boost::lock_guard<boost::mutex> guard(reconfigure_mtx_);
|
||||
|
||||
if(first_rcfg_call || config.organize_cloud != config_.organize_cloud){
|
||||
first_rcfg_call = false;
|
||||
config_.organize_cloud = config.organize_cloud;
|
||||
if(config_.organize_cloud)
|
||||
{
|
||||
ROS_INFO_STREAM("Using the organized cloud format...");
|
||||
container_ptr = boost::shared_ptr<OrganizedCloudXYZIR>(
|
||||
new OrganizedCloudXYZIR(config_.max_range, config_.min_range,
|
||||
config_.target_frame, config_.fixed_frame,
|
||||
config_.num_lasers, data_->scansPerPacket()));
|
||||
}
|
||||
else
|
||||
{
|
||||
container_ptr = boost::shared_ptr<PointcloudXYZIR>(
|
||||
new PointcloudXYZIR(config_.max_range, config_.min_range,
|
||||
config_.target_frame, config_.fixed_frame,
|
||||
data_->scansPerPacket()));
|
||||
}
|
||||
}
|
||||
container_ptr->configure(config_.max_range, config_.min_range, config_.fixed_frame, config_.target_frame);
|
||||
}
|
||||
|
||||
/** @brief Callback for raw scan messages.
|
||||
*
|
||||
* @pre TF message filter has already waited until the transform to
|
||||
* the configured @c frame_id can succeed.
|
||||
*/
|
||||
void
|
||||
Transform::processScan(const velodyne_msgs::VelodyneScan::ConstPtr &scanMsg)
|
||||
{
|
||||
if (output_.getNumSubscribers() == 0) // no one listening?
|
||||
return; // avoid much work
|
||||
|
||||
boost::lock_guard<boost::mutex> guard(reconfigure_mtx_);
|
||||
|
||||
// allocate a point cloud with same time and frame ID as raw data
|
||||
container_ptr->setup(scanMsg);
|
||||
|
||||
// process each packet provided by the driver
|
||||
for (size_t i = 0; i < scanMsg->packets.size(); ++i)
|
||||
{
|
||||
container_ptr->computeTransformation(scanMsg->packets[i].stamp);
|
||||
data_->unpack(scanMsg->packets[i], *container_ptr, scanMsg->header.stamp);
|
||||
}
|
||||
// publish the accumulated cloud message
|
||||
output_.publish(container_ptr->finishCloud());
|
||||
|
||||
diag_topic_->tick(scanMsg->header.stamp);
|
||||
diagnostics_.update();
|
||||
}
|
||||
|
||||
} // namespace velodyne_pointcloud
|
||||
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Copyright (C) 2012 Austin Robot Technology, Jack O'Quin
|
||||
* License: Modified BSD Software License Agreement
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/** \file
|
||||
|
||||
This ROS node transforms raw Velodyne LIDAR packets to PointCloud2
|
||||
in the /map frame of reference.
|
||||
|
||||
*/
|
||||
|
||||
#include <ros/ros.h>
|
||||
#include "velodyne_pointcloud/transform.h"
|
||||
|
||||
/** Main node entry point. */
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
ros::init(argc, argv, "transform_node");
|
||||
|
||||
// create conversion class, which subscribes to raw data
|
||||
velodyne_pointcloud::Transform transform(ros::NodeHandle(),
|
||||
ros::NodeHandle("~"));
|
||||
|
||||
// handle callbacks until shut down
|
||||
ros::spin();
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* Copyright (C) 2012 Austin Robot Technology, Jack O'Quin
|
||||
* License: Modified BSD Software License Agreement
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/** @file
|
||||
|
||||
This ROS nodelet transforms raw Velodyne 3D LIDAR packets to a
|
||||
PointCloud2 in the /map frame.
|
||||
|
||||
*/
|
||||
|
||||
#include <ros/ros.h>
|
||||
#include <pluginlib/class_list_macros.h>
|
||||
#include <nodelet/nodelet.h>
|
||||
|
||||
#include "velodyne_pointcloud/transform.h"
|
||||
|
||||
namespace velodyne_pointcloud
|
||||
{
|
||||
class TransformNodelet: public nodelet::Nodelet
|
||||
{
|
||||
public:
|
||||
|
||||
TransformNodelet() {}
|
||||
~TransformNodelet() {}
|
||||
|
||||
private:
|
||||
|
||||
virtual void onInit();
|
||||
boost::shared_ptr<Transform> tf_;
|
||||
};
|
||||
|
||||
/** @brief Nodelet initialization. */
|
||||
void TransformNodelet::onInit()
|
||||
{
|
||||
tf_.reset(new Transform(getNodeHandle(), getPrivateNodeHandle(), getName()));
|
||||
}
|
||||
|
||||
} // namespace velodyne_pointcloud
|
||||
|
||||
|
||||
// Register this plugin with pluginlib. Names must match nodelets.xml.
|
||||
//
|
||||
// parameters: class type, base class type
|
||||
PLUGINLIB_EXPORT_CLASS(velodyne_pointcloud::TransformNodelet, nodelet::Nodelet)
|
||||
@@ -0,0 +1,8 @@
|
||||
add_library(velodyne_rawdata rawdata.cc calibration.cc)
|
||||
target_link_libraries(velodyne_rawdata
|
||||
${catkin_LIBRARIES}
|
||||
${YAML_CPP_LIBRARIES})
|
||||
install(TARGETS velodyne_rawdata
|
||||
RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
|
||||
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
|
||||
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION})
|
||||
@@ -0,0 +1,283 @@
|
||||
/**
|
||||
* \file calibration.cc
|
||||
* \brief
|
||||
*
|
||||
* \author Piyush Khandelwal (piyushk@cs.utexas.edu)
|
||||
* Copyright (C) 2012, Austin Robot Technology,
|
||||
* The University of Texas at Austin
|
||||
*
|
||||
* License: Modified BSD License
|
||||
*
|
||||
* $ Id: 02/14/2012 11:36:36 AM piyushk $
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
#include <cmath>
|
||||
#include <limits>
|
||||
#include <yaml-cpp/yaml.h>
|
||||
|
||||
#ifdef HAVE_NEW_YAMLCPP
|
||||
namespace YAML {
|
||||
|
||||
// The >> operator disappeared in yaml-cpp 0.5, so this function is
|
||||
// added to provide support for code written under the yaml-cpp 0.3 API.
|
||||
template<typename T>
|
||||
void operator >> (const YAML::Node& node, T& i) {
|
||||
i = node.as<T>();
|
||||
}
|
||||
} /* YAML */
|
||||
#endif // HAVE_NEW_YAMLCPP
|
||||
|
||||
#include <ros/ros.h>
|
||||
#include <velodyne_pointcloud/calibration.h>
|
||||
|
||||
namespace velodyne_pointcloud
|
||||
{
|
||||
|
||||
const std::string NUM_LASERS = "num_lasers";
|
||||
const std::string DISTANCE_RESOLUTION = "distance_resolution";
|
||||
const std::string LASERS = "lasers";
|
||||
const std::string LASER_ID = "laser_id";
|
||||
const std::string ROT_CORRECTION = "rot_correction";
|
||||
const std::string VERT_CORRECTION = "vert_correction";
|
||||
const std::string DIST_CORRECTION = "dist_correction";
|
||||
const std::string TWO_PT_CORRECTION_AVAILABLE =
|
||||
"two_pt_correction_available";
|
||||
const std::string DIST_CORRECTION_X = "dist_correction_x";
|
||||
const std::string DIST_CORRECTION_Y = "dist_correction_y";
|
||||
const std::string VERT_OFFSET_CORRECTION = "vert_offset_correction";
|
||||
const std::string HORIZ_OFFSET_CORRECTION = "horiz_offset_correction";
|
||||
const std::string MAX_INTENSITY = "max_intensity";
|
||||
const std::string MIN_INTENSITY = "min_intensity";
|
||||
const std::string FOCAL_DISTANCE = "focal_distance";
|
||||
const std::string FOCAL_SLOPE = "focal_slope";
|
||||
|
||||
/** Read calibration for a single laser. */
|
||||
void operator >> (const YAML::Node& node,
|
||||
std::pair<int, LaserCorrection>& correction)
|
||||
{
|
||||
node[LASER_ID] >> correction.first;
|
||||
node[ROT_CORRECTION] >> correction.second.rot_correction;
|
||||
node[VERT_CORRECTION] >> correction.second.vert_correction;
|
||||
node[DIST_CORRECTION] >> correction.second.dist_correction;
|
||||
#ifdef HAVE_NEW_YAMLCPP
|
||||
if (node[TWO_PT_CORRECTION_AVAILABLE])
|
||||
node[TWO_PT_CORRECTION_AVAILABLE] >>
|
||||
correction.second.two_pt_correction_available;
|
||||
#else
|
||||
if (const YAML::Node *pName = node.FindValue(TWO_PT_CORRECTION_AVAILABLE))
|
||||
*pName >> correction.second.two_pt_correction_available;
|
||||
#endif
|
||||
else
|
||||
correction.second.two_pt_correction_available = false;
|
||||
node[DIST_CORRECTION_X] >> correction.second.dist_correction_x;
|
||||
node[DIST_CORRECTION_Y] >> correction.second.dist_correction_y;
|
||||
node[VERT_OFFSET_CORRECTION] >> correction.second.vert_offset_correction;
|
||||
#ifdef HAVE_NEW_YAMLCPP
|
||||
if (node[HORIZ_OFFSET_CORRECTION])
|
||||
node[HORIZ_OFFSET_CORRECTION] >>
|
||||
correction.second.horiz_offset_correction;
|
||||
#else
|
||||
if (const YAML::Node *pName = node.FindValue(HORIZ_OFFSET_CORRECTION))
|
||||
*pName >> correction.second.horiz_offset_correction;
|
||||
#endif
|
||||
else
|
||||
correction.second.horiz_offset_correction = 0;
|
||||
|
||||
const YAML::Node * max_intensity_node = NULL;
|
||||
#ifdef HAVE_NEW_YAMLCPP
|
||||
if (node[MAX_INTENSITY]) {
|
||||
const YAML::Node max_intensity_node_ref = node[MAX_INTENSITY];
|
||||
max_intensity_node = &max_intensity_node_ref;
|
||||
}
|
||||
#else
|
||||
if (const YAML::Node *pName = node.FindValue(MAX_INTENSITY))
|
||||
max_intensity_node = pName;
|
||||
#endif
|
||||
if (max_intensity_node) {
|
||||
float max_intensity_float;
|
||||
*max_intensity_node >> max_intensity_float;
|
||||
correction.second.max_intensity = floor(max_intensity_float);
|
||||
}
|
||||
else {
|
||||
correction.second.max_intensity = 255;
|
||||
}
|
||||
|
||||
const YAML::Node * min_intensity_node = NULL;
|
||||
#ifdef HAVE_NEW_YAMLCPP
|
||||
if (node[MIN_INTENSITY]) {
|
||||
const YAML::Node min_intensity_node_ref = node[MIN_INTENSITY];
|
||||
min_intensity_node = &min_intensity_node_ref;
|
||||
}
|
||||
#else
|
||||
if (const YAML::Node *pName = node.FindValue(MIN_INTENSITY))
|
||||
min_intensity_node = pName;
|
||||
#endif
|
||||
if (min_intensity_node) {
|
||||
float min_intensity_float;
|
||||
*min_intensity_node >> min_intensity_float;
|
||||
correction.second.min_intensity = floor(min_intensity_float);
|
||||
}
|
||||
else {
|
||||
correction.second.min_intensity = 0;
|
||||
}
|
||||
node[FOCAL_DISTANCE] >> correction.second.focal_distance;
|
||||
node[FOCAL_SLOPE] >> correction.second.focal_slope;
|
||||
|
||||
// Calculate cached values
|
||||
correction.second.cos_rot_correction =
|
||||
cosf(correction.second.rot_correction);
|
||||
correction.second.sin_rot_correction =
|
||||
sinf(correction.second.rot_correction);
|
||||
correction.second.cos_vert_correction =
|
||||
cosf(correction.second.vert_correction);
|
||||
correction.second.sin_vert_correction =
|
||||
sinf(correction.second.vert_correction);
|
||||
|
||||
correction.second.laser_ring = 0; // clear initially (set later)
|
||||
}
|
||||
|
||||
/** Read entire calibration file. */
|
||||
void operator >> (const YAML::Node& node, Calibration& calibration)
|
||||
{
|
||||
int num_lasers;
|
||||
node[NUM_LASERS] >> num_lasers;
|
||||
float distance_resolution_m;
|
||||
node[DISTANCE_RESOLUTION] >> distance_resolution_m;
|
||||
const YAML::Node& lasers = node[LASERS];
|
||||
calibration.laser_corrections.clear();
|
||||
calibration.num_lasers = num_lasers;
|
||||
calibration.distance_resolution_m = distance_resolution_m;
|
||||
calibration.laser_corrections.resize(num_lasers);
|
||||
for (int i = 0; i < num_lasers; i++) {
|
||||
std::pair<int, LaserCorrection> correction;
|
||||
lasers[i] >> correction;
|
||||
const int index = correction.first;
|
||||
if( index >= calibration.laser_corrections.size() )
|
||||
{
|
||||
calibration.laser_corrections.resize( index+1 );
|
||||
}
|
||||
calibration.laser_corrections[index] = (correction.second);
|
||||
calibration.laser_corrections_map.insert(correction);
|
||||
}
|
||||
|
||||
// For each laser ring, find the next-smallest vertical angle.
|
||||
//
|
||||
// This implementation is simple, but not efficient. That is OK,
|
||||
// since it only runs while starting up.
|
||||
double next_angle = -std::numeric_limits<double>::infinity();
|
||||
for (int ring = 0; ring < num_lasers; ++ring) {
|
||||
|
||||
// find minimum remaining vertical offset correction
|
||||
double min_seen = std::numeric_limits<double>::infinity();
|
||||
int next_index = num_lasers;
|
||||
for (int j = 0; j < num_lasers; ++j) {
|
||||
|
||||
double angle = calibration.laser_corrections[j].vert_correction;
|
||||
if (next_angle < angle && angle < min_seen) {
|
||||
min_seen = angle;
|
||||
next_index = j;
|
||||
}
|
||||
}
|
||||
|
||||
if (next_index < num_lasers) { // anything found in this ring?
|
||||
|
||||
// store this ring number with its corresponding laser number
|
||||
calibration.laser_corrections[next_index].laser_ring = ring;
|
||||
next_angle = min_seen;
|
||||
if (calibration.ros_info) {
|
||||
ROS_INFO("laser_ring[%2u] = %2u, angle = %+.6f",
|
||||
next_index, ring, next_angle);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
YAML::Emitter& operator << (YAML::Emitter& out,
|
||||
const std::pair<int, LaserCorrection> correction)
|
||||
{
|
||||
out << YAML::BeginMap;
|
||||
out << YAML::Key << LASER_ID << YAML::Value << correction.first;
|
||||
out << YAML::Key << ROT_CORRECTION <<
|
||||
YAML::Value << correction.second.rot_correction;
|
||||
out << YAML::Key << VERT_CORRECTION <<
|
||||
YAML::Value << correction.second.vert_correction;
|
||||
out << YAML::Key << DIST_CORRECTION <<
|
||||
YAML::Value << correction.second.dist_correction;
|
||||
out << YAML::Key << TWO_PT_CORRECTION_AVAILABLE <<
|
||||
YAML::Value << correction.second.two_pt_correction_available;
|
||||
out << YAML::Key << DIST_CORRECTION_X <<
|
||||
YAML::Value << correction.second.dist_correction_x;
|
||||
out << YAML::Key << DIST_CORRECTION_Y <<
|
||||
YAML::Value << correction.second.dist_correction_y;
|
||||
out << YAML::Key << VERT_OFFSET_CORRECTION <<
|
||||
YAML::Value << correction.second.vert_offset_correction;
|
||||
out << YAML::Key << HORIZ_OFFSET_CORRECTION <<
|
||||
YAML::Value << correction.second.horiz_offset_correction;
|
||||
out << YAML::Key << MAX_INTENSITY <<
|
||||
YAML::Value << correction.second.max_intensity;
|
||||
out << YAML::Key << MIN_INTENSITY <<
|
||||
YAML::Value << correction.second.min_intensity;
|
||||
out << YAML::Key << FOCAL_DISTANCE <<
|
||||
YAML::Value << correction.second.focal_distance;
|
||||
out << YAML::Key << FOCAL_SLOPE <<
|
||||
YAML::Value << correction.second.focal_slope;
|
||||
out << YAML::EndMap;
|
||||
return out;
|
||||
}
|
||||
|
||||
YAML::Emitter& operator <<
|
||||
(YAML::Emitter& out, const Calibration& calibration)
|
||||
{
|
||||
out << YAML::BeginMap;
|
||||
out << YAML::Key << NUM_LASERS <<
|
||||
YAML::Value << calibration.laser_corrections.size();
|
||||
out << YAML::Key << DISTANCE_RESOLUTION <<
|
||||
YAML::Value << calibration.distance_resolution_m;
|
||||
out << YAML::Key << LASERS << YAML::Value << YAML::BeginSeq;
|
||||
for (std::map<int, LaserCorrection>::const_iterator
|
||||
it = calibration.laser_corrections_map.begin();
|
||||
it != calibration.laser_corrections_map.end(); it++)
|
||||
{
|
||||
out << *it;
|
||||
}
|
||||
out << YAML::EndSeq;
|
||||
out << YAML::EndMap;
|
||||
return out;
|
||||
}
|
||||
|
||||
void Calibration::read(const std::string& calibration_file) {
|
||||
std::ifstream fin(calibration_file.c_str());
|
||||
if (!fin.is_open()) {
|
||||
initialized = false;
|
||||
return;
|
||||
}
|
||||
initialized = true;
|
||||
try {
|
||||
YAML::Node doc;
|
||||
#ifdef HAVE_NEW_YAMLCPP
|
||||
fin.close();
|
||||
doc = YAML::LoadFile(calibration_file);
|
||||
#else
|
||||
YAML::Parser parser(fin);
|
||||
parser.GetNextDocument(doc);
|
||||
#endif
|
||||
doc >> *this;
|
||||
} catch (YAML::Exception &e) {
|
||||
std::cerr << "YAML Exception: " << e.what() << std::endl;
|
||||
initialized = false;
|
||||
}
|
||||
fin.close();
|
||||
}
|
||||
|
||||
void Calibration::write(const std::string& calibration_file) {
|
||||
std::ofstream fout(calibration_file.c_str());
|
||||
YAML::Emitter out;
|
||||
out << *this;
|
||||
fout << out.c_str();
|
||||
fout.close();
|
||||
}
|
||||
|
||||
} /* velodyne_pointcloud */
|
||||
@@ -0,0 +1,620 @@
|
||||
/*
|
||||
* Copyright (C) 2007 Austin Robot Technology, Patrick Beeson
|
||||
* Copyright (C) 2009, 2010, 2012 Austin Robot Technology, Jack O'Quin
|
||||
* Copyright (C) 2019, Kaarta Inc, Shawn Hanna
|
||||
*
|
||||
* License: Modified BSD Software License Agreement
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file
|
||||
*
|
||||
* Velodyne 3D LIDAR data accessor class implementation.
|
||||
*
|
||||
* Class for unpacking raw Velodyne LIDAR packets into useful
|
||||
* formats.
|
||||
*
|
||||
* Derived classes accept raw Velodyne data for either single packets
|
||||
* or entire rotations, and provide it in various formats for either
|
||||
* on-line or off-line processing.
|
||||
*
|
||||
* @author Patrick Beeson
|
||||
* @author Jack O'Quin
|
||||
* @author Shawn Hanna
|
||||
*
|
||||
* HDL-64E S2 calibration support provided by Nick Hillier
|
||||
*/
|
||||
|
||||
#include <fstream>
|
||||
#include <math.h>
|
||||
|
||||
#include <ros/ros.h>
|
||||
#include <ros/package.h>
|
||||
#include <angles/angles.h>
|
||||
|
||||
#include <velodyne_pointcloud/rawdata.h>
|
||||
|
||||
namespace velodyne_rawdata
|
||||
{
|
||||
inline float SQR(float val) { return val*val; }
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// RawData base class implementation
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
RawData::RawData() {}
|
||||
|
||||
/** Update parameters: conversions and update */
|
||||
void RawData::setParameters(double min_range,
|
||||
double max_range,
|
||||
double view_direction,
|
||||
double view_width)
|
||||
{
|
||||
config_.min_range = min_range;
|
||||
config_.max_range = max_range;
|
||||
|
||||
//converting angle parameters into the velodyne reference (rad)
|
||||
config_.tmp_min_angle = view_direction + view_width/2;
|
||||
config_.tmp_max_angle = view_direction - view_width/2;
|
||||
|
||||
//computing positive modulo to keep theses angles into [0;2*M_PI]
|
||||
config_.tmp_min_angle = fmod(fmod(config_.tmp_min_angle,2*M_PI) + 2*M_PI,2*M_PI);
|
||||
config_.tmp_max_angle = fmod(fmod(config_.tmp_max_angle,2*M_PI) + 2*M_PI,2*M_PI);
|
||||
|
||||
//converting into the hardware velodyne ref (negative yaml and degrees)
|
||||
//adding 0.5 perfomrs a centered double to int conversion
|
||||
config_.min_angle = 100 * (2*M_PI - config_.tmp_min_angle) * 180 / M_PI + 0.5;
|
||||
config_.max_angle = 100 * (2*M_PI - config_.tmp_max_angle) * 180 / M_PI + 0.5;
|
||||
if (config_.min_angle == config_.max_angle)
|
||||
{
|
||||
//avoid returning empty cloud if min_angle = max_angle
|
||||
config_.min_angle = 0;
|
||||
config_.max_angle = 36000;
|
||||
}
|
||||
}
|
||||
|
||||
int RawData::scansPerPacket() const
|
||||
{
|
||||
if( calibration_.num_lasers == 16)
|
||||
{
|
||||
return BLOCKS_PER_PACKET * VLP16_FIRINGS_PER_BLOCK *
|
||||
VLP16_SCANS_PER_FIRING;
|
||||
}
|
||||
else{
|
||||
return BLOCKS_PER_PACKET * SCANS_PER_BLOCK;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Build a timing table for each block/firing. Stores in timing_offsets vector
|
||||
*/
|
||||
bool RawData::buildTimings(){
|
||||
// vlp16
|
||||
if (config_.model == "VLP16"){
|
||||
// timing table calculation, from velodyne user manual
|
||||
timing_offsets.resize(12);
|
||||
for (size_t i=0; i < timing_offsets.size(); ++i){
|
||||
timing_offsets[i].resize(32);
|
||||
}
|
||||
// constants
|
||||
double full_firing_cycle = 55.296 * 1e-6; // seconds
|
||||
double single_firing = 2.304 * 1e-6; // seconds
|
||||
double dataBlockIndex, dataPointIndex;
|
||||
bool dual_mode = false;
|
||||
// compute timing offsets
|
||||
for (size_t x = 0; x < timing_offsets.size(); ++x){
|
||||
for (size_t y = 0; y < timing_offsets[x].size(); ++y){
|
||||
if (dual_mode){
|
||||
dataBlockIndex = (x - (x % 2)) + (y / 16);
|
||||
}
|
||||
else{
|
||||
dataBlockIndex = (x * 2) + (y / 16);
|
||||
}
|
||||
dataPointIndex = y % 16;
|
||||
//timing_offsets[block][firing]
|
||||
timing_offsets[x][y] = (full_firing_cycle * dataBlockIndex) + (single_firing * dataPointIndex);
|
||||
}
|
||||
}
|
||||
}
|
||||
// vlp32
|
||||
else if (config_.model == "32C"){
|
||||
// timing table calculation, from velodyne user manual
|
||||
timing_offsets.resize(12);
|
||||
for (size_t i=0; i < timing_offsets.size(); ++i){
|
||||
timing_offsets[i].resize(32);
|
||||
}
|
||||
// constants
|
||||
double full_firing_cycle = 55.296 * 1e-6; // seconds
|
||||
double single_firing = 2.304 * 1e-6; // seconds
|
||||
double dataBlockIndex, dataPointIndex;
|
||||
bool dual_mode = false;
|
||||
// compute timing offsets
|
||||
for (size_t x = 0; x < timing_offsets.size(); ++x){
|
||||
for (size_t y = 0; y < timing_offsets[x].size(); ++y){
|
||||
if (dual_mode){
|
||||
dataBlockIndex = x / 2;
|
||||
}
|
||||
else{
|
||||
dataBlockIndex = x;
|
||||
}
|
||||
dataPointIndex = y / 2;
|
||||
timing_offsets[x][y] = (full_firing_cycle * dataBlockIndex) + (single_firing * dataPointIndex);
|
||||
}
|
||||
}
|
||||
}
|
||||
// hdl32
|
||||
else if (config_.model == "32E"){
|
||||
// timing table calculation, from velodyne user manual
|
||||
timing_offsets.resize(12);
|
||||
for (size_t i=0; i < timing_offsets.size(); ++i){
|
||||
timing_offsets[i].resize(32);
|
||||
}
|
||||
// constants
|
||||
double full_firing_cycle = 46.080 * 1e-6; // seconds
|
||||
double single_firing = 1.152 * 1e-6; // seconds
|
||||
double dataBlockIndex, dataPointIndex;
|
||||
bool dual_mode = false;
|
||||
// compute timing offsets
|
||||
for (size_t x = 0; x < timing_offsets.size(); ++x){
|
||||
for (size_t y = 0; y < timing_offsets[x].size(); ++y){
|
||||
if (dual_mode){
|
||||
dataBlockIndex = x / 2;
|
||||
}
|
||||
else{
|
||||
dataBlockIndex = x;
|
||||
}
|
||||
dataPointIndex = y / 2;
|
||||
timing_offsets[x][y] = (full_firing_cycle * dataBlockIndex) + (single_firing * dataPointIndex);
|
||||
}
|
||||
}
|
||||
}
|
||||
else{
|
||||
timing_offsets.clear();
|
||||
ROS_WARN("Timings not supported for model %s", config_.model.c_str());
|
||||
}
|
||||
|
||||
if (timing_offsets.size()){
|
||||
// ROS_INFO("VELODYNE TIMING TABLE:");
|
||||
for (size_t x = 0; x < timing_offsets.size(); ++x){
|
||||
for (size_t y = 0; y < timing_offsets[x].size(); ++y){
|
||||
printf("%04.3f ", timing_offsets[x][y] * 1e6);
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else{
|
||||
ROS_WARN("NO TIMING OFFSETS CALCULATED. ARE YOU USING A SUPPORTED VELODYNE SENSOR?");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/** Set up for on-line operation. */
|
||||
boost::optional<velodyne_pointcloud::Calibration> RawData::setup(ros::NodeHandle private_nh)
|
||||
{
|
||||
private_nh.param("model", config_.model, std::string("64E"));
|
||||
buildTimings();
|
||||
|
||||
// get path to angles.config file for this device
|
||||
if (!private_nh.getParam("calibration", config_.calibrationFile))
|
||||
{
|
||||
ROS_ERROR_STREAM("No calibration angles specified! Using test values!");
|
||||
|
||||
// have to use something: grab unit test version as a default
|
||||
std::string pkgPath = ros::package::getPath("velodyne_pointcloud");
|
||||
config_.calibrationFile = pkgPath + "/params/64e_utexas.yaml";
|
||||
}
|
||||
|
||||
ROS_INFO_STREAM("correction angles: " << config_.calibrationFile);
|
||||
|
||||
calibration_.read(config_.calibrationFile);
|
||||
if (!calibration_.initialized) {
|
||||
ROS_ERROR_STREAM("Unable to open calibration file: " <<
|
||||
config_.calibrationFile);
|
||||
return boost::none;
|
||||
}
|
||||
|
||||
ROS_INFO_STREAM("Number of lasers: " << calibration_.num_lasers << ".");
|
||||
|
||||
// Set up cached values for sin and cos of all the possible headings
|
||||
for (uint16_t rot_index = 0; rot_index < ROTATION_MAX_UNITS; ++rot_index) {
|
||||
float rotation = angles::from_degrees(ROTATION_RESOLUTION * rot_index);
|
||||
cos_rot_table_[rot_index] = cosf(rotation);
|
||||
sin_rot_table_[rot_index] = sinf(rotation);
|
||||
}
|
||||
return calibration_;
|
||||
}
|
||||
|
||||
/** Set up for offline operation */
|
||||
int RawData::setupOffline(std::string calibration_file, double max_range_, double min_range_)
|
||||
{
|
||||
|
||||
config_.max_range = max_range_;
|
||||
config_.min_range = min_range_;
|
||||
ROS_INFO_STREAM("data ranges to publish: ["
|
||||
<< config_.min_range << ", "
|
||||
<< config_.max_range << "]");
|
||||
|
||||
config_.calibrationFile = calibration_file;
|
||||
|
||||
ROS_INFO_STREAM("correction angles: " << config_.calibrationFile);
|
||||
|
||||
calibration_.read(config_.calibrationFile);
|
||||
if (!calibration_.initialized) {
|
||||
ROS_ERROR_STREAM("Unable to open calibration file: " << config_.calibrationFile);
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Set up cached values for sin and cos of all the possible headings
|
||||
for (uint16_t rot_index = 0; rot_index < ROTATION_MAX_UNITS; ++rot_index) {
|
||||
float rotation = angles::from_degrees(ROTATION_RESOLUTION * rot_index);
|
||||
cos_rot_table_[rot_index] = cosf(rotation);
|
||||
sin_rot_table_[rot_index] = sinf(rotation);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/** @brief convert raw packet to point cloud
|
||||
*
|
||||
* @param pkt raw packet to unpack
|
||||
* @param pc shared pointer to point cloud (points are appended)
|
||||
*/
|
||||
void RawData::unpack(const velodyne_msgs::VelodynePacket &pkt, DataContainerBase& data, const ros::Time& scan_start_time)
|
||||
{
|
||||
using velodyne_pointcloud::LaserCorrection;
|
||||
ROS_DEBUG_STREAM("Received packet, time: " << pkt.stamp);
|
||||
|
||||
/** special parsing for the VLP16 **/
|
||||
if (calibration_.num_lasers == 16)
|
||||
{
|
||||
unpack_vlp16(pkt, data, scan_start_time);
|
||||
return;
|
||||
}
|
||||
|
||||
float time_diff_start_to_this_packet = (pkt.stamp - scan_start_time).toSec();
|
||||
|
||||
const raw_packet_t *raw = (const raw_packet_t *) &pkt.data[0];
|
||||
|
||||
for (int i = 0; i < BLOCKS_PER_PACKET; i++) {
|
||||
|
||||
// upper bank lasers are numbered [0..31]
|
||||
// NOTE: this is a change from the old velodyne_common implementation
|
||||
|
||||
int bank_origin = 0;
|
||||
if (raw->blocks[i].header == LOWER_BANK) {
|
||||
// lower bank lasers are [32..63]
|
||||
bank_origin = 32;
|
||||
}
|
||||
|
||||
for (int j = 0, k = 0; j < SCANS_PER_BLOCK; j++, k += RAW_SCAN_SIZE) {
|
||||
|
||||
float x, y, z;
|
||||
float intensity;
|
||||
const uint8_t laser_number = j + bank_origin;
|
||||
float time = 0;
|
||||
|
||||
const LaserCorrection &corrections = calibration_.laser_corrections[laser_number];
|
||||
|
||||
/** Position Calculation */
|
||||
const raw_block_t &block = raw->blocks[i];
|
||||
union two_bytes tmp;
|
||||
tmp.bytes[0] = block.data[k];
|
||||
tmp.bytes[1] = block.data[k+1];
|
||||
|
||||
/*condition added to avoid calculating points which are not
|
||||
in the interesting defined area (min_angle < area < max_angle)*/
|
||||
if ((block.rotation >= config_.min_angle
|
||||
&& block.rotation <= config_.max_angle
|
||||
&& config_.min_angle < config_.max_angle)
|
||||
||(config_.min_angle > config_.max_angle
|
||||
&& (raw->blocks[i].rotation <= config_.max_angle
|
||||
|| raw->blocks[i].rotation >= config_.min_angle))){
|
||||
|
||||
if (timing_offsets.size())
|
||||
{
|
||||
time = timing_offsets[i][j] + time_diff_start_to_this_packet;
|
||||
}
|
||||
|
||||
if (tmp.uint == 0) // no valid laser beam return
|
||||
{
|
||||
// call to addPoint is still required since output could be organized
|
||||
data.addPoint(nanf(""), nanf(""), nanf(""), corrections.laser_ring, raw->blocks[i].rotation, nanf(""), nanf(""), time);
|
||||
continue;
|
||||
}
|
||||
|
||||
float distance = tmp.uint * calibration_.distance_resolution_m;
|
||||
distance += corrections.dist_correction;
|
||||
|
||||
float cos_vert_angle = corrections.cos_vert_correction;
|
||||
float sin_vert_angle = corrections.sin_vert_correction;
|
||||
float cos_rot_correction = corrections.cos_rot_correction;
|
||||
float sin_rot_correction = corrections.sin_rot_correction;
|
||||
|
||||
// cos(a-b) = cos(a)*cos(b) + sin(a)*sin(b)
|
||||
// sin(a-b) = sin(a)*cos(b) - cos(a)*sin(b)
|
||||
float cos_rot_angle =
|
||||
cos_rot_table_[block.rotation] * cos_rot_correction +
|
||||
sin_rot_table_[block.rotation] * sin_rot_correction;
|
||||
float sin_rot_angle =
|
||||
sin_rot_table_[block.rotation] * cos_rot_correction -
|
||||
cos_rot_table_[block.rotation] * sin_rot_correction;
|
||||
|
||||
float horiz_offset = corrections.horiz_offset_correction;
|
||||
float vert_offset = corrections.vert_offset_correction;
|
||||
|
||||
// Compute the distance in the xy plane (w/o accounting for rotation)
|
||||
/**the new term of 'vert_offset * sin_vert_angle'
|
||||
* was added to the expression due to the mathemathical
|
||||
* model we used.
|
||||
*/
|
||||
float xy_distance = distance * cos_vert_angle - vert_offset * sin_vert_angle;
|
||||
|
||||
// Calculate temporal X, use absolute value.
|
||||
float xx = xy_distance * sin_rot_angle - horiz_offset * cos_rot_angle;
|
||||
// Calculate temporal Y, use absolute value
|
||||
float yy = xy_distance * cos_rot_angle + horiz_offset * sin_rot_angle;
|
||||
if (xx < 0) xx=-xx;
|
||||
if (yy < 0) yy=-yy;
|
||||
|
||||
// Get 2points calibration values,Linear interpolation to get distance
|
||||
// correction for X and Y, that means distance correction use
|
||||
// different value at different distance
|
||||
float distance_corr_x = 0;
|
||||
float distance_corr_y = 0;
|
||||
if (corrections.two_pt_correction_available) {
|
||||
distance_corr_x =
|
||||
(corrections.dist_correction - corrections.dist_correction_x)
|
||||
* (xx - 2.4) / (25.04 - 2.4)
|
||||
+ corrections.dist_correction_x;
|
||||
distance_corr_x -= corrections.dist_correction;
|
||||
distance_corr_y =
|
||||
(corrections.dist_correction - corrections.dist_correction_y)
|
||||
* (yy - 1.93) / (25.04 - 1.93)
|
||||
+ corrections.dist_correction_y;
|
||||
distance_corr_y -= corrections.dist_correction;
|
||||
}
|
||||
|
||||
float distance_x = distance + distance_corr_x;
|
||||
/**the new term of 'vert_offset * sin_vert_angle'
|
||||
* was added to the expression due to the mathemathical
|
||||
* model we used.
|
||||
*/
|
||||
xy_distance = distance_x * cos_vert_angle - vert_offset * sin_vert_angle ;
|
||||
///the expression wiht '-' is proved to be better than the one with '+'
|
||||
x = xy_distance * sin_rot_angle - horiz_offset * cos_rot_angle;
|
||||
|
||||
float distance_y = distance + distance_corr_y;
|
||||
xy_distance = distance_y * cos_vert_angle - vert_offset * sin_vert_angle ;
|
||||
/**the new term of 'vert_offset * sin_vert_angle'
|
||||
* was added to the expression due to the mathemathical
|
||||
* model we used.
|
||||
*/
|
||||
y = xy_distance * cos_rot_angle + horiz_offset * sin_rot_angle;
|
||||
|
||||
// Using distance_y is not symmetric, but the velodyne manual
|
||||
// does this.
|
||||
/**the new term of 'vert_offset * cos_vert_angle'
|
||||
* was added to the expression due to the mathemathical
|
||||
* model we used.
|
||||
*/
|
||||
z = distance_y * sin_vert_angle + vert_offset*cos_vert_angle;
|
||||
|
||||
/** Use standard ROS coordinate system (right-hand rule) */
|
||||
float x_coord = y;
|
||||
float y_coord = -x;
|
||||
float z_coord = z;
|
||||
|
||||
/** Intensity Calculation */
|
||||
|
||||
float min_intensity = corrections.min_intensity;
|
||||
float max_intensity = corrections.max_intensity;
|
||||
|
||||
intensity = raw->blocks[i].data[k+2];
|
||||
|
||||
float focal_offset = 256
|
||||
* (1 - corrections.focal_distance / 13100)
|
||||
* (1 - corrections.focal_distance / 13100);
|
||||
float focal_slope = corrections.focal_slope;
|
||||
intensity += focal_slope * (std::abs(focal_offset - 256 *
|
||||
SQR(1 - static_cast<float>(tmp.uint)/65535)));
|
||||
intensity = (intensity < min_intensity) ? min_intensity : intensity;
|
||||
intensity = (intensity > max_intensity) ? max_intensity : intensity;
|
||||
|
||||
data.addPoint(x_coord, y_coord, z_coord, corrections.laser_ring, raw->blocks[i].rotation, distance, intensity, time);
|
||||
}
|
||||
}
|
||||
data.newLine();
|
||||
}
|
||||
}
|
||||
|
||||
/** @brief convert raw VLP16 packet to point cloud
|
||||
*
|
||||
* @param pkt raw packet to unpack
|
||||
* @param pc shared pointer to point cloud (points are appended)
|
||||
*/
|
||||
void RawData::unpack_vlp16(const velodyne_msgs::VelodynePacket &pkt, DataContainerBase& data, const ros::Time& scan_start_time)
|
||||
{
|
||||
float azimuth;
|
||||
float azimuth_diff;
|
||||
int raw_azimuth_diff;
|
||||
float last_azimuth_diff=0;
|
||||
float azimuth_corrected_f;
|
||||
int azimuth_corrected;
|
||||
float x, y, z;
|
||||
float intensity;
|
||||
|
||||
float time_diff_start_to_this_packet = (pkt.stamp - scan_start_time).toSec();
|
||||
|
||||
const raw_packet_t *raw = (const raw_packet_t *) &pkt.data[0];
|
||||
|
||||
for (int block = 0; block < BLOCKS_PER_PACKET; block++) {
|
||||
|
||||
// ignore packets with mangled or otherwise different contents
|
||||
if (UPPER_BANK != raw->blocks[block].header) {
|
||||
// Do not flood the log with messages, only issue at most one
|
||||
// of these warnings per minute.
|
||||
ROS_WARN_STREAM_THROTTLE(60, "skipping invalid VLP-16 packet: block "
|
||||
<< block << " header value is "
|
||||
<< raw->blocks[block].header);
|
||||
return; // bad packet: skip the rest
|
||||
}
|
||||
|
||||
// Calculate difference between current and next block's azimuth angle.
|
||||
azimuth = (float)(raw->blocks[block].rotation);
|
||||
if (block < (BLOCKS_PER_PACKET-1)){
|
||||
raw_azimuth_diff = raw->blocks[block+1].rotation - raw->blocks[block].rotation;
|
||||
azimuth_diff = (float)((36000 + raw_azimuth_diff)%36000);
|
||||
// some packets contain an angle overflow where azimuth_diff < 0
|
||||
if(raw_azimuth_diff < 0)//raw->blocks[block+1].rotation - raw->blocks[block].rotation < 0)
|
||||
{
|
||||
ROS_WARN_STREAM_THROTTLE(60, "Packet containing angle overflow, first angle: " << raw->blocks[block].rotation << " second angle: " << raw->blocks[block+1].rotation);
|
||||
// if last_azimuth_diff was not zero, we can assume that the velodyne's speed did not change very much and use the same difference
|
||||
if(last_azimuth_diff > 0){
|
||||
azimuth_diff = last_azimuth_diff;
|
||||
}
|
||||
// otherwise we are not able to use this data
|
||||
// TODO: we might just not use the second 16 firings
|
||||
else{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
last_azimuth_diff = azimuth_diff;
|
||||
}else{
|
||||
azimuth_diff = last_azimuth_diff;
|
||||
}
|
||||
|
||||
for (int firing=0, k=0; firing < VLP16_FIRINGS_PER_BLOCK; firing++){
|
||||
for (int dsr=0; dsr < VLP16_SCANS_PER_FIRING; dsr++, k+=RAW_SCAN_SIZE){
|
||||
velodyne_pointcloud::LaserCorrection &corrections = calibration_.laser_corrections[dsr];
|
||||
|
||||
/** Position Calculation */
|
||||
union two_bytes tmp;
|
||||
tmp.bytes[0] = raw->blocks[block].data[k];
|
||||
tmp.bytes[1] = raw->blocks[block].data[k+1];
|
||||
|
||||
/** correct for the laser rotation as a function of timing during the firings **/
|
||||
azimuth_corrected_f = azimuth + (azimuth_diff * ((dsr*VLP16_DSR_TOFFSET) + (firing*VLP16_FIRING_TOFFSET)) / VLP16_BLOCK_TDURATION);
|
||||
azimuth_corrected = ((int)round(azimuth_corrected_f)) % 36000;
|
||||
|
||||
/*condition added to avoid calculating points which are not
|
||||
in the interesting defined area (min_angle < area < max_angle)*/
|
||||
if ((azimuth_corrected >= config_.min_angle
|
||||
&& azimuth_corrected <= config_.max_angle
|
||||
&& config_.min_angle < config_.max_angle)
|
||||
||(config_.min_angle > config_.max_angle
|
||||
&& (azimuth_corrected <= config_.max_angle
|
||||
|| azimuth_corrected >= config_.min_angle))){
|
||||
|
||||
// convert polar coordinates to Euclidean XYZ
|
||||
float distance = tmp.uint * calibration_.distance_resolution_m;
|
||||
distance += corrections.dist_correction;
|
||||
|
||||
float cos_vert_angle = corrections.cos_vert_correction;
|
||||
float sin_vert_angle = corrections.sin_vert_correction;
|
||||
float cos_rot_correction = corrections.cos_rot_correction;
|
||||
float sin_rot_correction = corrections.sin_rot_correction;
|
||||
|
||||
// cos(a-b) = cos(a)*cos(b) + sin(a)*sin(b)
|
||||
// sin(a-b) = sin(a)*cos(b) - cos(a)*sin(b)
|
||||
float cos_rot_angle =
|
||||
cos_rot_table_[azimuth_corrected] * cos_rot_correction +
|
||||
sin_rot_table_[azimuth_corrected] * sin_rot_correction;
|
||||
float sin_rot_angle =
|
||||
sin_rot_table_[azimuth_corrected] * cos_rot_correction -
|
||||
cos_rot_table_[azimuth_corrected] * sin_rot_correction;
|
||||
|
||||
float horiz_offset = corrections.horiz_offset_correction;
|
||||
float vert_offset = corrections.vert_offset_correction;
|
||||
|
||||
// Compute the distance in the xy plane (w/o accounting for rotation)
|
||||
/**the new term of 'vert_offset * sin_vert_angle'
|
||||
* was added to the expression due to the mathemathical
|
||||
* model we used.
|
||||
*/
|
||||
float xy_distance = distance * cos_vert_angle - vert_offset * sin_vert_angle;
|
||||
|
||||
// Calculate temporal X, use absolute value.
|
||||
float xx = xy_distance * sin_rot_angle - horiz_offset * cos_rot_angle;
|
||||
// Calculate temporal Y, use absolute value
|
||||
float yy = xy_distance * cos_rot_angle + horiz_offset * sin_rot_angle;
|
||||
if (xx < 0) xx=-xx;
|
||||
if (yy < 0) yy=-yy;
|
||||
|
||||
// Get 2points calibration values,Linear interpolation to get distance
|
||||
// correction for X and Y, that means distance correction use
|
||||
// different value at different distance
|
||||
float distance_corr_x = 0;
|
||||
float distance_corr_y = 0;
|
||||
if (corrections.two_pt_correction_available) {
|
||||
distance_corr_x =
|
||||
(corrections.dist_correction - corrections.dist_correction_x)
|
||||
* (xx - 2.4) / (25.04 - 2.4)
|
||||
+ corrections.dist_correction_x;
|
||||
distance_corr_x -= corrections.dist_correction;
|
||||
distance_corr_y =
|
||||
(corrections.dist_correction - corrections.dist_correction_y)
|
||||
* (yy - 1.93) / (25.04 - 1.93)
|
||||
+ corrections.dist_correction_y;
|
||||
distance_corr_y -= corrections.dist_correction;
|
||||
}
|
||||
|
||||
float distance_x = distance + distance_corr_x;
|
||||
/**the new term of 'vert_offset * sin_vert_angle'
|
||||
* was added to the expression due to the mathemathical
|
||||
* model we used.
|
||||
*/
|
||||
xy_distance = distance_x * cos_vert_angle - vert_offset * sin_vert_angle ;
|
||||
x = xy_distance * sin_rot_angle - horiz_offset * cos_rot_angle;
|
||||
|
||||
float distance_y = distance + distance_corr_y;
|
||||
/**the new term of 'vert_offset * sin_vert_angle'
|
||||
* was added to the expression due to the mathemathical
|
||||
* model we used.
|
||||
*/
|
||||
xy_distance = distance_y * cos_vert_angle - vert_offset * sin_vert_angle ;
|
||||
y = xy_distance * cos_rot_angle + horiz_offset * sin_rot_angle;
|
||||
|
||||
// Using distance_y is not symmetric, but the velodyne manual
|
||||
// does this.
|
||||
/**the new term of 'vert_offset * cos_vert_angle'
|
||||
* was added to the expression due to the mathemathical
|
||||
* model we used.
|
||||
*/
|
||||
z = distance_y * sin_vert_angle + vert_offset*cos_vert_angle;
|
||||
|
||||
|
||||
/** Use standard ROS coordinate system (right-hand rule) */
|
||||
float x_coord = y;
|
||||
float y_coord = -x;
|
||||
float z_coord = z;
|
||||
|
||||
/** Intensity Calculation */
|
||||
float min_intensity = corrections.min_intensity;
|
||||
float max_intensity = corrections.max_intensity;
|
||||
|
||||
intensity = raw->blocks[block].data[k+2];
|
||||
|
||||
float focal_offset = 256 * SQR(1 - corrections.focal_distance / 13100);
|
||||
float focal_slope = corrections.focal_slope;
|
||||
intensity += focal_slope * (std::abs(focal_offset - 256 *
|
||||
SQR(1 - tmp.uint/65535)));
|
||||
intensity = (intensity < min_intensity) ? min_intensity : intensity;
|
||||
intensity = (intensity > max_intensity) ? max_intensity : intensity;
|
||||
|
||||
float time = 0;
|
||||
if (timing_offsets.size())
|
||||
time = timing_offsets[block][firing * 16 + dsr] + time_diff_start_to_this_packet;
|
||||
|
||||
data.addPoint(x_coord, y_coord, z_coord, corrections.laser_ring, azimuth_corrected, distance, intensity, time);
|
||||
}
|
||||
}
|
||||
data.newLine();
|
||||
}
|
||||
}
|
||||
}
|
||||
} // namespace velodyne_rawdata
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,52 @@
|
||||
### Unit tests
|
||||
#
|
||||
# Only configured when CATKIN_ENABLE_TESTING is true.
|
||||
|
||||
# these dependencies are only needed for unit testing
|
||||
find_package(roslaunch REQUIRED)
|
||||
find_package(rostest REQUIRED)
|
||||
find_package(tf2_ros REQUIRED)
|
||||
|
||||
# C++ gtests
|
||||
catkin_add_gtest(test_calibration test_calibration.cpp)
|
||||
add_dependencies(test_calibration ${catkin_EXPORTED_TARGETS})
|
||||
target_link_libraries(test_calibration velodyne_rawdata ${catkin_LIBRARIES})
|
||||
|
||||
# Download packet capture (PCAP) files containing test data.
|
||||
# Store them in devel-space, so rostest can easily find them.
|
||||
catkin_download_test_data(
|
||||
${PROJECT_NAME}_tests_class.pcap
|
||||
http://download.ros.org/data/velodyne/class.pcap
|
||||
DESTINATION ${CATKIN_DEVEL_PREFIX}/${CATKIN_PACKAGE_SHARE_DESTINATION}/tests
|
||||
MD5 65808d25772101358a3719b451b3d015)
|
||||
catkin_download_test_data(
|
||||
${PROJECT_NAME}_tests_32e.pcap
|
||||
http://download.ros.org/data/velodyne/32e.pcap
|
||||
DESTINATION ${CATKIN_DEVEL_PREFIX}/${CATKIN_PACKAGE_SHARE_DESTINATION}/tests
|
||||
MD5 e41d02aac34f0967c03a5597e1d554a9)
|
||||
catkin_download_test_data(
|
||||
${PROJECT_NAME}_tests_64e_s2.1-300-sztaki.pcap
|
||||
http://download.ros.org/data/velodyne/64e_s2.1-300-sztaki.pcap
|
||||
DESTINATION ${CATKIN_DEVEL_PREFIX}/${CATKIN_PACKAGE_SHARE_DESTINATION}/tests
|
||||
MD5 176c900ffb698f9b948a13e281ffc1a2)
|
||||
catkin_download_test_data(
|
||||
${PROJECT_NAME}_tests_vlp16.pcap
|
||||
http://download.ros.org/data/velodyne/vlp16.pcap
|
||||
DESTINATION ${CATKIN_DEVEL_PREFIX}/${CATKIN_PACKAGE_SHARE_DESTINATION}/tests
|
||||
MD5 f45c2bb1d7ee358274e423ea3b66fd73)
|
||||
|
||||
# run rostests
|
||||
add_rostest(cloud_node_hz.test)
|
||||
add_rostest(cloud_nodelet_hz.test)
|
||||
add_rostest(cloud_node_32e_hz.test)
|
||||
add_rostest(cloud_nodelet_32e_hz.test)
|
||||
add_rostest(cloud_node_64e_s2.1_hz.test)
|
||||
add_rostest(cloud_nodelet_64e_s2.1_hz.test)
|
||||
add_rostest(cloud_node_vlp16_hz.test)
|
||||
add_rostest(cloud_nodelet_vlp16_hz.test)
|
||||
add_rostest(transform_node_hz.test)
|
||||
add_rostest(transform_nodelet_hz.test)
|
||||
add_rostest(two_nodelet_managers.test)
|
||||
|
||||
# parse check all the launch/*.launch files
|
||||
roslaunch_add_file_check(../launch)
|
||||
@@ -0,0 +1,835 @@
|
||||
num_lasers: 64
|
||||
distance_resolution: 0.002
|
||||
lasers:
|
||||
- laser_id: 0
|
||||
rot_correction: -0.122173048555851
|
||||
vert_correction: -0.401850968599319
|
||||
dist_correction: 0.119999997317791
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 1
|
||||
rot_correction: -0.0610865242779255
|
||||
vert_correction: -0.39391815662384
|
||||
dist_correction: 0.0199999995529652
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 2
|
||||
rot_correction: 0.0959931090474129
|
||||
vert_correction: -0.200955957174301
|
||||
dist_correction: 0.100000001490116
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 3
|
||||
rot_correction: 0.148352980613708
|
||||
vert_correction: -0.188023120164871
|
||||
dist_correction: 0.230000004172325
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 4
|
||||
rot_correction: -0.00872664619237185
|
||||
vert_correction: -0.384992778301239
|
||||
dist_correction: 0.170000001788139
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 5
|
||||
rot_correction: 0.0610865242779255
|
||||
vert_correction: -0.379074156284332
|
||||
dist_correction: 0.150000005960464
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 6
|
||||
rot_correction: -0.0174532923847437
|
||||
vert_correction: -0.445288896560669
|
||||
dist_correction: 0.0500000007450581
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 7
|
||||
rot_correction: 0.0349065847694874
|
||||
vert_correction: -0.43470174074173
|
||||
dist_correction: 0.270000010728836
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 8
|
||||
rot_correction: 0.122173048555851
|
||||
vert_correction: -0.3671615421772
|
||||
dist_correction: 0.180000007152557
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 9
|
||||
rot_correction: 0.174532920122147
|
||||
vert_correction: -0.357254236936569
|
||||
dist_correction: 0.189999997615814
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 10
|
||||
rot_correction: 0.104719758033752
|
||||
vert_correction: -0.423742026090622
|
||||
dist_correction: 0.100000001490116
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 11
|
||||
rot_correction: 0.165806278586388
|
||||
vert_correction: -0.414792060852051
|
||||
dist_correction: 0.200000002980232
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 12
|
||||
rot_correction: -0.113446399569511
|
||||
vert_correction: -0.288992017507553
|
||||
dist_correction: 0.219999998807907
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 13
|
||||
rot_correction: -0.0567231997847557
|
||||
vert_correction: -0.28310164809227
|
||||
dist_correction: 0.200000002980232
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 14
|
||||
rot_correction: -0.13962633907795
|
||||
vert_correction: -0.347351551055908
|
||||
dist_correction: 0.150000005960464
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 15
|
||||
rot_correction: -0.0872664600610733
|
||||
vert_correction: -0.332452714443207
|
||||
dist_correction: 0.219999998807907
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 16
|
||||
rot_correction: 0
|
||||
vert_correction: -0.274210214614868
|
||||
dist_correction: 0.0599999986588955
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 17
|
||||
rot_correction: 0.0558505356311798
|
||||
vert_correction: -0.266317009925842
|
||||
dist_correction: 0.129999995231628
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 18
|
||||
rot_correction: -0.0174532923847437
|
||||
vert_correction: -0.331895291805267
|
||||
dist_correction: 0.00999999977648258
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 19
|
||||
rot_correction: 0.0349065847694874
|
||||
vert_correction: -0.323663860559464
|
||||
dist_correction: 0.150000005960464
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 20
|
||||
rot_correction: 0.122173048555851
|
||||
vert_correction: -0.256421387195587
|
||||
dist_correction: 0.200000002980232
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 21
|
||||
rot_correction: 0.165806278586388
|
||||
vert_correction: -0.244522526860237
|
||||
dist_correction: 0.239999994635582
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 22
|
||||
rot_correction: 0.104719758033752
|
||||
vert_correction: -0.31077241897583
|
||||
dist_correction: 0.180000007152557
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 23
|
||||
rot_correction: 0.157079637050629
|
||||
vert_correction: -0.302882075309753
|
||||
dist_correction: 0.219999998807907
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 24
|
||||
rot_correction: -0.104719758033752
|
||||
vert_correction: -0.180082052946091
|
||||
dist_correction: 0.140000000596046
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 25
|
||||
rot_correction: -0.0610865242779255
|
||||
vert_correction: -0.172132045030594
|
||||
dist_correction: 0.319999992847443
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 26
|
||||
rot_correction: -0.13962633907795
|
||||
vert_correction: -0.235619828104973
|
||||
dist_correction: 0.200000002980232
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 27
|
||||
rot_correction: -0.0785398185253143
|
||||
vert_correction: -0.228712558746338
|
||||
dist_correction: 0.25
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 28
|
||||
rot_correction: 0
|
||||
vert_correction: -0.16517236828804
|
||||
dist_correction: 0.170000001788139
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 29
|
||||
rot_correction: 0.0436332300305367
|
||||
vert_correction: -0.154202222824097
|
||||
dist_correction: 0.230000004172325
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 30
|
||||
rot_correction: -0.0174532923847437
|
||||
vert_correction: -0.219799935817719
|
||||
dist_correction: 0.150000005960464
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 31
|
||||
rot_correction: 0.0314159244298935
|
||||
vert_correction: -0.21088133752346
|
||||
dist_correction: 0.230000004172325
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 32
|
||||
rot_correction: -0.0698131695389748
|
||||
vert_correction: -0.121932752430439
|
||||
dist_correction: 0.100000001490116
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 33
|
||||
rot_correction: -0.0392699092626572
|
||||
vert_correction: -0.113993428647518
|
||||
dist_correction: 0.280000001192093
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 34
|
||||
rot_correction: 0.0698131695389748
|
||||
vert_correction: 0.0055470340885222
|
||||
dist_correction: 0.319999992847443
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 35
|
||||
rot_correction: 0.104719758033752
|
||||
vert_correction: 0.0114863449707627
|
||||
dist_correction: 0.230000004172325
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 36
|
||||
rot_correction: 0.013962633907795
|
||||
vert_correction: -0.109056323766708
|
||||
dist_correction: 0.0700000002980232
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 37
|
||||
rot_correction: 0.0392699092626572
|
||||
vert_correction: -0.104121200740337
|
||||
dist_correction: 0.0900000035762787
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 38
|
||||
rot_correction: 0
|
||||
vert_correction: -0.14471623301506
|
||||
dist_correction: 0.119999997317791
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 39
|
||||
rot_correction: 0.0226892791688442
|
||||
vert_correction: -0.1387659907341
|
||||
dist_correction: 0.200000002980232
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 40
|
||||
rot_correction: 0.0820304751396179
|
||||
vert_correction: -0.0981878563761711
|
||||
dist_correction: 0.129999995231628
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 41
|
||||
rot_correction: 0.113446399569511
|
||||
vert_correction: -0.0952560678124428
|
||||
dist_correction: 0.159999996423721
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 42
|
||||
rot_correction: 0.0698131695389748
|
||||
vert_correction: -0.132818818092346
|
||||
dist_correction: 0.159999996423721
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 43
|
||||
rot_correction: 0.104719758033752
|
||||
vert_correction: -0.127874463796616
|
||||
dist_correction: 0.159999996423721
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 44
|
||||
rot_correction: -0.068067841231823
|
||||
vert_correction: -0.05375986546278
|
||||
dist_correction: 0.129999995231628
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 45
|
||||
rot_correction: -0.0349065847694874
|
||||
vert_correction: -0.0478330813348293
|
||||
dist_correction: 0.200000002980232
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 46
|
||||
rot_correction: -0.0837758108973503
|
||||
vert_correction: -0.0893256440758705
|
||||
dist_correction: 0.170000001788139
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 47
|
||||
rot_correction: -0.0479965545237064
|
||||
vert_correction: -0.0833963677287102
|
||||
dist_correction: 0.239999994635582
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 48
|
||||
rot_correction: 0.00872664619237185
|
||||
vert_correction: -0.0419059917330742
|
||||
dist_correction: 0.180000007152557
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 49
|
||||
rot_correction: 0.0392699092626572
|
||||
vert_correction: -0.035978376865387
|
||||
dist_correction: 0.0599999986588955
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 50
|
||||
rot_correction: 0
|
||||
vert_correction: -0.0774680152535439
|
||||
dist_correction: 0.140000000596046
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 51
|
||||
rot_correction: 0.0305432621389627
|
||||
vert_correction: -0.0715404152870178
|
||||
dist_correction: 0.150000005960464
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 52
|
||||
rot_correction: 0.0855211317539215
|
||||
vert_correction: -0.0300500374287367
|
||||
dist_correction: 0.219999998807907
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 53
|
||||
rot_correction: 0.109083078801632
|
||||
vert_correction: -0.024120757356286
|
||||
dist_correction: 0.140000000596046
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 54
|
||||
rot_correction: 0.0698131695389748
|
||||
vert_correction: -0.0656133219599724
|
||||
dist_correction: 0.0799999982118607
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 55
|
||||
rot_correction: 0.104719758033752
|
||||
vert_correction: -0.0596865378320217
|
||||
dist_correction: 0.159999996423721
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 56
|
||||
rot_correction: -0.0610865242779255
|
||||
vert_correction: 0.0174280721694231
|
||||
dist_correction: 0.119999997317791
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 57
|
||||
rot_correction: -0.0349065847694874
|
||||
vert_correction: 0.0233724191784859
|
||||
dist_correction: 0.219999998807907
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 58
|
||||
rot_correction: -0.0785398185253143
|
||||
vert_correction: -0.0181903336197138
|
||||
dist_correction: 0.159999996423721
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 59
|
||||
rot_correction: -0.0471238903701305
|
||||
vert_correction: -0.0122585473582149
|
||||
dist_correction: 0.259999990463257
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 60
|
||||
rot_correction: 0.0104719763621688
|
||||
vert_correction: 0.0293195936828852
|
||||
dist_correction: 0.140000000596046
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 61
|
||||
rot_correction: 0.0349065847694874
|
||||
vert_correction: 0.0352698266506195
|
||||
dist_correction: 0.219999998807907
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 62
|
||||
rot_correction: -0.00436332309618592
|
||||
vert_correction: -0.00632520206272602
|
||||
dist_correction: 0.209999993443489
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
- laser_id: 63
|
||||
rot_correction: 0.0296705979853868
|
||||
vert_correction: -0.000390077300835401
|
||||
dist_correction: 0.140000000596046
|
||||
two_pt_correction_available: false
|
||||
dist_correction_x: 0
|
||||
dist_correction_y: 0
|
||||
vert_offset_correction: 0
|
||||
vert_offset_correction: 0
|
||||
max_intensity: 255
|
||||
min_intensity: 0
|
||||
focal_distance: 0
|
||||
focal_slope: 0
|
||||
@@ -0,0 +1,258 @@
|
||||
lasers:
|
||||
- {dist_correction: 0.100000001490116, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 0, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.0698131695389748, two_pt_correction_available: false, vert_correction: -0.124932751059532,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.280000001192093, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 1, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.0392699092626572, two_pt_correction_available: false, vert_correction: -0.118993431329727,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.319999992847443, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 2, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0698131695389748, two_pt_correction_available: false, vert_correction: 0.0055470340885222,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.230000004172325, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 3, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.104719758033752, two_pt_correction_available: false, vert_correction: 0.0114863449707627,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.0700000002980232, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 4, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.013962633907795, two_pt_correction_available: false, vert_correction: -0.113056324422359,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.0900000035762787, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 5, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0392699092626572, two_pt_correction_available: false, vert_correction: -0.107121199369431,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.119999997317791, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 6, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0, two_pt_correction_available: false, vert_correction: -0.148716226220131,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.200000002980232, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 7, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0226892791688442, two_pt_correction_available: false, vert_correction: -0.142765983939171,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.129999995231628, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 8, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0820304751396179, two_pt_correction_available: false, vert_correction: -0.101187855005264,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.159999996423721, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 9, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.113446399569511, two_pt_correction_available: false, vert_correction: -0.0952560678124428,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.159999996423721, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 10, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0698131695389748, two_pt_correction_available: false, vert_correction: -0.136818811297417,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.159999996423721, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 11, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.104719758033752, two_pt_correction_available: false, vert_correction: -0.130874469876289,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.129999995231628, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 12, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.068067841231823, two_pt_correction_available: false, vert_correction: -0.05375986546278,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.200000002980232, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 13, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.0349065847694874, two_pt_correction_available: false, vert_correction: -0.0478330813348293,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.170000001788139, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 14, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.0837758108973503, two_pt_correction_available: false, vert_correction: -0.0893256440758705,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.239999994635582, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 15, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.0479965545237064, two_pt_correction_available: false, vert_correction: -0.0833963677287102,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.180000007152557, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 16, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.00872664619237185, two_pt_correction_available: false, vert_correction: -0.0419059917330742,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.0599999986588955, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 17, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0392699092626572, two_pt_correction_available: false, vert_correction: -0.035978376865387,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.140000000596046, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 18, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0, two_pt_correction_available: false, vert_correction: -0.0774680152535439,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.150000005960464, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 19, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0305432621389627, two_pt_correction_available: false, vert_correction: -0.0715404152870178,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.219999998807907, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 20, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0855211317539215, two_pt_correction_available: false, vert_correction: -0.0300500374287367,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.140000000596046, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 21, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.109083078801632, two_pt_correction_available: false, vert_correction: -0.024120757356286,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.0799999982118607, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 22, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0698131695389748, two_pt_correction_available: false, vert_correction: -0.0656133219599724,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.159999996423721, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 23, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.104719758033752, two_pt_correction_available: false, vert_correction: -0.0596865378320217,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.119999997317791, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 24, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.0610865242779255, two_pt_correction_available: false, vert_correction: 0.0174280721694231,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.219999998807907, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 25, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.0349065847694874, two_pt_correction_available: false, vert_correction: 0.0233724191784859,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.159999996423721, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 26, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.0785398185253143, two_pt_correction_available: false, vert_correction: -0.0181903336197138,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.259999990463257, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 27, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.0471238903701305, two_pt_correction_available: false, vert_correction: -0.0122585473582149,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.140000000596046, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 28, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0104719763621688, two_pt_correction_available: false, vert_correction: 0.0293195936828852,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.219999998807907, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 29, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0349065847694874, two_pt_correction_available: false, vert_correction: 0.0352698266506195,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.209999993443489, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 30, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.00436332309618592, two_pt_correction_available: false, vert_correction: -0.00632520206272602,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.140000000596046, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 31, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0296705979853868, two_pt_correction_available: false, vert_correction: -0.000390077300835401,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.119999997317791, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 32, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.122173048555851, two_pt_correction_available: false, vert_correction: -0.396850973367691,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.0199999995529652, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 33, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.0610865242779255, two_pt_correction_available: false, vert_correction: -0.387918144464493,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.100000001490116, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 34, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0959931090474129, two_pt_correction_available: false, vert_correction: -0.200955957174301,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.230000004172325, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 35, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.148352980613708, two_pt_correction_available: false, vert_correction: -0.192023113369942,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.170000001788139, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 36, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.00872664619237185, two_pt_correction_available: false, vert_correction: -0.378992766141891,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.150000005960464, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 37, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0610865242779255, two_pt_correction_available: false, vert_correction: -0.370074152946472,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.0500000007450581, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 38, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.0174532923847437, two_pt_correction_available: false, vert_correction: -0.43128889799118,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.270000010728836, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 39, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0349065847694874, two_pt_correction_available: false, vert_correction: -0.423701733350754,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.180000007152557, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 40, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.122173048555851, two_pt_correction_available: false, vert_correction: -0.361161530017853,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.189999997615814, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 41, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.174532920122147, two_pt_correction_available: false, vert_correction: -0.352254241704941,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.100000001490116, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 42, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.104719758033752, two_pt_correction_available: false, vert_correction: -0.414742022752762,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.200000002980232, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 43, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.165806278586388, two_pt_correction_available: false, vert_correction: -0.405792057514191,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.219999998807907, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 44, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.113446399569511, two_pt_correction_available: false, vert_correction: -0.28999200463295,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.200000002980232, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 45, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.0567231997847557, two_pt_correction_available: false, vert_correction: -0.281101644039154,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.150000005960464, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 46, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.13962633907795, two_pt_correction_available: false, vert_correction: -0.343351542949677,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.219999998807907, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 47, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.0872664600610733, two_pt_correction_available: false, vert_correction: -0.334452718496323,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.0599999986588955, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 48, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0, two_pt_correction_available: false, vert_correction: -0.272210210561752,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.129999995231628, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 49, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0558505356311798, two_pt_correction_available: false, vert_correction: -0.26331701874733,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.00999999977648258, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 50, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.0174532923847437, two_pt_correction_available: false, vert_correction: -0.323895305395126,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.150000005960464, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 51, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0349065847694874, two_pt_correction_available: false, vert_correction: -0.316663861274719,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.200000002980232, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 52, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.122173048555851, two_pt_correction_available: false, vert_correction: -0.254421383142471,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.239999994635582, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 53, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.165806278586388, two_pt_correction_available: false, vert_correction: -0.245522528886795,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.180000007152557, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 54, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.104719758033752, two_pt_correction_available: false, vert_correction: -0.307772427797318,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.219999998807907, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 55, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.157079637050629, two_pt_correction_available: false, vert_correction: -0.298882067203522,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.140000000596046, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 56, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.104719758033752, two_pt_correction_available: false, vert_correction: -0.183082059025764,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.319999992847443, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 57, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.0610865242779255, two_pt_correction_available: false, vert_correction: -0.17413204908371,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.200000002980232, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 58, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.13962633907795, two_pt_correction_available: false, vert_correction: -0.236619830131531,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.25, dist_correction_x: 0, dist_correction_y: 0, focal_distance: 0,
|
||||
focal_slope: 0, laser_id: 59, max_intensity: 255, min_intensity: 0, rot_correction: -0.0785398185253143,
|
||||
two_pt_correction_available: false, vert_correction: -0.22771255671978, vert_offset_correction: 0}
|
||||
- {dist_correction: 0.170000001788139, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 60, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0, two_pt_correction_available: false, vert_correction: -0.16517236828804,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.230000004172325, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 61, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0436332300305367, two_pt_correction_available: false, vert_correction: -0.156202226877213,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.150000005960464, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 62, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: -0.0174532923847437, two_pt_correction_available: false, vert_correction: -0.218799933791161,
|
||||
vert_offset_correction: 0}
|
||||
- {dist_correction: 0.230000004172325, dist_correction_x: 0, dist_correction_y: 0,
|
||||
focal_distance: 0, focal_slope: 0, laser_id: 63, max_intensity: 255, min_intensity: 0,
|
||||
rot_correction: 0.0314159244298935, two_pt_correction_available: false, vert_correction: -0.209881335496902,
|
||||
vert_offset_correction: 0}
|
||||
num_lasers: 64
|
||||
distance_resolution: 0.002
|
||||
@@ -0,0 +1,28 @@
|
||||
<!-- -*- mode: XML -*- -->
|
||||
<!-- rostest of reading Velodyne 32E PCAP files -->
|
||||
|
||||
<launch>
|
||||
|
||||
<!-- start driver with example PCAP file -->
|
||||
<node pkg="velodyne_driver" type="velodyne_node" name="velodyne_node">
|
||||
<param name="model" value="32E"/>
|
||||
<param name="pcap" value="$(find velodyne_pointcloud)/tests/32e.pcap"/>
|
||||
</node>
|
||||
|
||||
<!-- start cloud node with test calibration file -->
|
||||
<node pkg="velodyne_pointcloud" type="cloud_node" name="cloud_node">
|
||||
<param name="calibration"
|
||||
value="$(find velodyne_pointcloud)/params/32db.yaml"/>
|
||||
</node>
|
||||
|
||||
<!-- verify PointCloud2 publication rate -->
|
||||
<test test-name="cloud_node_32e_hz_test" pkg="rostest"
|
||||
type="hztest" name="hztest_cloud_node_32e" >
|
||||
<param name="hz" value="10.0" />
|
||||
<param name="hzerror" value="3.0" />
|
||||
<param name="test_duration" value="5.0" />
|
||||
<param name="topic" value="velodyne_points" />
|
||||
<param name="wait_time" value="2.0" />
|
||||
</test>
|
||||
|
||||
</launch>
|
||||
@@ -0,0 +1,29 @@
|
||||
<!-- -*- mode: XML -*- -->
|
||||
<!-- rostest of reading Velodyne 64E S2.1 PCAP files -->
|
||||
|
||||
<launch>
|
||||
|
||||
<!-- start driver with example PCAP file -->
|
||||
<node pkg="velodyne_driver" type="velodyne_node" name="velodyne_node">
|
||||
<param name="model" value="64E_S2.1"/>
|
||||
<param name="pcap" value="$(find velodyne_pointcloud)/tests/64e_s2.1-300-sztaki.pcap"/>
|
||||
<param name="rpm" value="300"/>
|
||||
</node>
|
||||
|
||||
<!-- start cloud node with test calibration file -->
|
||||
<node pkg="velodyne_pointcloud" type="cloud_node" name="cloud_node">
|
||||
<param name="calibration"
|
||||
value="$(find velodyne_pointcloud)/params/64e_s2.1-sztaki.yaml"/>
|
||||
</node>
|
||||
|
||||
<!-- verify PointCloud2 publication rate -->
|
||||
<test test-name="cloud_node_64e_s21_hz_test" pkg="rostest"
|
||||
type="hztest" name="hztest_cloud_node_64e_s21" >
|
||||
<param name="hz" value="5.0" />
|
||||
<param name="hzerror" value="2.0" />
|
||||
<param name="test_duration" value="5.0" />
|
||||
<param name="topic" value="velodyne_points" />
|
||||
<param name="wait_time" value="2.0" />
|
||||
</test>
|
||||
|
||||
</launch>
|
||||
@@ -0,0 +1,27 @@
|
||||
<!-- -*- mode: XML -*- -->
|
||||
<!-- rostest of reading Velodyne 64E PCAP files -->
|
||||
|
||||
<launch>
|
||||
|
||||
<!-- start driver with example PCAP file -->
|
||||
<node pkg="velodyne_driver" type="velodyne_node" name="velodyne_node">
|
||||
<param name="pcap" value="$(find velodyne_pointcloud)/tests/class.pcap"/>
|
||||
</node>
|
||||
|
||||
<!-- start cloud node with test calibration file -->
|
||||
<node pkg="velodyne_pointcloud" type="cloud_node" name="cloud_node">
|
||||
<param name="calibration"
|
||||
value="$(find velodyne_pointcloud)/params/64e_utexas.yaml"/>
|
||||
</node>
|
||||
|
||||
<!-- verify PointCloud2 publication rate -->
|
||||
<test test-name="cloud_node_hz_test" pkg="rostest"
|
||||
type="hztest" name="hztest_cloud_node_64e" >
|
||||
<param name="hz" value="10.0" />
|
||||
<param name="hzerror" value="3.0" />
|
||||
<param name="test_duration" value="5.0" />
|
||||
<param name="topic" value="velodyne_points" />
|
||||
<param name="wait_time" value="2.0" />
|
||||
</test>
|
||||
|
||||
</launch>
|
||||
@@ -0,0 +1,28 @@
|
||||
<!-- -*- mode: XML -*- -->
|
||||
<!-- rostest of reading Velodyne VLP16 PCAP files -->
|
||||
|
||||
<launch>
|
||||
|
||||
<!-- start driver with example PCAP file -->
|
||||
<node pkg="velodyne_driver" type="velodyne_node" name="velodyne_node">
|
||||
<param name="model" value="VLP16"/>
|
||||
<param name="pcap" value="$(find velodyne_pointcloud)/tests/vlp16.pcap"/>
|
||||
</node>
|
||||
|
||||
<!-- start cloud node with test calibration file -->
|
||||
<node pkg="velodyne_pointcloud" type="cloud_node" name="cloud_node">
|
||||
<param name="calibration"
|
||||
value="$(find velodyne_pointcloud)/params/VLP16db.yaml"/>
|
||||
</node>
|
||||
|
||||
<!-- verify PointCloud2 publication rate -->
|
||||
<test test-name="cloud_node_vlp16_hz_test" pkg="rostest"
|
||||
type="hztest" name="hztest_cloud_node_vlp16">
|
||||
<param name="hz" value="10.0" />
|
||||
<param name="hzerror" value="3.0" />
|
||||
<param name="test_duration" value="5.0" />
|
||||
<param name="topic" value="velodyne_points" />
|
||||
<param name="wait_time" value="2.0" />
|
||||
</test>
|
||||
|
||||
</launch>
|
||||
@@ -0,0 +1,22 @@
|
||||
<!-- -*- mode: XML -*- -->
|
||||
<!-- rostest of publishing a PointCloud from PCAP data. -->
|
||||
|
||||
<launch>
|
||||
|
||||
<!-- start nodelet manager, driver and cloud nodelets -->
|
||||
<include file="$(find velodyne_pointcloud)/launch/32e_points.launch">
|
||||
<arg name="frame_id" value="test_frame"/>
|
||||
<arg name="pcap" value="$(find velodyne_pointcloud)/tests/32e.pcap"/>
|
||||
</include>
|
||||
|
||||
<!-- verify PointCloud2 publication rate -->
|
||||
<test test-name="cloud_nodelet_32e_hz_test" pkg="rostest"
|
||||
type="hztest" name="hztest_cloud_nodelet_32e" >
|
||||
<param name="hz" value="10.0" />
|
||||
<param name="hzerror" value="3.0" />
|
||||
<param name="test_duration" value="5.0" />
|
||||
<param name="topic" value="velodyne_points" />
|
||||
<param name="wait_time" value="2.0" />
|
||||
</test>
|
||||
|
||||
</launch>
|
||||
@@ -0,0 +1,29 @@
|
||||
<!-- -*- mode: XML -*- -->
|
||||
<!-- rostest of publishing a PointCloud from 64E S2.1 PCAP data. -->
|
||||
|
||||
<launch>
|
||||
|
||||
<!-- start nodelet manager and driver nodelets -->
|
||||
<include file="$(find velodyne_driver)/launch/nodelet_manager.launch">
|
||||
<arg name="model" value="64E_S2.1"/>
|
||||
<arg name="pcap" value="$(find velodyne_pointcloud)/tests/64e_s2.1-300-sztaki.pcap"/>
|
||||
<arg name="rpm" value="300"/>
|
||||
</include>
|
||||
|
||||
<!-- start cloud nodelet using test calibration file -->
|
||||
<include file="$(find velodyne_pointcloud)/launch/cloud_nodelet.launch">
|
||||
<arg name="calibration"
|
||||
value="$(find velodyne_pointcloud)/params/64e_s2.1-sztaki.yaml"/>
|
||||
</include>
|
||||
|
||||
<!-- verify PointCloud2 publication rate -->
|
||||
<test test-name="cloud_nodelet_64e_s21_hz_test" pkg="rostest"
|
||||
type="hztest" name="hztest_cloud_nodelet_64e_s21" >
|
||||
<param name="hz" value="5.0" />
|
||||
<param name="hzerror" value="1.0" />
|
||||
<param name="test_duration" value="5.0" />
|
||||
<param name="topic" value="velodyne_points" />
|
||||
<param name="wait_time" value="2.0" />
|
||||
</test>
|
||||
|
||||
</launch>
|
||||
@@ -0,0 +1,32 @@
|
||||
<!-- -*- mode: XML -*- -->
|
||||
<!-- rostest of publishing a PointCloud from PCAP data.
|
||||
|
||||
Uses rostest, because a running roscore is required.
|
||||
|
||||
$Id$
|
||||
-->
|
||||
|
||||
<launch>
|
||||
|
||||
<!-- start nodelet manager and driver nodelets -->
|
||||
<include file="$(find velodyne_driver)/launch/nodelet_manager.launch">
|
||||
<arg name="pcap" value="$(find velodyne_pointcloud)/tests/class.pcap"/>
|
||||
</include>
|
||||
|
||||
<!-- start cloud nodelet using test calibration file -->
|
||||
<include file="$(find velodyne_pointcloud)/launch/cloud_nodelet.launch">
|
||||
<arg name="calibration"
|
||||
value="$(find velodyne_pointcloud)/params/64e_utexas.yaml"/>
|
||||
</include>
|
||||
|
||||
<!-- verify PointCloud2 publication rate -->
|
||||
<test test-name="cloud_nodelet_hz_test" pkg="rostest"
|
||||
type="hztest" name="hztest_cloud_nodelet_64e" >
|
||||
<param name="hz" value="10.0" />
|
||||
<param name="hzerror" value="3.0" />
|
||||
<param name="test_duration" value="5.0" />
|
||||
<param name="topic" value="velodyne_points" />
|
||||
<param name="wait_time" value="2.0" />
|
||||
</test>
|
||||
|
||||
</launch>
|
||||
@@ -0,0 +1,22 @@
|
||||
<!-- -*- mode: XML -*- -->
|
||||
<!-- rostest of publishing a PointCloud from PCAP data. -->
|
||||
|
||||
<launch>
|
||||
|
||||
<!-- start nodelet manager, driver and cloud nodelets -->
|
||||
<include file="$(find velodyne_pointcloud)/launch/VLP16_points.launch">
|
||||
<arg name="frame_id" value="test_frame"/>
|
||||
<arg name="pcap" value="$(find velodyne_pointcloud)/tests/vlp16.pcap"/>
|
||||
</include>
|
||||
|
||||
<!-- verify PointCloud2 publication rate -->
|
||||
<test test-name="cloud_nodelet_vlp16_hz_test" pkg="rostest"
|
||||
type="hztest" name="hztest_cloud_nodelet_vlp16" >
|
||||
<param name="hz" value="10.0" />
|
||||
<param name="hzerror" value="3.0" />
|
||||
<param name="test_duration" value="5.0" />
|
||||
<param name="topic" value="velodyne_points" />
|
||||
<param name="wait_time" value="2.0" />
|
||||
</test>
|
||||
|
||||
</launch>
|
||||
@@ -0,0 +1,240 @@
|
||||
# test data from an HDL-64E S2 containing float min_intensity values
|
||||
# causes issue #84 failure
|
||||
lasers:
|
||||
- {dist_correction: 1.1897507, dist_correction_x: 1.2184412, dist_correction_y: 1.1993269,
|
||||
focal_distance: 22.5, focal_slope: 1.1, horiz_offset_correction: 0.025999999, laser_id: 0,
|
||||
min_intensity: 40.0, rot_correction: -0.08193448173487379, vert_correction: -0.12118950050089745,
|
||||
vert_offset_correction: 0.21533014000000003}
|
||||
- {dist_correction: 1.4128801999999998, dist_correction_x: 1.4313695000000002, dist_correction_y: 1.4312958,
|
||||
focal_distance: 24.0, focal_slope: 0.80000001, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 1, min_intensity: 40.0, rot_correction: -0.04631400641637322, vert_correction: -0.1154246814722187,
|
||||
vert_offset_correction: 0.21490976}
|
||||
- {dist_correction: 1.352054, dist_correction_x: 1.3625516, dist_correction_y: 1.3604144,
|
||||
focal_distance: 22.0, focal_slope: 1.15, horiz_offset_correction: 0.025999999, laser_id: 2,
|
||||
min_intensity: 40.0, rot_correction: 0.05367805144003262, vert_correction: 0.007649359057937743,
|
||||
vert_offset_correction: 0.20602308000000003}
|
||||
- {dist_correction: 1.3877103, dist_correction_x: 1.4052618000000001, dist_correction_y: 1.4102048999999999,
|
||||
focal_distance: 21.0, focal_slope: 1.2, horiz_offset_correction: -0.025999999, laser_id: 3,
|
||||
min_intensity: 20.0, rot_correction: 0.09201863985105889, vert_correction: 0.01508908679395137,
|
||||
vert_offset_correction: 0.20548805000000003}
|
||||
- {dist_correction: 1.2740263, dist_correction_x: 1.2988675, dist_correction_y: 1.2487833000000002,
|
||||
focal_distance: 24.0, focal_slope: 1.4, horiz_offset_correction: 0.025999999, laser_id: 4,
|
||||
min_intensity: 10.0, rot_correction: -0.007693320585669901, vert_correction: -0.1102984033676868,
|
||||
vert_offset_correction: 0.21453644000000002}
|
||||
- {dist_correction: 1.2418116000000001, dist_correction_x: 1.252481, dist_correction_y: 1.2255676,
|
||||
focal_distance: 24.0, focal_slope: 1.38, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 5, min_intensity: 28.0, rot_correction: 0.032006458688310216, vert_correction: -0.10399361088436754,
|
||||
vert_offset_correction: 0.21407784}
|
||||
- {dist_correction: 1.3176793, dist_correction_x: 1.3353647000000002, dist_correction_y: 1.3361707999999999,
|
||||
focal_distance: 24.0, focal_slope: 1.2, horiz_offset_correction: 0.025999999, laser_id: 6,
|
||||
min_intensity: 40.0, rot_correction: -0.021861479338351635, vert_correction: -0.14544533071754853,
|
||||
vert_offset_correction: 0.21710571}
|
||||
- {dist_correction: 1.3708466000000001, dist_correction_x: 1.3905527000000002, dist_correction_y: 1.3970328,
|
||||
focal_distance: 24.0, focal_slope: 0.89999998, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 7, min_intensity: 40.0, rot_correction: 0.01761759781572604, vert_correction: -0.139035509555832,
|
||||
vert_offset_correction: 0.21663536}
|
||||
- {dist_correction: 1.2544352, dist_correction_x: 1.2857481000000002, dist_correction_y: 1.2282503,
|
||||
focal_distance: 24.0, focal_slope: 1.22, horiz_offset_correction: 0.025999999, laser_id: 8,
|
||||
min_intensity: 40.0, rot_correction: 0.06658719948349573, vert_correction: -0.09889517252673422,
|
||||
vert_offset_correction: 0.21370745}
|
||||
- {dist_correction: 1.3738158999999999, dist_correction_x: 1.3938158000000003, dist_correction_y: 1.3844524000000002,
|
||||
focal_distance: 24.0, focal_slope: 1.15, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 9, min_intensity: 40.0, rot_correction: 0.10588806804896926, vert_correction: -0.09225143361201914,
|
||||
vert_offset_correction: 0.21322533}
|
||||
- {dist_correction: 1.3156921, dist_correction_x: 1.3354019, dist_correction_y: 1.2833449,
|
||||
focal_distance: 24.0, focal_slope: 1.3200001, horiz_offset_correction: 0.025999999,
|
||||
laser_id: 10, min_intensity: 40.0, rot_correction: 0.052778260906800954, vert_correction: -0.134421316289823,
|
||||
vert_offset_correction: 0.2162973}
|
||||
- {dist_correction: 1.3696194, dist_correction_x: 1.3846521, dist_correction_y: 1.3639107000000001,
|
||||
focal_distance: 20.0, focal_slope: 1.25, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 11, min_intensity: 40.0, rot_correction: 0.09284370411236641, vert_correction: -0.12714737563412706,
|
||||
vert_offset_correction: 0.21576523000000003}
|
||||
- {dist_correction: 1.2275657, dist_correction_x: 1.2543072, dist_correction_y: 1.2294422,
|
||||
focal_distance: 24.0, focal_slope: 1.0700001, horiz_offset_correction: 0.025999999,
|
||||
laser_id: 12, min_intensity: 40.0, rot_correction: -0.08319450648038783, vert_correction: -0.0502394945048745,
|
||||
vert_offset_correction: 0.21018864}
|
||||
- {dist_correction: 1.3757889, dist_correction_x: 1.3849341999999998, dist_correction_y: 1.3686421000000002,
|
||||
focal_distance: 24.0, focal_slope: 1.4, horiz_offset_correction: -0.025999999, laser_id: 13,
|
||||
min_intensity: 40.0, rot_correction: -0.04344974309026683, vert_correction: -0.04379427282993976,
|
||||
vert_offset_correction: 0.20972416}
|
||||
- {dist_correction: 1.3319664, dist_correction_x: 1.3705452, dist_correction_y: 1.3209669,
|
||||
focal_distance: 24.0, focal_slope: 1.05, horiz_offset_correction: 0.025999999, laser_id: 14,
|
||||
min_intensity: 40.0, rot_correction: -0.09661677957860802, vert_correction: -0.08535601123784947,
|
||||
vert_offset_correction: 0.21272558}
|
||||
- {dist_correction: 1.3714989, dist_correction_x: 1.3624129999999999, dist_correction_y: 1.3403807,
|
||||
focal_distance: 24.0, focal_slope: 1.4, horiz_offset_correction: -0.025999999, laser_id: 15,
|
||||
min_intensity: 40.0, rot_correction: -0.056929933194385184, vert_correction: -0.07898063589425029,
|
||||
vert_offset_correction: 0.21226404}
|
||||
- {dist_correction: 1.2595838000000001, dist_correction_x: 1.2785926, dist_correction_y: 1.2370594,
|
||||
focal_distance: 24.0, focal_slope: 1.4, horiz_offset_correction: 0.025999999, laser_id: 16,
|
||||
min_intensity: 40.0, rot_correction: -0.008102055927068873, vert_correction: -0.03910078576535417,
|
||||
vert_offset_correction: 0.20938608}
|
||||
- {dist_correction: 1.3786241000000001, dist_correction_x: 1.3948055, dist_correction_y: 1.3862044,
|
||||
focal_distance: 24.0, focal_slope: 1.4, horiz_offset_correction: -0.025999999, laser_id: 17,
|
||||
min_intensity: 40.0, rot_correction: 0.03149012048240021, vert_correction: -0.03191447983673011,
|
||||
vert_offset_correction: 0.20886870999999999}
|
||||
- {dist_correction: 1.3628464, dist_correction_x: 1.3785178, dist_correction_y: 1.3152992000000001,
|
||||
focal_distance: 20.5, focal_slope: 1.2, horiz_offset_correction: 0.025999999, laser_id: 18,
|
||||
min_intensity: 10.0, rot_correction: -0.021944024685324706, vert_correction: -0.07495714058693254,
|
||||
vert_offset_correction: 0.21197302}
|
||||
- {dist_correction: 1.394641, dist_correction_x: 1.3899173999999999, dist_correction_y: 1.370442,
|
||||
focal_distance: 24.0, focal_slope: 1.4, horiz_offset_correction: -0.025999999, laser_id: 19,
|
||||
min_intensity: 10.0, rot_correction: 0.01766883719190609, vert_correction: -0.06771695808962866,
|
||||
vert_offset_correction: 0.21144976000000001}
|
||||
- {dist_correction: 1.2123122, dist_correction_x: 1.2413981, dist_correction_y: 1.2070784,
|
||||
focal_distance: 23.5, focal_slope: 1.1, horiz_offset_correction: 0.025999999, laser_id: 20,
|
||||
min_intensity: 5.0, rot_correction: 0.06651143299533739, vert_correction: -0.027462144914892576,
|
||||
vert_offset_correction: 0.20854828000000003}
|
||||
- {dist_correction: 1.2599731, dist_correction_x: 1.2764229, dist_correction_y: 1.2986679,
|
||||
focal_distance: 21.0, focal_slope: 1.2, horiz_offset_correction: -0.025999999, laser_id: 21,
|
||||
min_intensity: 5.0, rot_correction: 0.10511566735251142, vert_correction: -0.020434314882349612,
|
||||
vert_offset_correction: 0.20804264}
|
||||
- {dist_correction: 1.3053941, dist_correction_x: 1.3411044, dist_correction_y: 1.2835222,
|
||||
focal_distance: 24.0, focal_slope: 1.42, horiz_offset_correction: 0.025999999, laser_id: 22,
|
||||
min_intensity: 30.0, rot_correction: 0.052657269447064954, vert_correction: -0.06262826041455072,
|
||||
vert_offset_correction: 0.21108229}
|
||||
- {dist_correction: 1.2550185, dist_correction_x: 1.2702521, dist_correction_y: 1.2836005000000001,
|
||||
focal_distance: 24.0, focal_slope: 1.4, horiz_offset_correction: -0.025999999, laser_id: 23,
|
||||
min_intensity: 40.0, rot_correction: 0.09175727679557273, vert_correction: -0.05606926072567847,
|
||||
vert_offset_correction: 0.21060900000000002}
|
||||
- {dist_correction: 1.2748341, dist_correction_x: 1.3196121, dist_correction_y: 1.2784751,
|
||||
focal_distance: 20.5, focal_slope: 1.25, horiz_offset_correction: 0.025999999, laser_id: 24,
|
||||
min_intensity: 10.0, rot_correction: -0.08344753035270795, vert_correction: 0.020524792750772996,
|
||||
vert_offset_correction: 0.20509708000000001}
|
||||
- {dist_correction: 1.3777713, dist_correction_x: 1.3645123000000001, dist_correction_y: 1.3802203,
|
||||
focal_distance: 24.0, focal_slope: 1.3, horiz_offset_correction: -0.025999999, laser_id: 25,
|
||||
max_intensity: 230.0, rot_correction: -0.04351660490858147, vert_correction: 0.02702150163864157,
|
||||
vert_offset_correction: 0.20462966999999999}
|
||||
- {dist_correction: 1.3718602000000002, dist_correction_x: 1.4046102999999999, dist_correction_y: 1.3834868,
|
||||
focal_distance: 19.0, focal_slope: 1.35, horiz_offset_correction: 0.025999999, laser_id: 26,
|
||||
max_intensity: 245.0, rot_correction: -0.09689230074498635, vert_correction: -0.014916840599137901,
|
||||
vert_offset_correction: 0.2076458}
|
||||
- {dist_correction: 1.3833778, dist_correction_x: 1.375231, dist_correction_y: 1.3606032,
|
||||
focal_distance: 24.0, focal_slope: 1.4, horiz_offset_correction: -0.025999999, laser_id: 27,
|
||||
max_intensity: 240.0, rot_correction: -0.057451870416535586, vert_correction: -0.00817206789015045,
|
||||
vert_offset_correction: 0.20716073999999998}
|
||||
- {dist_correction: 1.2951183000000002, dist_correction_x: 1.3258408, dist_correction_y: 1.2997318999999998,
|
||||
focal_distance: 24.0, focal_slope: 1.4, horiz_offset_correction: 0.025999999, laser_id: 28,
|
||||
max_intensity: 240.0, rot_correction: -0.008271954654038412, vert_correction: 0.032168250709970085,
|
||||
vert_offset_correction: 0.20425926}
|
||||
- {dist_correction: 1.4026823, dist_correction_x: 1.4151775000000002, dist_correction_y: 1.4065117,
|
||||
focal_distance: 24.0, focal_slope: 1.05, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 29, rot_correction: 0.03059445241686176, vert_correction: 0.03821143404637868,
|
||||
vert_offset_correction: 0.2038242}
|
||||
- {dist_correction: 1.3756502000000002, dist_correction_x: 1.3986545000000001, dist_correction_y: 1.3567966000000002,
|
||||
focal_distance: 24.0, focal_slope: 1.37, horiz_offset_correction: 0.025999999, laser_id: 30,
|
||||
rot_correction: -0.022168507188386963, vert_correction: -0.003020972948984465, vert_offset_correction: 0.20679033000000002}
|
||||
- {dist_correction: 1.4303774999999999, dist_correction_x: 1.4219699000000001, dist_correction_y: 1.4110721000000002,
|
||||
focal_distance: 24.0, focal_slope: 1.38, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 31, rot_correction: 0.017020332183059567, vert_correction: 0.0032341127317709376,
|
||||
vert_offset_correction: 0.20634056}
|
||||
- {dist_correction: 1.2299187999999999, dist_correction_x: 1.221242, dist_correction_y: 1.159202,
|
||||
focal_distance: 12.8, focal_slope: 2.0, horiz_offset_correction: 0.025999999, laser_id: 32,
|
||||
rot_correction: -0.13428924897065386, vert_correction: -0.3917846862503118, vert_offset_correction: 0.15982219}
|
||||
- {dist_correction: 1.3144859, dist_correction_x: 1.3336081, dist_correction_y: 1.3461792,
|
||||
focal_distance: 0.25, focal_slope: 1.02, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 33, rot_correction: -0.07421947892390637, vert_correction: -0.3836205247016729,
|
||||
vert_offset_correction: 0.15923027}
|
||||
- {dist_correction: 1.2725937999999999, dist_correction_x: 1.2842772, dist_correction_y: 1.3025389,
|
||||
focal_distance: 0.25, focal_slope: 0.94999999, horiz_offset_correction: 0.025999999,
|
||||
laser_id: 34, rot_correction: 0.08138446391038806, vert_correction: -0.1992609420279063,
|
||||
vert_offset_correction: 0.14669841}
|
||||
- {dist_correction: 1.3357777, dist_correction_x: 1.3343283, dist_correction_y: 1.3631558000000001,
|
||||
focal_distance: 9.0, focal_slope: 1.5, horiz_offset_correction: -0.025999999, laser_id: 35,
|
||||
rot_correction: 0.1383208914749199, vert_correction: -0.18701489169116567, vert_offset_correction: 0.14590834}
|
||||
- {dist_correction: 1.1742934, dist_correction_x: 1.2244499, dist_correction_y: 1.1818057,
|
||||
focal_distance: 10.8, focal_slope: 1.38, horiz_offset_correction: 0.025999999, laser_id: 36,
|
||||
rot_correction: -0.013445351586919306, vert_correction: -0.37738235143590226, vert_offset_correction: 0.15878062}
|
||||
- {dist_correction: 1.090762, dist_correction_x: 1.1042352, dist_correction_y: 1.0975322,
|
||||
focal_distance: 12.5, focal_slope: 1.55, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 37, rot_correction: 0.04734804593033903, vert_correction: -0.3673083633532685,
|
||||
vert_offset_correction: 0.15805914}
|
||||
- {dist_correction: 1.2801097, dist_correction_x: 1.2734876, dist_correction_y: 1.2697346,
|
||||
focal_distance: 6.0, focal_slope: 1.1, horiz_offset_correction: 0.025999999, laser_id: 38,
|
||||
rot_correction: -0.03680020095578886, vert_correction: -0.4294796616630621, vert_offset_correction: 0.16260902000000002}
|
||||
- {dist_correction: 1.2865338, dist_correction_x: 1.2686511, dist_correction_y: 1.29416,
|
||||
focal_distance: 0.25, focal_slope: 1.0, horiz_offset_correction: -0.025999999, laser_id: 39,
|
||||
rot_correction: 0.025992554995433074, vert_correction: -0.42099842614921335, vert_offset_correction: 0.16197392000000002}
|
||||
- {dist_correction: 1.2932777, dist_correction_x: 1.3400191000000001, dist_correction_y: 1.3263618,
|
||||
focal_distance: 0.25, focal_slope: 1.02, horiz_offset_correction: 0.025999999, laser_id: 40,
|
||||
rot_correction: 0.10601307725664336, vert_correction: -0.3565455112681652, vert_offset_correction: 0.15729448}
|
||||
- {dist_correction: 1.2614787, dist_correction_x: 1.2626826, dist_correction_y: 1.267609,
|
||||
focal_distance: 8.5, focal_slope: 1.65, horiz_offset_correction: -0.025999999, laser_id: 41,
|
||||
rot_correction: 0.16733068965072595, vert_correction: -0.3479014190818128, vert_offset_correction: 0.15668478}
|
||||
- {dist_correction: 1.2428966, dist_correction_x: 1.2460679000000001, dist_correction_y: 1.2397518,
|
||||
focal_distance: 0.25, focal_slope: 1.2, horiz_offset_correction: 0.025999999, laser_id: 42,
|
||||
rot_correction: 0.08594727468321833, vert_correction: -0.4110102035460227, vert_offset_correction: 0.16123213}
|
||||
- {dist_correction: 1.3061783, dist_correction_x: 1.2655383, dist_correction_y: 1.2857359,
|
||||
focal_distance: 10.0, focal_slope: 1.6799999, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 43, rot_correction: 0.1464050331680134, vert_correction: -0.4015579191962419,
|
||||
vert_offset_correction: 0.16053604}
|
||||
- {dist_correction: 1.2317036000000001, dist_correction_x: 1.2393882, dist_correction_y: 1.2123593,
|
||||
focal_distance: 12.5, focal_slope: 2.0, horiz_offset_correction: 0.025999999, laser_id: 44,
|
||||
rot_correction: -0.13261467013054762, vert_correction: -0.2838808920696538, vert_offset_correction: 0.1522797}
|
||||
- {dist_correction: 1.2567677000000002, dist_correction_x: 1.2904861, dist_correction_y: 1.2915567,
|
||||
focal_distance: 0.25, focal_slope: 0.47999999, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 45, rot_correction: -0.07009130400404175, vert_correction: -0.276291415083819,
|
||||
vert_offset_correction: 0.15176907}
|
||||
- {dist_correction: 1.2793438000000001, dist_correction_x: 1.2915629999999998, dist_correction_y: 1.2718159,
|
||||
focal_distance: 12.0, focal_slope: 2.0, horiz_offset_correction: 0.025999999, laser_id: 46,
|
||||
rot_correction: -0.15533259824081613, vert_correction: -0.33574467724289675, vert_offset_correction: 0.15583374}
|
||||
- {dist_correction: 1.2330788, dist_correction_x: 1.2624972, dist_correction_y: 1.2636649,
|
||||
focal_distance: 2.0, focal_slope: 0.89999998, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 47, rot_correction: -0.09347288483573485, vert_correction: -0.3300846093852642,
|
||||
vert_offset_correction: 0.15543998}
|
||||
- {dist_correction: 1.1445625, dist_correction_x: 1.2045525000000001, dist_correction_y: 1.1558383,
|
||||
focal_distance: 23.2, focal_slope: 0.75, horiz_offset_correction: 0.025999999, laser_id: 48,
|
||||
rot_correction: -0.014086204897792162, vert_correction: -0.2692770589931014, vert_offset_correction: 0.15129910000000002}
|
||||
- {dist_correction: 1.2741866, dist_correction_x: 1.2946111, dist_correction_y: 1.2808211,
|
||||
focal_distance: 18.0, focal_slope: 0.92000002, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 49, rot_correction: 0.04602459591980752, vert_correction: -0.25952585210233153,
|
||||
vert_offset_correction: 0.15064875}
|
||||
- {dist_correction: 1.2584636, dist_correction_x: 1.2985907, dist_correction_y: 1.2481342,
|
||||
focal_distance: 15.8, focal_slope: 1.28, horiz_offset_correction: 0.025999999, laser_id: 50,
|
||||
rot_correction: -0.035928232716163244, vert_correction: -0.3234839312338543, vert_offset_correction: 0.1549827}
|
||||
- {dist_correction: 1.1207238, dist_correction_x: 1.1458776000000002, dist_correction_y: 1.1290197000000002,
|
||||
focal_distance: 18.0, focal_slope: 0.89999998, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 51, rot_correction: 0.025398581053735863, vert_correction: -0.3141198558244693,
|
||||
vert_offset_correction: 0.15433743}
|
||||
- {dist_correction: 1.3357715, dist_correction_x: 1.3748308, dist_correction_y: 1.3750087,
|
||||
focal_distance: 2.2, focal_slope: 0.64999998, horiz_offset_correction: 0.025999999,
|
||||
laser_id: 52, rot_correction: 0.10206324357040601, vert_correction: -0.2503763474711867,
|
||||
vert_offset_correction: 0.15004159}
|
||||
- {dist_correction: 1.2831325000000002, dist_correction_x: 1.2906917000000002, dist_correction_y: 1.3047183000000002,
|
||||
focal_distance: 8.2, focal_slope: 1.65, horiz_offset_correction: -0.025999999, laser_id: 53,
|
||||
rot_correction: 0.16118048446991431, vert_correction: -0.2388694789792507, vert_offset_correction: 0.14928201}
|
||||
- {dist_correction: 1.4319325, dist_correction_x: 1.470513, dist_correction_y: 1.4623492,
|
||||
focal_distance: 6.0, focal_slope: 0.51999998, horiz_offset_correction: 0.025999999,
|
||||
laser_id: 54, rot_correction: 0.08241589764778065, vert_correction: -0.30499605989320633,
|
||||
vert_offset_correction: 0.15371249}
|
||||
- {dist_correction: 1.2852434, dist_correction_x: 1.2985229, dist_correction_y: 1.271758,
|
||||
focal_distance: 12.5, focal_slope: 2.0, horiz_offset_correction: -0.025999999, laser_id: 55,
|
||||
rot_correction: 0.142266131454566, vert_correction: -0.2947717466020984, vert_offset_correction: 0.15301642}
|
||||
- {dist_correction: 1.4007397000000001, dist_correction_x: 1.4001398, dist_correction_y: 1.3912132,
|
||||
focal_distance: 8.5, focal_slope: 1.7, horiz_offset_correction: 0.025999999, laser_id: 56,
|
||||
rot_correction: -0.12786652808043583, vert_correction: -0.17641617036891985, vert_offset_correction: 0.14522751}
|
||||
- {dist_correction: 1.2880724000000001, dist_correction_x: 1.3014014, dist_correction_y: 1.3205367000000001,
|
||||
focal_distance: 0.25, focal_slope: 1.2, horiz_offset_correction: -0.025999999, laser_id: 57,
|
||||
rot_correction: -0.07017803115990259, vert_correction: -0.17070459784506095, vert_offset_correction: 0.14486169000000002}
|
||||
- {dist_correction: 1.4760434, dist_correction_x: 1.4308182, dist_correction_y: 1.4627808,
|
||||
focal_distance: 11.5, focal_slope: 2.0, horiz_offset_correction: 0.025999999, laser_id: 58,
|
||||
rot_correction: -0.15113763829712393, vert_correction: -0.2281125435603116, vert_offset_correction: 0.14857577}
|
||||
- {dist_correction: 1.303936, dist_correction_x: 1.3230009, dist_correction_y: 1.3335196,
|
||||
focal_distance: 0.25, focal_slope: 0.64999998, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 59, rot_correction: -0.0918767934520908, vert_correction: -0.2232191988430801,
|
||||
vert_offset_correction: 0.14825568}
|
||||
- {dist_correction: 1.3472046, dist_correction_x: 1.3541069, dist_correction_y: 1.3651146,
|
||||
focal_distance: 3.5, focal_slope: 1.38, horiz_offset_correction: 0.025999999, laser_id: 60,
|
||||
rot_correction: -0.013572408240338915, vert_correction: -0.16291245497181386, vert_offset_correction: 0.14436376}
|
||||
- {dist_correction: 1.3001047000000001, dist_correction_x: 1.3096320000000001, dist_correction_y: 1.3519560000000002,
|
||||
focal_distance: 3.5, focal_slope: 1.35, horiz_offset_correction: -0.025999999, laser_id: 61,
|
||||
rot_correction: 0.04349449333228796, vert_correction: -0.1540625535600664, vert_offset_correction: 0.14379979}
|
||||
- {dist_correction: 1.2880972, dist_correction_x: 1.2842999000000002, dist_correction_y: 1.2916876,
|
||||
focal_distance: 12.0, focal_slope: 1.35, horiz_offset_correction: 0.025999999, laser_id: 62,
|
||||
rot_correction: -0.03466167345792974, vert_correction: -0.21484439350701803, vert_offset_correction: 0.14770949}
|
||||
- {dist_correction: 1.3186316, dist_correction_x: 1.3250179, dist_correction_y: 1.3431560999999999,
|
||||
focal_distance: 10.5, focal_slope: 0.60000002, horiz_offset_correction: -0.025999999,
|
||||
laser_id: 63, rot_correction: 0.02351688573662471, vert_correction: -0.20683046990039078,
|
||||
vert_offset_correction: 0.14718871}
|
||||
num_lasers: 64
|
||||
distance_resolution: 0.002
|
||||
@@ -0,0 +1,23 @@
|
||||
<!-- -*- mode: XML -*- -->
|
||||
<!-- define transforms for testing static vehicle sensors -->
|
||||
|
||||
<launch>
|
||||
|
||||
<!-- publish /vehicle -> /velodyne transform -->
|
||||
<node pkg="tf2_ros" type="static_transform_publisher"
|
||||
name="vehicle_velodyne_tf"
|
||||
args="0.393 0.278 2.4 -0.02155 0.0164 0.00621 vehicle velodyne" />
|
||||
|
||||
<!-- publish identity /odom -> /vehicle transform
|
||||
(for viewing sensor data for a static vehicle) -->
|
||||
<node pkg="tf2_ros" type="static_transform_publisher"
|
||||
name="vehicle_is_odom"
|
||||
args="0 0 0 0 0 0 odom vehicle" />
|
||||
|
||||
<!-- publish identity /map -> /odom transform
|
||||
(for viewing sensor data for a static vehicle) -->
|
||||
<node pkg="tf2_ros" type="static_transform_publisher"
|
||||
name="map_to_odom"
|
||||
args="0 0 0 0 0 0 map odom" />
|
||||
|
||||
</launch>
|
||||
@@ -0,0 +1,195 @@
|
||||
// Copyright (C) 2012, 2019 Austin Robot Technology, Jack O'Quin, Joshua Whitley
|
||||
// All rights reserved.
|
||||
//
|
||||
// Software License Agreement (BSD License 2.0)
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions
|
||||
// are met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following
|
||||
// disclaimer in the documentation and/or other materials provided
|
||||
// with the distribution.
|
||||
// * Neither the name of {copyright_holder} nor the names of its
|
||||
// contributors may be used to endorse or promote products derived
|
||||
// from this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
// POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include <ros/package.h>
|
||||
#include <velodyne_pointcloud/calibration.h>
|
||||
|
||||
#include <string>
|
||||
|
||||
using namespace velodyne_pointcloud; // NOLINT
|
||||
|
||||
// global test data
|
||||
std::string g_package_name("velodyne_pointcloud");
|
||||
std::string g_package_path;
|
||||
|
||||
void init_global_data(void)
|
||||
{
|
||||
g_package_path = ros::package::getPath(g_package_name);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Test cases
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
TEST(Calibration, missing_file)
|
||||
{
|
||||
Calibration calibration(false);
|
||||
calibration.read("./no_such_file.yaml");
|
||||
EXPECT_FALSE(calibration.initialized);
|
||||
}
|
||||
|
||||
TEST(Calibration, vlp16)
|
||||
{
|
||||
Calibration calibration(g_package_path + "/params/VLP16db.yaml", false);
|
||||
EXPECT_TRUE(calibration.initialized);
|
||||
ASSERT_EQ(calibration.num_lasers, 16);
|
||||
|
||||
// check some values for the first laser:
|
||||
LaserCorrection laser = calibration.laser_corrections[0];
|
||||
EXPECT_FALSE(laser.two_pt_correction_available);
|
||||
EXPECT_FLOAT_EQ(laser.vert_correction, -0.2617993877991494);
|
||||
EXPECT_FLOAT_EQ(laser.horiz_offset_correction, 0.0);
|
||||
EXPECT_EQ(laser.max_intensity, 255);
|
||||
EXPECT_EQ(laser.min_intensity, 0);
|
||||
|
||||
// check similar values for the last laser:
|
||||
laser = calibration.laser_corrections[15];
|
||||
EXPECT_FALSE(laser.two_pt_correction_available);
|
||||
EXPECT_FLOAT_EQ(laser.vert_correction, 0.2617993877991494);
|
||||
EXPECT_FLOAT_EQ(laser.horiz_offset_correction, 0.0);
|
||||
EXPECT_EQ(laser.max_intensity, 255);
|
||||
EXPECT_EQ(laser.min_intensity, 0);
|
||||
}
|
||||
|
||||
TEST(Calibration, hdl32e)
|
||||
{
|
||||
Calibration calibration(g_package_path + "/params/32db.yaml", false);
|
||||
EXPECT_TRUE(calibration.initialized);
|
||||
ASSERT_EQ(calibration.num_lasers, 32);
|
||||
|
||||
// check some values for the first laser:
|
||||
LaserCorrection laser = calibration.laser_corrections[0];
|
||||
EXPECT_FALSE(laser.two_pt_correction_available);
|
||||
EXPECT_FLOAT_EQ(laser.vert_correction, -0.5352924815866609);
|
||||
EXPECT_FLOAT_EQ(laser.horiz_offset_correction, 0.0);
|
||||
EXPECT_EQ(laser.max_intensity, 255);
|
||||
EXPECT_EQ(laser.min_intensity, 0);
|
||||
|
||||
// check similar values for the last laser:
|
||||
laser = calibration.laser_corrections[31];
|
||||
EXPECT_FALSE(laser.two_pt_correction_available);
|
||||
EXPECT_FLOAT_EQ(laser.vert_correction, 0.18622663118779495);
|
||||
EXPECT_FLOAT_EQ(laser.horiz_offset_correction, 0.0);
|
||||
EXPECT_EQ(laser.max_intensity, 255);
|
||||
EXPECT_EQ(laser.min_intensity, 0);
|
||||
}
|
||||
|
||||
TEST(Calibration, hdl64e)
|
||||
{
|
||||
Calibration calibration(g_package_path + "/params/64e_utexas.yaml", false);
|
||||
EXPECT_TRUE(calibration.initialized);
|
||||
ASSERT_EQ(calibration.num_lasers, 64);
|
||||
|
||||
// check some values for the first laser:
|
||||
LaserCorrection laser = calibration.laser_corrections[0];
|
||||
EXPECT_FALSE(laser.two_pt_correction_available);
|
||||
EXPECT_FLOAT_EQ(laser.vert_correction, -0.124932751059532);
|
||||
EXPECT_FLOAT_EQ(laser.horiz_offset_correction, 0.0);
|
||||
EXPECT_EQ(laser.max_intensity, 255);
|
||||
EXPECT_EQ(laser.min_intensity, 0);
|
||||
|
||||
// check similar values for the last laser:
|
||||
laser = calibration.laser_corrections[63];
|
||||
EXPECT_FALSE(laser.two_pt_correction_available);
|
||||
EXPECT_FLOAT_EQ(laser.vert_correction, -0.209881335496902);
|
||||
EXPECT_FLOAT_EQ(laser.horiz_offset_correction, 0.0);
|
||||
EXPECT_EQ(laser.max_intensity, 255);
|
||||
EXPECT_EQ(laser.min_intensity, 0);
|
||||
}
|
||||
|
||||
TEST(Calibration, hdl64e_s21)
|
||||
{
|
||||
Calibration calibration(g_package_path + "/params/64e_s2.1-sztaki.yaml",
|
||||
false);
|
||||
EXPECT_TRUE(calibration.initialized);
|
||||
ASSERT_EQ(calibration.num_lasers, 64);
|
||||
|
||||
// check some values for the first laser:
|
||||
LaserCorrection laser = calibration.laser_corrections[0];
|
||||
EXPECT_FALSE(laser.two_pt_correction_available);
|
||||
EXPECT_FLOAT_EQ(laser.vert_correction, -0.15304134919741974);
|
||||
EXPECT_FLOAT_EQ(laser.horiz_offset_correction, 0.025999999);
|
||||
EXPECT_EQ(laser.max_intensity, 235);
|
||||
EXPECT_EQ(laser.min_intensity, 30);
|
||||
|
||||
// check similar values for the last laser:
|
||||
laser = calibration.laser_corrections[63];
|
||||
EXPECT_FALSE(laser.two_pt_correction_available);
|
||||
EXPECT_FLOAT_EQ(laser.vert_correction, -0.2106649408137298);
|
||||
EXPECT_FLOAT_EQ(laser.horiz_offset_correction, -0.025999999);
|
||||
EXPECT_EQ(laser.max_intensity, 255);
|
||||
EXPECT_EQ(laser.min_intensity, 0);
|
||||
}
|
||||
|
||||
TEST(Calibration, hdl64e_s2_float_intensities)
|
||||
{
|
||||
Calibration calibration(g_package_path +
|
||||
"/tests/issue_84_float_intensities.yaml",
|
||||
false);
|
||||
EXPECT_TRUE(calibration.initialized);
|
||||
ASSERT_EQ(calibration.num_lasers, 64);
|
||||
|
||||
// check some values for the first laser:
|
||||
LaserCorrection laser = calibration.laser_corrections[0];
|
||||
EXPECT_FALSE(laser.two_pt_correction_available);
|
||||
EXPECT_FLOAT_EQ(laser.vert_correction, -0.12118950050089745);
|
||||
EXPECT_FLOAT_EQ(laser.horiz_offset_correction, 0.025999999);
|
||||
EXPECT_EQ(laser.max_intensity, 255);
|
||||
EXPECT_EQ(laser.min_intensity, 40);
|
||||
|
||||
// check similar values for laser 26:
|
||||
laser = calibration.laser_corrections[26];
|
||||
EXPECT_FALSE(laser.two_pt_correction_available);
|
||||
EXPECT_FLOAT_EQ(laser.vert_correction, -0.014916840599137901);
|
||||
EXPECT_FLOAT_EQ(laser.horiz_offset_correction, 0.025999999);
|
||||
EXPECT_EQ(laser.max_intensity, 245);
|
||||
EXPECT_EQ(laser.min_intensity, 0);
|
||||
|
||||
// check similar values for the last laser:
|
||||
laser = calibration.laser_corrections[63];
|
||||
EXPECT_FALSE(laser.two_pt_correction_available);
|
||||
EXPECT_FLOAT_EQ(laser.vert_correction, -0.20683046990039078);
|
||||
EXPECT_FLOAT_EQ(laser.horiz_offset_correction, -0.025999999);
|
||||
EXPECT_EQ(laser.max_intensity, 255);
|
||||
EXPECT_EQ(laser.min_intensity, 0);
|
||||
}
|
||||
|
||||
// Run all the tests that were declared with TEST()
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
testing::InitGoogleTest(&argc, argv);
|
||||
init_global_data();
|
||||
return RUN_ALL_TESTS();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,906 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
||||
<!DOCTYPE boost_serialization>
|
||||
<boost_serialization signature="serialization::archive" version="4">
|
||||
<DB class_id="0" tracking_level="1" version="0" object_id="_0">
|
||||
<points_ class_id="7" tracking_level="0" version="0">
|
||||
<count>64</count>
|
||||
<item_version>1</item_version>
|
||||
<item class_id="8" tracking_level="0" version="1">
|
||||
<px class_id="9" tracking_level="1" version="1" object_id="_1">
|
||||
<id_>0</id_>
|
||||
<rotCorrection_>-5.3328056</rotCorrection_>
|
||||
<vertCorrection_>-7.2988362</vertCorrection_>
|
||||
<distCorrection_>111</distCorrection_>
|
||||
<distCorrectionX_>118</distCorrectionX_>
|
||||
<distCorrectionY_>118</distCorrectionY_>
|
||||
<vertOffsetCorrection_>19.736338</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_2">
|
||||
<id_>1</id_>
|
||||
<rotCorrection_>-3.2344019</rotCorrection_>
|
||||
<vertCorrection_>-6.9644198</vertCorrection_>
|
||||
<distCorrection_>146</distCorrection_>
|
||||
<distCorrectionX_>149</distCorrectionX_>
|
||||
<distCorrectionY_>151</distCorrectionY_>
|
||||
<vertOffsetCorrection_>19.778963</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>-2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_3">
|
||||
<id_>2</id_>
|
||||
<rotCorrection_>2.4376695</rotCorrection_>
|
||||
<vertCorrection_>0.250889</vertCorrection_>
|
||||
<distCorrection_>131.76823</distCorrection_>
|
||||
<distCorrectionX_>136</distCorrectionX_>
|
||||
<distCorrectionY_>136</distCorrectionY_>
|
||||
<vertOffsetCorrection_>20.688799</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_4">
|
||||
<id_>3</id_>
|
||||
<rotCorrection_>4.7373252</rotCorrection_>
|
||||
<vertCorrection_>0.55538797</vertCorrection_>
|
||||
<distCorrection_>138.12656</distCorrection_>
|
||||
<distCorrectionX_>142</distCorrectionX_>
|
||||
<distCorrectionY_>144</distCorrectionY_>
|
||||
<vertOffsetCorrection_>20.727015</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>-2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_5">
|
||||
<id_>4</id_>
|
||||
<rotCorrection_>-1.0502493</rotCorrection_>
|
||||
<vertCorrection_>-6.6410818</vertCorrection_>
|
||||
<distCorrection_>119</distCorrection_>
|
||||
<distCorrectionX_>127</distCorrectionX_>
|
||||
<distCorrectionY_>128</distCorrectionY_>
|
||||
<vertOffsetCorrection_>19.82012</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_6">
|
||||
<id_>5</id_>
|
||||
<rotCorrection_>1.2386309</rotCorrection_>
|
||||
<vertCorrection_>-6.2594609</vertCorrection_>
|
||||
<distCorrection_>135</distCorrection_>
|
||||
<distCorrectionX_>140</distCorrectionX_>
|
||||
<distCorrectionY_>144</distCorrectionY_>
|
||||
<vertOffsetCorrection_>19.868624</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>-2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_7">
|
||||
<id_>6</id_>
|
||||
<rotCorrection_>-1.8405367</rotCorrection_>
|
||||
<vertCorrection_>-8.6656351</vertCorrection_>
|
||||
<distCorrection_>132</distCorrection_>
|
||||
<distCorrectionX_>135</distCorrectionX_>
|
||||
<distCorrectionY_>137</distCorrectionY_>
|
||||
<vertOffsetCorrection_>19.561426</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_8">
|
||||
<id_>7</id_>
|
||||
<rotCorrection_>0.4511103</rotCorrection_>
|
||||
<vertCorrection_>-8.3104696</vertCorrection_>
|
||||
<distCorrection_>145</distCorrection_>
|
||||
<distCorrectionX_>145</distCorrectionX_>
|
||||
<distCorrectionY_>149</distCorrectionY_>
|
||||
<vertOffsetCorrection_>19.606993</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>-2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_9">
|
||||
<id_>8</id_>
|
||||
<rotCorrection_>3.2611551</rotCorrection_>
|
||||
<vertCorrection_>-5.9352221</vertCorrection_>
|
||||
<distCorrection_>116</distCorrection_>
|
||||
<distCorrectionX_>122</distCorrectionX_>
|
||||
<distCorrectionY_>121</distCorrectionY_>
|
||||
<vertOffsetCorrection_>19.909781</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_10">
|
||||
<id_>9</id_>
|
||||
<rotCorrection_>5.4685535</rotCorrection_>
|
||||
<vertCorrection_>-5.587399</vertCorrection_>
|
||||
<distCorrection_>133.99889</distCorrection_>
|
||||
<distCorrectionX_>140</distCorrectionX_>
|
||||
<distCorrectionY_>142</distCorrectionY_>
|
||||
<vertOffsetCorrection_>19.953875</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>-2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_11">
|
||||
<id_>10</id_>
|
||||
<rotCorrection_>2.4743285</rotCorrection_>
|
||||
<vertCorrection_>-7.9891219</vertCorrection_>
|
||||
<distCorrection_>117</distCorrection_>
|
||||
<distCorrectionX_>125</distCorrectionX_>
|
||||
<distCorrectionY_>123</distCorrectionY_>
|
||||
<vertOffsetCorrection_>19.648148</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_12">
|
||||
<id_>11</id_>
|
||||
<rotCorrection_>4.7189918</rotCorrection_>
|
||||
<vertCorrection_>-7.644258</vertCorrection_>
|
||||
<distCorrection_>145</distCorrection_>
|
||||
<distCorrectionX_>146</distCorrectionX_>
|
||||
<distCorrectionY_>151</distCorrectionY_>
|
||||
<vertOffsetCorrection_>19.692244</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>-2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_13">
|
||||
<id_>12</id_>
|
||||
<rotCorrection_>-5.3511744</rotCorrection_>
|
||||
<vertCorrection_>-3.2475569</vertCorrection_>
|
||||
<distCorrection_>118.71672</distCorrection_>
|
||||
<distCorrectionX_>124</distCorrectionX_>
|
||||
<distCorrectionY_>123</distCorrectionY_>
|
||||
<vertOffsetCorrection_>20.249313</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_14">
|
||||
<id_>13</id_>
|
||||
<rotCorrection_>-3.1158857</rotCorrection_>
|
||||
<vertCorrection_>-2.850472</vertCorrection_>
|
||||
<distCorrection_>142.90839</distCorrection_>
|
||||
<distCorrectionX_>148</distCorrectionX_>
|
||||
<distCorrectionY_>149</distCorrectionY_>
|
||||
<vertOffsetCorrection_>20.29929</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>-2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_15">
|
||||
<id_>14</id_>
|
||||
<rotCorrection_>-6.1270261</rotCorrection_>
|
||||
<vertCorrection_>-5.204318</vertCorrection_>
|
||||
<distCorrection_>120</distCorrection_>
|
||||
<distCorrectionX_>127</distCorrectionX_>
|
||||
<distCorrectionY_>124</distCorrectionY_>
|
||||
<vertOffsetCorrection_>20.00238</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_16">
|
||||
<id_>15</id_>
|
||||
<rotCorrection_>-3.852011</rotCorrection_>
|
||||
<vertCorrection_>-4.9137921</vertCorrection_>
|
||||
<distCorrection_>137</distCorrection_>
|
||||
<distCorrectionX_>144</distCorrectionX_>
|
||||
<distCorrectionY_>144</distCorrectionY_>
|
||||
<vertOffsetCorrection_>20.039125</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>-2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_17">
|
||||
<id_>16</id_>
|
||||
<rotCorrection_>-1.1109436</rotCorrection_>
|
||||
<vertCorrection_>-2.4998751</vertCorrection_>
|
||||
<distCorrection_>101.71324</distCorrection_>
|
||||
<distCorrectionX_>111</distCorrectionX_>
|
||||
<distCorrectionY_>109</distCorrectionY_>
|
||||
<vertOffsetCorrection_>20.343384</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_18">
|
||||
<id_>17</id_>
|
||||
<rotCorrection_>1.1519098</rotCorrection_>
|
||||
<vertCorrection_>-2.184176</vertCorrection_>
|
||||
<distCorrection_>145.31258</distCorrection_>
|
||||
<distCorrectionX_>153</distCorrectionX_>
|
||||
<distCorrectionY_>157</distCorrectionY_>
|
||||
<vertOffsetCorrection_>20.38307</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>-2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_19">
|
||||
<id_>18</id_>
|
||||
<rotCorrection_>-1.8682934</rotCorrection_>
|
||||
<vertCorrection_>-4.5764661</vertCorrection_>
|
||||
<distCorrection_>130</distCorrection_>
|
||||
<distCorrectionX_>135</distCorrectionX_>
|
||||
<distCorrectionY_>134</distCorrectionY_>
|
||||
<vertOffsetCorrection_>20.081753</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_20">
|
||||
<id_>19</id_>
|
||||
<rotCorrection_>0.43604341</rotCorrection_>
|
||||
<vertCorrection_>-4.2038751</vertCorrection_>
|
||||
<distCorrection_>147</distCorrection_>
|
||||
<distCorrectionX_>149</distCorrectionX_>
|
||||
<distCorrectionY_>152</distCorrectionY_>
|
||||
<vertOffsetCorrection_>20.128786</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>-2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_21">
|
||||
<id_>20</id_>
|
||||
<rotCorrection_>3.1763444</rotCorrection_>
|
||||
<vertCorrection_>-1.798143</vertCorrection_>
|
||||
<distCorrection_>115.82812</distCorrection_>
|
||||
<distCorrectionX_>124</distCorrectionX_>
|
||||
<distCorrectionY_>123</distCorrectionY_>
|
||||
<vertOffsetCorrection_>20.431576</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_22">
|
||||
<id_>21</id_>
|
||||
<rotCorrection_>5.4284201</rotCorrection_>
|
||||
<vertCorrection_>-1.49388</vertCorrection_>
|
||||
<distCorrection_>146</distCorrection_>
|
||||
<distCorrectionX_>152</distCorrectionX_>
|
||||
<distCorrectionY_>154</distCorrectionY_>
|
||||
<vertOffsetCorrection_>20.469791</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>-2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_23">
|
||||
<id_>22</id_>
|
||||
<rotCorrection_>2.4024715</rotCorrection_>
|
||||
<vertCorrection_>-1.877563</vertCorrection_>
|
||||
<distCorrection_>129.29713</distCorrection_>
|
||||
<distCorrectionX_>137</distCorrectionX_>
|
||||
<distCorrectionY_>136</distCorrectionY_>
|
||||
<vertOffsetCorrection_>20.169943</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_24">
|
||||
<id_>23</id_>
|
||||
<rotCorrection_>4.6698937</rotCorrection_>
|
||||
<vertCorrection_>-3.492661</vertCorrection_>
|
||||
<distCorrection_>157.97737</distCorrection_>
|
||||
<distCorrectionX_>162</distCorrectionX_>
|
||||
<distCorrectionY_>165</distCorrectionY_>
|
||||
<vertOffsetCorrection_>20.218447</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>-2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_25">
|
||||
<id_>24</id_>
|
||||
<rotCorrection_>-5.3977456</rotCorrection_>
|
||||
<vertCorrection_>0.88327599</vertCorrection_>
|
||||
<distCorrection_>124.12312</distCorrection_>
|
||||
<distCorrectionX_>132</distCorrectionX_>
|
||||
<distCorrectionY_>129</distCorrectionY_>
|
||||
<vertOffsetCorrection_>20.768169</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_26">
|
||||
<id_>25</id_>
|
||||
<rotCorrection_>-3.1504908</rotCorrection_>
|
||||
<vertCorrection_>1.234519</vertCorrection_>
|
||||
<distCorrection_>128</distCorrection_>
|
||||
<distCorrectionX_>135</distCorrectionX_>
|
||||
<distCorrectionY_>138</distCorrectionY_>
|
||||
<vertOffsetCorrection_>20.812265</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>-2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_27">
|
||||
<id_>26</id_>
|
||||
<rotCorrection_>-6.1759849</rotCorrection_>
|
||||
<vertCorrection_>-1.177825</vertCorrection_>
|
||||
<distCorrection_>133</distCorrection_>
|
||||
<distCorrectionX_>140</distCorrectionX_>
|
||||
<distCorrectionY_>139</distCorrectionY_>
|
||||
<vertOffsetCorrection_>20.509478</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_28">
|
||||
<id_>27</id_>
|
||||
<rotCorrection_>-3.8819003</rotCorrection_>
|
||||
<vertCorrection_>-0.86169797</vertCorrection_>
|
||||
<distCorrection_>130</distCorrection_>
|
||||
<distCorrectionX_>135</distCorrectionX_>
|
||||
<distCorrectionY_>134</distCorrectionY_>
|
||||
<vertOffsetCorrection_>20.549164</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>-2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_29">
|
||||
<id_>28</id_>
|
||||
<rotCorrection_>-1.1136208</rotCorrection_>
|
||||
<vertCorrection_>1.585669</vertCorrection_>
|
||||
<distCorrection_>131</distCorrection_>
|
||||
<distCorrectionX_>137</distCorrectionX_>
|
||||
<distCorrectionY_>137</distCorrectionY_>
|
||||
<vertOffsetCorrection_>20.856361</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_30">
|
||||
<id_>29</id_>
|
||||
<rotCorrection_>1.0969903</rotCorrection_>
|
||||
<vertCorrection_>1.925001</vertCorrection_>
|
||||
<distCorrection_>131</distCorrection_>
|
||||
<distCorrectionX_>139</distCorrectionX_>
|
||||
<distCorrectionY_>142</distCorrectionY_>
|
||||
<vertOffsetCorrection_>20.898987</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>-2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_31">
|
||||
<id_>30</id_>
|
||||
<rotCorrection_>-1.9088749</rotCorrection_>
|
||||
<vertCorrection_>-0.486963</vertCorrection_>
|
||||
<distCorrection_>138.48773</distCorrection_>
|
||||
<distCorrectionX_>145</distCorrectionX_>
|
||||
<distCorrectionY_>143</distCorrectionY_>
|
||||
<vertOffsetCorrection_>20.596197</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_32">
|
||||
<id_>31</id_>
|
||||
<rotCorrection_>0.36758029</rotCorrection_>
|
||||
<vertCorrection_>-0.123898</vertCorrection_>
|
||||
<distCorrection_>137.21994</distCorrection_>
|
||||
<distCorrectionX_>143</distCorrectionX_>
|
||||
<distCorrectionY_>145</distCorrectionY_>
|
||||
<vertOffsetCorrection_>20.641764</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>-2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_33">
|
||||
<id_>32</id_>
|
||||
<rotCorrection_>-8.3386211</rotCorrection_>
|
||||
<vertCorrection_>-22.597513</vertCorrection_>
|
||||
<distCorrection_>117</distCorrection_>
|
||||
<distCorrectionX_>124</distCorrectionX_>
|
||||
<distCorrectionY_>125</distCorrectionY_>
|
||||
<vertOffsetCorrection_>10.828748</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_34">
|
||||
<id_>33</id_>
|
||||
<rotCorrection_>-4.7629819</rotCorrection_>
|
||||
<vertCorrection_>-22.397568</vertCorrection_>
|
||||
<distCorrection_>100</distCorrection_>
|
||||
<distCorrectionX_>109</distCorrectionX_>
|
||||
<distCorrectionY_>110</distCorrectionY_>
|
||||
<vertOffsetCorrection_>10.854152</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>-2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_35">
|
||||
<id_>34</id_>
|
||||
<rotCorrection_>4.1516571</rotCorrection_>
|
||||
<vertCorrection_>-11.576517</vertCorrection_>
|
||||
<distCorrection_>130</distCorrection_>
|
||||
<distCorrectionX_>128</distCorrectionX_>
|
||||
<distCorrectionY_>130</distCorrectionY_>
|
||||
<vertOffsetCorrection_>12.142142</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_36">
|
||||
<id_>35</id_>
|
||||
<rotCorrection_>7.3577185</rotCorrection_>
|
||||
<vertCorrection_>-10.877901</vertCorrection_>
|
||||
<distCorrection_>102</distCorrection_>
|
||||
<distCorrectionX_>108</distCorrectionX_>
|
||||
<distCorrectionY_>109</distCorrectionY_>
|
||||
<vertOffsetCorrection_>12.220895</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>-2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_37">
|
||||
<id_>36</id_>
|
||||
<rotCorrection_>-1.2630961</rotCorrection_>
|
||||
<vertCorrection_>-21.935509</vertCorrection_>
|
||||
<distCorrection_>106</distCorrection_>
|
||||
<distCorrectionX_>112</distCorrectionX_>
|
||||
<distCorrectionY_>113</distCorrectionY_>
|
||||
<vertOffsetCorrection_>10.912581</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_38">
|
||||
<id_>37</id_>
|
||||
<rotCorrection_>2.1595552</rotCorrection_>
|
||||
<vertCorrection_>-21.409546</vertCorrection_>
|
||||
<distCorrection_>91</distCorrection_>
|
||||
<distCorrectionX_>100</distCorrectionX_>
|
||||
<distCorrectionY_>101</distCorrectionY_>
|
||||
<vertOffsetCorrection_>10.978632</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>-2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_39">
|
||||
<id_>38</id_>
|
||||
<rotCorrection_>-2.6141083</rotCorrection_>
|
||||
<vertCorrection_>-25.066507</vertCorrection_>
|
||||
<distCorrection_>127</distCorrection_>
|
||||
<distCorrectionX_>126</distCorrectionX_>
|
||||
<distCorrectionY_>126</distCorrectionY_>
|
||||
<vertOffsetCorrection_>10.508655</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_40">
|
||||
<id_>39</id_>
|
||||
<rotCorrection_>0.95595688</rotCorrection_>
|
||||
<vertCorrection_>-24.458101</vertCorrection_>
|
||||
<distCorrection_>95</distCorrection_>
|
||||
<distCorrectionX_>99</distCorrectionX_>
|
||||
<distCorrectionY_>102</distCorrectionY_>
|
||||
<vertOffsetCorrection_>10.588678</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>-2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_41">
|
||||
<id_>40</id_>
|
||||
<rotCorrection_>5.5369682</rotCorrection_>
|
||||
<vertCorrection_>-20.777454</vertCorrection_>
|
||||
<distCorrection_>106</distCorrection_>
|
||||
<distCorrectionX_>114</distCorrectionX_>
|
||||
<distCorrectionY_>114</distCorrectionY_>
|
||||
<vertOffsetCorrection_>11.057385</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_42">
|
||||
<id_>41</id_>
|
||||
<rotCorrection_>8.9712191</rotCorrection_>
|
||||
<vertCorrection_>-20.243195</vertCorrection_>
|
||||
<distCorrection_>97</distCorrection_>
|
||||
<distCorrectionX_>104</distCorrectionX_>
|
||||
<distCorrectionY_>105</distCorrectionY_>
|
||||
<vertOffsetCorrection_>11.123436</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>-2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_43">
|
||||
<id_>42</id_>
|
||||
<rotCorrection_>4.4757471</rotCorrection_>
|
||||
<vertCorrection_>-23.863358</vertCorrection_>
|
||||
<distCorrection_>115</distCorrection_>
|
||||
<distCorrectionX_>118</distCorrectionX_>
|
||||
<distCorrectionY_>120</distCorrectionY_>
|
||||
<vertOffsetCorrection_>10.666161</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_44">
|
||||
<id_>43</id_>
|
||||
<rotCorrection_>7.8848143</rotCorrection_>
|
||||
<vertCorrection_>-23.352007</vertCorrection_>
|
||||
<distCorrection_>92</distCorrection_>
|
||||
<distCorrectionX_>95</distCorrectionX_>
|
||||
<distCorrectionY_>100</distCorrectionY_>
|
||||
<vertOffsetCorrection_>10.732212</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>-2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_45">
|
||||
<id_>44</id_>
|
||||
<rotCorrection_>-8.0466499</rotCorrection_>
|
||||
<vertCorrection_>-16.629311</vertCorrection_>
|
||||
<distCorrection_>135</distCorrection_>
|
||||
<distCorrectionX_>135</distCorrectionX_>
|
||||
<distCorrectionY_>137</distCorrectionY_>
|
||||
<vertOffsetCorrection_>11.559117</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_46">
|
||||
<id_>45</id_>
|
||||
<rotCorrection_>-4.595552</rotCorrection_>
|
||||
<vertCorrection_>-16.230633</vertCorrection_>
|
||||
<distCorrection_>108</distCorrection_>
|
||||
<distCorrectionX_>112</distCorrectionX_>
|
||||
<distCorrectionY_>115</distCorrectionY_>
|
||||
<vertOffsetCorrection_>11.606115</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>-2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_47">
|
||||
<id_>46</id_>
|
||||
<rotCorrection_>-9.3918352</rotCorrection_>
|
||||
<vertCorrection_>-19.788239</vertCorrection_>
|
||||
<distCorrection_>135</distCorrection_>
|
||||
<distCorrectionX_>135</distCorrectionX_>
|
||||
<distCorrectionY_>138</distCorrectionY_>
|
||||
<vertOffsetCorrection_>11.179325</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_48">
|
||||
<id_>47</id_>
|
||||
<rotCorrection_>-5.9566336</rotCorrection_>
|
||||
<vertCorrection_>-19.21587</vertCorrection_>
|
||||
<distCorrection_>98</distCorrection_>
|
||||
<distCorrectionX_>105</distCorrectionX_>
|
||||
<distCorrectionY_>108</distCorrectionY_>
|
||||
<vertOffsetCorrection_>11.249186</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>-2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_49">
|
||||
<id_>48</id_>
|
||||
<rotCorrection_>-1.3779737</rotCorrection_>
|
||||
<vertCorrection_>-15.754419</vertCorrection_>
|
||||
<distCorrection_>116</distCorrection_>
|
||||
<distCorrectionX_>120</distCorrectionX_>
|
||||
<distCorrectionY_>123</distCorrectionY_>
|
||||
<vertOffsetCorrection_>11.662004</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_50">
|
||||
<id_>49</id_>
|
||||
<rotCorrection_>2.0754263</rotCorrection_>
|
||||
<vertCorrection_>-15.166914</vertCorrection_>
|
||||
<distCorrection_>105</distCorrection_>
|
||||
<distCorrectionX_>110</distCorrectionX_>
|
||||
<distCorrectionY_>110</distCorrectionY_>
|
||||
<vertOffsetCorrection_>11.730595</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>-2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_51">
|
||||
<id_>50</id_>
|
||||
<rotCorrection_>-2.5654242</rotCorrection_>
|
||||
<vertCorrection_>-18.828558</vertCorrection_>
|
||||
<distCorrection_>138</distCorrection_>
|
||||
<distCorrectionX_>133</distCorrectionX_>
|
||||
<distCorrectionY_>134.53442</distCorrectionY_>
|
||||
<vertOffsetCorrection_>11.296184</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_52">
|
||||
<id_>51</id_>
|
||||
<rotCorrection_>0.87227631</rotCorrection_>
|
||||
<vertCorrection_>-18.312876</vertCorrection_>
|
||||
<distCorrection_>105</distCorrection_>
|
||||
<distCorrectionX_>110</distCorrectionX_>
|
||||
<distCorrectionY_>111</distCorrectionY_>
|
||||
<vertOffsetCorrection_>11.358424</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>-2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_53">
|
||||
<id_>52</id_>
|
||||
<rotCorrection_>5.2989287</rotCorrection_>
|
||||
<vertCorrection_>-14.641928</vertCorrection_>
|
||||
<distCorrection_>123</distCorrection_>
|
||||
<distCorrectionX_>125</distCorrectionX_>
|
||||
<distCorrectionY_>126</distCorrectionY_>
|
||||
<vertOffsetCorrection_>11.791565</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_54">
|
||||
<id_>53</id_>
|
||||
<rotCorrection_>8.7970304</rotCorrection_>
|
||||
<vertCorrection_>-14.048302</vertCorrection_>
|
||||
<distCorrection_>86</distCorrection_>
|
||||
<distCorrectionX_>90</distCorrectionX_>
|
||||
<distCorrectionY_>95</distCorrectionY_>
|
||||
<vertOffsetCorrection_>11.860156</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>-2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_55">
|
||||
<id_>54</id_>
|
||||
<rotCorrection_>4.1742177</rotCorrection_>
|
||||
<vertCorrection_>-17.687857</vertCorrection_>
|
||||
<distCorrection_>135</distCorrection_>
|
||||
<distCorrectionX_>135</distCorrectionX_>
|
||||
<distCorrectionY_>133.33524</distCorrectionY_>
|
||||
<vertOffsetCorrection_>11.433367</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_56">
|
||||
<id_>55</id_>
|
||||
<rotCorrection_>7.5869775</rotCorrection_>
|
||||
<vertCorrection_>-17.16544</vertCorrection_>
|
||||
<distCorrection_>92</distCorrection_>
|
||||
<distCorrectionX_>98</distCorrectionX_>
|
||||
<distCorrectionY_>100</distCorrectionY_>
|
||||
<vertOffsetCorrection_>11.495607</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>-2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_57">
|
||||
<id_>56</id_>
|
||||
<rotCorrection_>-7.8831077</rotCorrection_>
|
||||
<vertCorrection_>-10.436752</vertCorrection_>
|
||||
<distCorrection_>121</distCorrection_>
|
||||
<distCorrectionX_>126</distCorrectionX_>
|
||||
<distCorrectionY_>128</distCorrectionY_>
|
||||
<vertOffsetCorrection_>12.270433</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_58">
|
||||
<id_>57</id_>
|
||||
<rotCorrection_>-4.5919614</rotCorrection_>
|
||||
<vertCorrection_>-10.085198</vertCorrection_>
|
||||
<distCorrection_>103</distCorrection_>
|
||||
<distCorrectionX_>106</distCorrectionX_>
|
||||
<distCorrectionY_>108</distCorrectionY_>
|
||||
<vertOffsetCorrection_>12.30981</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>-2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_59">
|
||||
<id_>58</id_>
|
||||
<rotCorrection_>-9.1805763</rotCorrection_>
|
||||
<vertCorrection_>-13.484814</vertCorrection_>
|
||||
<distCorrection_>146</distCorrection_>
|
||||
<distCorrectionX_>142</distCorrectionX_>
|
||||
<distCorrectionY_>145</distCorrectionY_>
|
||||
<vertOffsetCorrection_>11.924937</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_60">
|
||||
<id_>59</id_>
|
||||
<rotCorrection_>-5.7835727</rotCorrection_>
|
||||
<vertCorrection_>-13.107666</vertCorrection_>
|
||||
<distCorrection_>99</distCorrection_>
|
||||
<distCorrectionX_>106</distCorrectionX_>
|
||||
<distCorrectionY_>106</distCorrectionY_>
|
||||
<vertOffsetCorrection_>11.968124</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>-2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_61">
|
||||
<id_>60</id_>
|
||||
<rotCorrection_>-1.2335371</rotCorrection_>
|
||||
<vertCorrection_>-9.5621262</vertCorrection_>
|
||||
<distCorrection_>123</distCorrection_>
|
||||
<distCorrectionX_>127</distCorrectionX_>
|
||||
<distCorrectionY_>128</distCorrectionY_>
|
||||
<vertOffsetCorrection_>12.368239</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_62">
|
||||
<id_>61</id_>
|
||||
<rotCorrection_>1.9424959</rotCorrection_>
|
||||
<vertCorrection_>-9.0374413</vertCorrection_>
|
||||
<distCorrection_>106</distCorrection_>
|
||||
<distCorrectionX_>108</distCorrectionX_>
|
||||
<distCorrectionY_>111</distCorrectionY_>
|
||||
<vertOffsetCorrection_>12.426669</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>-2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_63">
|
||||
<id_>62</id_>
|
||||
<rotCorrection_>-2.5727935</rotCorrection_>
|
||||
<vertCorrection_>-12.651329</vertCorrection_>
|
||||
<distCorrection_>134</distCorrection_>
|
||||
<distCorrectionX_>135</distCorrectionX_>
|
||||
<distCorrectionY_>134</distCorrectionY_>
|
||||
<vertOffsetCorrection_>12.020203</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
<item>
|
||||
<px class_id_reference="9" object_id="_64">
|
||||
<id_>63</id_>
|
||||
<rotCorrection_>0.81118912</rotCorrection_>
|
||||
<vertCorrection_>-12.115005</vertCorrection_>
|
||||
<distCorrection_>104</distCorrection_>
|
||||
<distCorrectionX_>107</distCorrectionX_>
|
||||
<distCorrectionY_>112</distCorrectionY_>
|
||||
<vertOffsetCorrection_>12.081173</vertOffsetCorrection_>
|
||||
<horizOffsetCorrection_>-2.5999999</horizOffsetCorrection_>
|
||||
<focalDistance_>0</focalDistance_>
|
||||
<focalSlope_>0</focalSlope_>
|
||||
</px>
|
||||
</item>
|
||||
</points_>
|
||||
</DB>
|
||||
</boost_serialization>
|
||||
@@ -0,0 +1,33 @@
|
||||
<!-- -*- mode: XML -*- -->
|
||||
<!-- rostest of publishing a transformed PointCloud from PCAP data. -->
|
||||
|
||||
<launch>
|
||||
|
||||
<!-- define transforms for static vehicle -->
|
||||
<include file="$(find velodyne_pointcloud)/tests/static_vehicle_tf.launch" />
|
||||
|
||||
<!-- start driver with example PCAP file -->
|
||||
<node pkg="velodyne_driver" type="velodyne_node" name="velodyne_node">
|
||||
<param name="pcap" value="$(find velodyne_pointcloud)/tests/class.pcap"/>
|
||||
</node>
|
||||
|
||||
<!-- start transform node with test calibration file -->
|
||||
<node pkg="velodyne_pointcloud" type="transform_node" name="transform_node">
|
||||
<param name="calibration"
|
||||
value="$(find velodyne_pointcloud)/tests/angles.yaml"/>
|
||||
</node>
|
||||
|
||||
<!-- Verify PointCloud2 publication rate. Unfortunately,
|
||||
transformed clouds run very slowly, they spend too much time
|
||||
waiting for the /velodyne to /map transform to be available.
|
||||
-->
|
||||
<test test-name="transform_node_hz_test" pkg="rostest"
|
||||
type="hztest" name="hztest_transform_node_64e" >
|
||||
<param name="hz" value="10.0" />
|
||||
<param name="hzerror" value="7.0" />
|
||||
<param name="test_duration" value="5.0" />
|
||||
<param name="topic" value="velodyne_points" />
|
||||
<param name="wait_time" value="2.0" />
|
||||
</test>
|
||||
|
||||
</launch>
|
||||
@@ -0,0 +1,33 @@
|
||||
<!-- -*- mode: XML -*- -->
|
||||
<!-- rostest of publishing a transformed PointCloud from PCAP data. -->
|
||||
|
||||
<launch>
|
||||
|
||||
<!-- define transforms for static vehicle -->
|
||||
<include file="$(find velodyne_pointcloud)/tests/static_vehicle_tf.launch" />
|
||||
|
||||
<!-- start nodelet manager and driver nodelets -->
|
||||
<include file="$(find velodyne_driver)/launch/nodelet_manager.launch">
|
||||
<arg name="pcap" value="$(find velodyne_pointcloud)/tests/class.pcap"/>
|
||||
</include>
|
||||
|
||||
<!-- start transform nodelet -->
|
||||
<include file="$(find velodyne_pointcloud)/launch/transform_nodelet.launch">
|
||||
<arg name="calibration"
|
||||
value="$(find velodyne_pointcloud)/params/64e_utexas.yaml"/>
|
||||
</include>
|
||||
|
||||
<!-- Verify PointCloud2 publication rate. Unfortunately,
|
||||
transformed clouds run very slowly, they spend too much time
|
||||
waiting for the /velodyne to /map transform to be available.
|
||||
-->
|
||||
<test test-name="transform_nodelet_hz_test" pkg="rostest"
|
||||
type="hztest" name="hztest_transform_nodelet_64e" >
|
||||
<param name="hz" value="10.0" />
|
||||
<param name="hzerror" value="7.0" />
|
||||
<param name="test_duration" value="5.0" />
|
||||
<param name="topic" value="velodyne_points" />
|
||||
<param name="wait_time" value="2.0" />
|
||||
</test>
|
||||
|
||||
</launch>
|
||||
@@ -0,0 +1,48 @@
|
||||
<!-- -*- mode: XML -*- -->
|
||||
<!-- rostest of publishing using two different nodelet managers. -->
|
||||
|
||||
<launch>
|
||||
|
||||
<!-- use separate namespaces for each device and its nodelet manager -->
|
||||
|
||||
<group ns="hdl32e">
|
||||
|
||||
<!-- start nodelet manager, driver and cloud nodelets -->
|
||||
<include file="$(find velodyne_pointcloud)/launch/32e_points.launch">
|
||||
<arg name="frame_id" value="hdl32e"/>
|
||||
<arg name="pcap" value="$(find velodyne_pointcloud)/tests/32e.pcap"/>
|
||||
</include>
|
||||
|
||||
<!-- verify PointCloud2 publication rate -->
|
||||
<test test-name="multi_nodelet_32e_test" pkg="rostest"
|
||||
type="hztest" name="hztest_multi_nodelet_32e" >
|
||||
<param name="hz" value="10.0" />
|
||||
<param name="hzerror" value="3.0" />
|
||||
<param name="test_duration" value="5.0" />
|
||||
<param name="topic" value="/hdl32e/velodyne_points" />
|
||||
<param name="wait_time" value="2.0" />
|
||||
</test>
|
||||
|
||||
</group>
|
||||
|
||||
<group ns="vlp16">
|
||||
|
||||
<!-- start nodelet manager, driver and cloud nodelets -->
|
||||
<include file="$(find velodyne_pointcloud)/launch/VLP16_points.launch">
|
||||
<arg name="frame_id" value="vlp16"/>
|
||||
<arg name="pcap" value="$(find velodyne_pointcloud)/tests/vlp16.pcap"/>
|
||||
</include>
|
||||
|
||||
<!-- verify PointCloud2 publication rate -->
|
||||
<test test-name="multi_nodelet_vlp16_test" pkg="rostest"
|
||||
type="hztest" name="hztest_multi_nodelet_vlp16" >
|
||||
<param name="hz" value="10.0" />
|
||||
<param name="hzerror" value="3.0" />
|
||||
<param name="test_duration" value="5.0" />
|
||||
<param name="topic" value="/vlp16/velodyne_points" />
|
||||
<param name="wait_time" value="2.0" />
|
||||
</test>
|
||||
|
||||
</group>
|
||||
|
||||
</launch>
|
||||
Reference in New Issue
Block a user