Ask Your Question

Revision history [back]

If I understand you correctly, your problem is this:

  • robot_state_publisher reads your URDF and publishes the TF transform base_linkpico_de_gallo.
  • the ROS driver you are using (royale_in_ros) publishes the sensor data in the frame_id royale_camera_optical_frame.
  • You don't know how to link the two.

First of all, I wouldn't recommend using royale_in_ros. It's just a code sample that is shipped with the libroyale (i.e., the SDK for accessing the pico flexx cameras). Among other things, it has the limitation that you cannot change the frame_id in which the sensor data is published, so you cannot use two different pico flexx cameras at the same time.

Instead, I would recommend using the pico_flexx_driver (full disclosure: I am a maintainer). Look at the README for all parameters. The pico_flexx_driver has a parameter called base_name_tf, which is by default pico_flexx. The sensor data is published in the $base_name_tf + "_optical_frame", so by default "pico_flexx_optical_frame". If the launch file arg publish_tf is true, the launch file also publishes TFs for $base_name_tf + "_link"$base_name_tf + "_optical_frame".

So what you could do is:

  • Change your URDF so that the published TF transform is base_linkpico_de_gallo_link.
  • Launch the pico_flexx_driver with publish_tf = true and base_name = pico_de_gallo: It will publish the TF transform pico_de_gallo_linkpico_de_gallo_optical_frame, and all sensor data in pico_de_gallo_optical_frame.

Alternatively:

  • Change your URDF so that the published TF transform is base_linkpico_de_gallo_optical_frame.
  • Launch the pico_flexx_driver with publish_tf = false and base_name = pico_de_gallo: It will not publish TF transforms, and all sensor data in pico_de_gallo_optical_frame.

The important point is that in both cases, all TF transforms together form a tree from base_link to the frame that your sensor data is published in.

One more hint: When you want to run two pico_flexx cameras, you must start two nodelets, in the same nodelet manager (so that both end up in the same process). See end of the README. So you'll probably want to copy the launch file from pico_flexx_driver and modify it.

If I understand you correctly, your problem is this:

  • robot_state_publisher reads your URDF and publishes the TF transform base_linkpico_de_gallo.
  • the ROS driver you are using (royale_in_ros) publishes the sensor data in the frame_id royale_camera_optical_frame.
  • You don't know how to link the two.

First of all, I wouldn't recommend using royale_in_ros. It's just a code sample that is shipped with the libroyale (i.e., the SDK for accessing the pico flexx cameras). Among other things, it has the limitation that you cannot change the frame_id in which the sensor data is published, so you cannot use two different pico flexx cameras at the same time.

Instead, I would recommend using the pico_flexx_driver (full disclosure: I am a maintainer). Look at the README for all parameters. The pico_flexx_driver has a parameter called base_name_tf, which is by default pico_flexx. The sensor data is published in the $base_name_tf + "_optical_frame", so by default "pico_flexx_optical_frame". If the launch file arg publish_tf is true, the launch file also publishes TFs for $base_name_tf + "_link"$base_name_tf + "_optical_frame".

So what you could do is:

  • Change your URDF so that the published TF transform is base_linkpico_de_gallo_link.
  • Launch the pico_flexx_driver with publish_tf = true and base_name = pico_de_gallo: It will publish the TF transform pico_de_gallo_linkpico_de_gallo_optical_frame, and all sensor data in pico_de_gallo_optical_frame.

Alternatively:

  • Change your URDF so that the published TF transform is base_linkpico_de_gallo_optical_frame.
  • Launch the pico_flexx_driver with publish_tf = false and base_name = pico_de_gallo: It will not publish TF transforms, and all sensor data in pico_de_gallo_optical_frame.

The important point is that in both cases, all TF transforms together form a tree from base_link to the frame that your sensor data is published in.

One more hint: When you want to run two pico_flexx cameras, you must start two nodelets, in the same nodelet manager (so that both end up in the same process). See end of the README. So you'll probably want to copy the launch file from pico_flexx_driver and modify it.


Edit in response to your compilation problems:

Your pico_flexx_driver directory should look like this:

pico_flexx_driver
├── cfg
│   └── pico_flexx_driver.cfg
├── cmake
│   ├── findPicoFlexxSDK.py
│   └── Findroyale.cmake
├── CMakeLists.txt
├── launch
│   └── pico_flexx_driver.launch
├── LICENSE
├── nodelet_plugins.xml
├── package.xml
├── README.md
├── royale
│   └── libroyale-3.17.0.56-LINUX-x86-64Bit
│       ├── API_Documentation.html
│       ├── bin
│       ├── CHANGELOG.txt
│       ├── cypress_license.txt
│       ├── doc
│       ├── driver
│       ├── Getting_Started_CamBoard_pico_flexx.pdf
│       ├── Getting_Started_CamBoard_pico_maxx.pdf
│       ├── Getting_Started_CamBoard_pico_monstar.pdf
│       ├── gpl-3.0.txt
│       ├── gradle-wrapper_license.txt
│       ├── include
│       ├── jquery_license.txt
│       ├── kissfft_license.txt
│       ├── lgpl-2.1.txt
│       ├── lgpl-3.0.txt
│       ├── matlab
│       ├── packedarray_license.txt
│       ├── README.md
│       ├── royale_license.txt
│       ├── RoyaleViewer.pdf
│       ├── samples
│       ├── share
│       └── sizzle_license.txt
└── src
    └── pico_flexx_driver.cpp