Frequently Asked Questions (real ones, not made up)

About the simulator

How many Cycabs can I simulate using the package Cycabtk?

As many as your computer can handle. All objects are simply defined by their 3D structure and their behaviour (a C++ file), and a Cycab is one like the other. The only object that maybe you will have trouble creating many of them is the Sick simulator, because it takes a lot of computation time if your graphic card does not handle FBO (Frame Buffer Object).

Does the 3D simulator integrate any ODE like system?

The 3D simulator proposed in Cycabtk package is based on mgengine. No dynamics engine like ODE is supported by the simulator. But the collisions are detected by mgengine and both dynamics and robot models are handled through the mgengine plug-in dedicated to the robot simulation.

The use of ODE engine has been considered once but because of negative feedbacks concerning its lack of precision, problems on stability and lack of realistic considerations, we prefer to do without. Instead ad-hoc dynamic and cinematic models are implemented and used.

Is the simulation real-time?

It depends on what you mean by “real-time”!.

If you mean does the simulation takes into account the same temporal constraints as on the real mobile robot, ie the control is performed every 10 ms (for instance)?, then the answer is yes. The sensors data also are retrieved at the same rate as for the real sensors.

But it depends also on the CPU of your computer but mgEngine has been designed to run correctly on old architectures such as Pentium II.

Can I create a new 3D scene instead of the INRIA car park?

Yes. A script is proposed to convert a Blender model on a model which format can be used with mgEngine. For more information about that, visit this page.

Blender is the open source software for 3D modeling, animation, rendering, post-production, interactive creation and playback. Available for all major operating systems under the GNU General Public License.

The simulation has a low frame rate

The most common causes are theses one :

  • You're using the software-rendering sick simulator. If you have a graphic card that does not handle FBO (Frame Buffer Object), you cannot do anything except changing it. If you have a decent card, check your card drivers (e.g. by running the glxinfo command).
  • You don't have the right drivers for your graphic card. Try :
    glxinfo | grep rendering

    You should see :


If not, you don't have the right drivers.

Runtime Errors

Unable to connect to store shared memory segment

If you get the error :
terminate called after throwing an instance of std::runtime_error what(): Unable to connect to store shared memory segment

Check if you launched the store by typing :
hugrstore &

Unable to allocate memory: out of shared memory

If you get the error :
terminate called after throwing an instance of std::runtime_error what(): Unable to allocate memory: out of shared memory

One of the simulated object is trying to share a big amount of data, like an iplImage for the camera simulator. You need to relaunch the hugrstore with the –size option (in bytes). Try giving the store 10Mb (note : on linux system the maximum shared memory size cat be consulted and modified in the /proc/sys/kernel/shmmax file).

About the Hugr Log files

Hugr log file structure

The hugr log file are binary files created using boost::archive::binary_oarchive API.

They are used to log the values of the variables contained within the hugr shared memory. Each logged variable is timestamped according to the date it has been created or updated in the hugr memory.

The hugr log file is structured as such :

string_that_gives_information_about_the_log or empty_string
timestamp Variable0_IdName Variable0_Size Variable0_Data
timestamp Variable1_IdName Variable1_Size Variable1_Data

Hugr log big data

If you need to log hugr variables such video images (IplImage) or a sequence of different hugr variables you may need to speed up the log process. To do so you can use the ramdisk to put your log files instead of a simple file.

To use the ramdisk, follow these steps :

mkdir /mnt/ramfs
mount -t ramfs none /mnt/ramfs -o maxsize=100000
chmod a+rwx /mnt/ramfs

And then use command hugrlog as such (to log for instance cycab_state, GPS, sick laser data and sick laser configuration variables):

hugrlog -o /mnt/ramfs/log cycab_state Donnees_GPS sickLMS291 LMS291Conf
deprecated/faq.txt · Last modified: 2013/02/04 18:28 by arias
Recent changes RSS feed Creative Commons License Donate Minima Template by Wikidesign Driven by DokuWiki