Is there a way to publish normals of a given point cloud in ROS?
Hello everyone.
I subscribe to my camera, I get the point cloud, I convert the point cloud from ROStopcl and finally I use the function makeNormalEstimation() of pythonpcl to get the normals. So far so good! Now I want to publish somehow these normals to a ROS topic and by publishing i mean visualizing them also in RVIZ. The pythonpcl function makeNormalEstimation() returns 4 values in the form of a vector. The 3 first values are normalx, normaly, normalz and he 4th value is the curvature. I want to publish and visualize the normals in RVIZ through PoseStamed messages. As far as i know a PoseStamped message needs a Pose and a Quaternion. For the Pose field i use the x, y, z of the desired point in my point cloud i want to find the normal. But when it comes for the quaternion i don't know what to use! I tried to use the returned values as they were quaternionx, quaterniony, quaernionz, quaternion_w but the results where not so good...
So. my questions are:
- How can i use the returned values of make_NormalEstimation() to create a PoseStamed message?
- Is there a way to transform the returned values into quaternion?
- Am i missing something about the returned values?
- Is there another way of finding and using normals in ROS?
- How can i generate and publish a normal in ROS? Not only it's normalx, normaly, normal_z values but also it's orientation.
- Do i have to publish both it's normalx, normaly, normalz and orientation or just it's normalx, normaly, normalz values? And if so how will a robot know the orientation it needs to approach a point of interest?
Sorry for the chaos in my questions! I really hope they make sense!
Thanks in advance!
Asked by mitselis on 2021-11-11 06:57:39 UTC
Comments
Take a look at this prior question: https://answers.ros.org/question/358324/ros-pclpointcloudpclpointnormal-publishment/
The code is in C++ though
Asked by osilva on 2021-11-12 11:03:14 UTC
Thank you for your answer and sorry for my delay. Your answer was very helpful but i have some more questions so i edited my post.
Asked by mitselis on 2021-11-15 03:39:33 UTC
you could also publish the normals as
visualization_msgs::MarkerArray
msg with each marker(normal) being an arrow.Asked by xibeisiber on 2021-11-15 08:37:28 UTC