* clever.launch: Add node name to output format
* selfcheck: Use new log format
* aruco_pose, clever: Remove node names from messages
* aruco_pose, clever: Use nodelet-aware rosconsole macros
* clever.launch: Use logger name instead of node name
* clever.launch: change rosconsole format a little
* aruco_pose: use pytest
* Use ros_pytest
* Add ros_pytest to rosdep
* aruco_pose: compare floats more roughly in pytest
* aruco_pose: rewrite all the rest tests in pytest
There are cases when iterative solvePnP method converges on a "wrong" camera position due to projectPoints not treating negative Z values properly.
Other methods don't seem to be affected by that, but their results differ from the iterative method slightly. By combining these two methods we
"nudge" the iterative method towards the correct camera position and get satisfactory results most of the time.
Sometimes, though, even with the "nudge" the iterative method diverges catastrophically, and this is not caught by the solver. We work around that
by assuming our camera position cannot be too far from the markers.
* aruco_map: Improve parser
* aruco_map: Use marker id for map visualization
* aruco_pose: Add parser pass test
* aruco_map: Code style
* aruco_pose: Add more test cases
* aruco_map: Better message handling
* aruco_map: Be more informative about bad lines
* aruco_map: Add failure mode tests
* aruco_map: Be less strict about map contents
* aruco_pose: Restructure tests
* aruco_map: Don't use marker id in visualization
* aruco_map: Check for marker uniqueness
* aruco_pose: Use board data to reject duplicate markers
* aruco_pose/test: Spelling fixes
`cv::aruco::drawAxis` would attempt to draw detected frame origin even when it's behind the camera. This resulted in an invalid, flipped frame displayed in `/aruco_map/debug`.
This commit prevents drawing frame axis if the frame origin (projected to the screen space) is behind the screen plane.