A (partial) list of bug fixed and issues resolved in this release can be found here.
Imageovrheadset device driver was moved to https://github.com/robotology/yarp-device-ovrheadsetrealsense2, realsense2withIMU and realsense2Tracking device drivers were moved to https://github.com/robotology/yarp-device-realsense2YARP_CONFIG_DIRS defaults to /etc/xdg/yarp to be compliant with the XDG Base Directory SpecificationYARP_DATA_DIRS defaults to %ALLUSERSPROFILE%%\yarpYARP_CONFIG_DIRS defaults to %ALLUSERSPROFILE%%\yarp\configfilesystem::path_separator is deprecated in favour of environment::path_separatoryarp::conf::environment::getEnvironment is deprecated in favour of yarp::conf::environment::get_stringyarp::conf::environment::setEnvironment is deprecated in favour of yarp::conf::environment::set_stringyarp::conf::environment::unsetEnvironment is deprecated in favour of yarp::conf::environment::unsetYARP_DEPRECATED_API and YARP_DEPRECATED_API_MSG defines are now deprecated in favour of YARP_DEPRECATED_EXPORT, YARP_DEPRECATED_IMPORT, YARP_DEPRECATED_MSG_EXPORT, and YARP_DEPRECATED_MSG_IMPORT.BottleBOTTLE_TAG_INT is deprecated in favour of BOTTLE_TAG_INT32BOTTLE_TAG_DOUBLE is deprecated in favour of BOTTLE_TAG_FLOAT64BOTTLE_TAG_VOCAB is deprecated in favour of BOTTLE_TAG_VOCAB32addInt is deprecated in favour of addInt32addDouble is deprecated in favour of addFloat64yarp::os::Bottle::addVocab() is deprecated in favour of yarp::os::Bottle::addVocab32()ConnectionReaderexpectInt is deprecated in favour of expectInt32expectDouble is deprecated in favour of expectFloat64ConnectionWriterappendInt is deprecated in favour of appendInt32appendDouble is deprecated in favour of appendFloat64LogStreamoperator<< for std::ostream and std::vector which caused conflicts with Casadi was removed (#2067).NetTypetoHexString is deprecated in favour of yarp::conf::numeric::to_hex_stringtoString is deprecated in favour of yarp::conf::numeric::to_stringtoInt, toFloat32 and toFloat64 are deprecated in favour of yarp::conf::numeric::from_stringResourceFinderyarp::conf::dirs. The following methods are now deprecated:yarp::os::ResourceFinder::getDataHome()yarp::os::ResourceFinder::getDataHomeNoCreate()yarp::os::ResourceFinder::getConfigHome()yarp::os::ResourceFinder::getConfigHomeNoCreate()yarp::os::ResourceFinder::getDataDirs()yarp::os::ResourceFinder::getConfigDirs() in favour of:yarp::conf::dirs::yarpdatahome()yarp::conf::dirs::yarpconfighome()yarp::conf::dirs::yarpdatadirs() Warnings:yarpdatadirs() is different (std::vector<std::string> instead of std::string).yarpdatahome() and yarpconfighome() do not create the directory, it must be created manually (for example with yarp::os::mkdir_p()) if required.StampHeader instead of Stamp is now recommended.ValueisInt() is deprecated in favour of isInt32()isDouble() is deprecated in favour of isFloat64()asInt() is deprecated in favour of asInt32()asDouble() is deprecated in favour of asFloat64()makeInt() is deprecated in favour of makeInt32()makeDouble() is deprecated in favour of makeFloat64()isVocab() is deprecated in favour of isVocab32()asVocab() is deprecated in favour of asVocab32()makeVocab() is deprecated in favour of makeVocab32()Vocabyarp::os::createVocab() is deprecated in favour of yarp::os::createVocab32()yarp::os::Vocab::encode() is deprecated in favour of yarp::os::Vocab32::encode()yarp::os::Vocab::decode() is deprecated in favour of yarp::os::Vocab32::decode()WireReadergetIsVocab() is deprecated in favour of getIsVocab32()readVocab() is now deprecated in favour of readVocab32()WireWriterwriteVocab() is now deprecated in favour of writeVocab32()IntrinsicParamsYARP_PLUM_BOB is deprecated in favour of YARP_PLUMB_BOB.yarp/dev/FrameGrabberControl2.h header file was properly marked as deprecated (it should have been deprecated in YARP 3.0)yarp/dev/FrameGrabberInterfaces.h header file was deprecated. All interfaces were moved in the corresponding header.framegrabber_protocol library were removed. This is an API break, but nobody should be using these outside of YARP.VOCAB_NAV_CLEAR_X, defined in file ILocalization2D.h has been renamed to VOCAB_NAV_CLEARALL_X to avoid confusion with flag VOCAB_NAV_DELETE_X. VOCAB_NAV_CLEARALL_X clears all data belonging to the same category (all maps, all locations, all areas, etc), while VOCAB_NAV_DELETE_X, deletes a single entity (a map with name x, a location with name x etc).IVisualParams.h file was deprecated in favour of IRgbVisualParams.h and IDepthVisualParams.IFrameGrabber and IFrameGrabberRgb are now deprecated.IDepthVisualParamsretificationMatrix parameter was renamed rectificationMatrixIRgbVisualParamsretificationMatrix parameter was renamed rectificationMatrixrobotinterface library is no longer considered experimental, all files in the experimental folder and classes in the experimental namespace are now deprecated and will be removed in the next release.depthimage_compression_zfp (zfp)depthimage_to_mono (depthimage)depthimage_to_rgb (depthimage2)segmentationimage_to_rgb (segmentationimage)test_grabber in favour of fakeFrameGrabberfakeMotor in favour of fakeMotionControltest_motor in favour of fakeMotionControlfakebotcontrolboardwrapper2 (replaced by controlboardremapper + controlBoard_nws_yarp)RGBDSensorWrapper (replaced by rgbdSensor_nws_yarp)Rangefinder2DWrapper (replaced by rangefinder2D_nws_yarp)grabberDual (replaced by frameGrabber_nws_yarp, and eventually frameGrabberCropper)inertial (replaced by multipleanalogsensorsremapper + multipleanalogsensorsserver + IMURosPublisher)localization2DServer (replaced by localization2D_nws_yarp)map2DServer (replaced by map2D_nws_yarp)transformClient (replaced by frameTransformClient)transformServer (replaced by frameTransformServer)<yarp/conf/numeric.h>:
<yarp/conf/string.h> containing the following functions:
environment::path_separator<yarp/conf/environment.h>:yarp::conf::environment::get_stringyarp::conf::environment::set_stringyarp::conf::environment::get_boolyarp::conf::environment::set_boolyarp::conf::environment::get_numericyarp::conf::environment::set_numericyarp::conf::environment::split_pathyarp::conf::environment::join_pathyarp::conf::environment::get_pathyarp::conf::environment::set_pathyarp::conf::environment::unsetyarp::conf::environment::is_setdirs.h file with methods to retrieve the important foldersstd::string yarp::conf::dirs::home()std::string yarp::conf::dirs::tempdir()std::string yarp::conf::dirs::datahome()std::vector<std::string> yarp::conf::dirs::datadirs()std::string yarp::conf::dirs::confighome()std::vector<std::string> yarp::conf::dirs::configdirs()std::string yarp::conf::dirs::cachehome()std::string yarp::conf::dirs::runtimedir()std::string yarp::conf::dirs::yarpdatahome()std::vector<std::string> yarp::conf::dirs::yarpdatadirs()std::string yarp::conf::dirs::yarpconfighome()std::vector<std::string> yarp::conf::dirs::yarpconfigdirs()std::string yarp::conf::dirs::yarpcachehome()std::string yarp::conf::dirs::yarpruntimedir()yarp::os::Header class, intended to gradually replace the yarp::os::Stamp class to handle envelopes, maintaining backwards compatibility. The differences with the Stamp class:Header has an extra field to handle the frame id, making it comparable with ROS std_msgs/Header message.Stamp::getMaxCount() is replaced with Header::nposStamp::getCount() is replaced with Header::count()Stamp::getTime() is replaced with Header::timeStamp()BOTTLE_TAG_VOCAB32 tag. This is the same as BOTTLE_TAG_VOCAB.BOTTLE_TAG_VOCAB is not recommended in new code, use BOTTLE_TAG_VOCAB32 instead.addVocab32() overloads accepting 4 chars and string.DummyConnectorgetReader methods now accepts a ConnectionWriter as optional parameter. This writer is returned by getWriter is called on the ConnectionReader returned by the writer, and it is therefore used for the replies in Portables and in a few other cases.LogYARP_FORWARD_CODEINFO_ENABLE, YARP_FORWARD_HOSTNAME_ENABLE, YARP_FORWARD_PROCESSINFO_ENABLE, and YARP_FORWARD_BACKTRACE_ENABLE are no longer considered experimental.PeriodicThreadclockAccuracy, which enables drift compensation using an absolute time reference to ensure all steps trigger at precise intervals, thus avoiding error accumulation over time. Set it to PeriodicThreadClock::Absolute to enable the new behavior, default is PeriodicThreadClock::Relative (old behavior). Beware that, in absolute mode, starvation may occur if two busy threads share a common resource (#2488).PeriodicThread(double period, PeriodicThreadClock clockAccuracy).Property.ini configuration files can now contain the command [import <contextname> <filename>] which includes a .ini file from a different context.ValuemakeVocab32() overload accepting 4 charsWireyarp() const overloadWireLinkWireReaderreadVocab32readUI8readUI16readUI32readUI64readSizeTWireWriterwriteVocab32writeUI8writeUI16writeUI32writeUI64writeSizeTaddVocab32() overloads accepting 4 chars and stringfileyarp::sig::file::read_bytestream(Sound& data, const char* bytestream, size_t streamsize, std::string format)utilsdepthRgbToPC to make the pointcloud unorganized and remove zero points.Imagemove() and swap() methods.Soundvoid amplifyChannel(size_t channel, double gain)void amplify(double gain)void findPeakInChannel(size_t channelId, size_t& sampleId, audio_sample& sampleValue) constvoid findPeak(size_t& channelId, size_t& sampleId, audio_sample& sampleValue) constvoid normalizeChannel(size_t channel)void normalize()utilscropRect() helper function for cropping a rectangle area out of an image given two opposite vertices.WrapperSingle and WrapperMultiple helper classes, that inherit from both IWrapper and IMultipleWrapper but require to implement only one of these interfaces.IFrameGrabberOf<typename ImageType>. It is now possible to implement the same interface as for IFrameGrabberImage and IFrameGrabberImageRaw, but for different pixel types or for FlexImage.yarp::dev::AudioRecorderStatusyarp::dev::AudioPlayerStatusAudioPlayerDeviceBase, all playback device drivers now inherit from this class.AudioRecorerDeviceBase, all recording device drivers now inherit from this class.IFrameGrabberImagegetImageCrop method has now a working default implementation.IFrameGrabberImage interface is now an alias for IFrameGrabberOf<yarp::sig::ImageOf<yarp::sig::PixelRgb>>.IFrameGrabberImageRawgetImageCrop method has now a working default implementation.IFrameGrabberImageRaw interface is now an alias for IFrameGrabberOf<yarp::sig::ImageOf<yarp::sig::PixelMono>>.IAudioRenderbool setHWGain(double gain)bool setSWGain(double gain)IAudioGrabberSoundbool setHWGain(double gain)bool setSWGain(double gain)Lidar2DDeviceBaseLidar2DDeviceBase class, now implements yarp::dev::IPreciselyTimed.acquireDataFromHW() which is pure virtual in Lidar2DDeviceBaseLidar2DDeviceBase::updateLidarData, which calls acquireDataFromHW() and a few other utility functions (e.g. updateTimestamp(), etc.)updateLidarData().Nav2D::IMap2Dbool clearAllMapsTemporaryFlags()bool clearMapTemporaryFlags(std::string map_name)bool saveLocationsAndExtras(std::string locations_collection_file)bool loadLocationsAndExtras(std::string locations_collection_file)Nav2D::MapGrid2Dvoid clearMapTemporaryFlags()write() and read() methods handle the compression before sending data to the network.enable_map_compression_over_network() to enables/disables data compression over the network (default true). Compression is always disabled if Zlib library is not available.Nav2D::Map2DLocationbool is_near_to(const Map2DLocation& other_loc, double linear_tolerance, double angular_tolerance) constIt is now possible to pass the device parameter to the attach action, without defining network or networks. For example:
XMLReadergetRobotFromFile and getRobotFromString now accept a Searchable that is used to replace params with the attribute extern-name. The signatures are now: unix_stream carrier is no longer considered experimental.yarppm library (similar to yarpcar and yarpmod) that links all the portmonitors in static builds.image_compression_ffmpeg port monitor to compress a video stream using the H264, H265, or MPEG2VIDEO codec.sound_compression_mp3 port monitor to decompress a mp3 bytestream to yarp::sig::Sound. Encoding not supported yet.depthimage_compression_zlib port monitor which uses the Zlib library to compress/decompress (lossless) depth images through the network.setHWGain() and setSWGain().xxx/status:o portsetHWGain() and setSWGain().xxx/status:o port--timestamp option to write the timestamp in the first bytes of the image. This was previously automatically enabled in line mode, but it can now be used in all modes.getImage() method no longer blocks the caller. The --syncro option was added to restore the old behavior.topIsLow option and the set_topIsLow rpc command were added to produce images with bottom to top scanlines.--noise options and set_noise RPC commands to add a a white noise to the generated image.--snr option and set_snr RPC commands. to specify the signal noise ratio if noise is enabled.map_context parameter to load a test map from a specific context.generate_view which generates via dot (graphviz) a pdf file, containing a diagram of the transforms tree.enable_maps_compression <0/1> RPC command.getNameOfCurrentTarget() logic moved from Navigation2DClient to navigation2DServer.yarpdataplayer-console tool that works without without a graphic server.read subcommand now accepts the trim argument to reduce the number of characters printed for each message received.yarp latency-test: performs a latency test exchanging data between a server and a client node.yarp repeat: repeats in an output port all data received in an input port. The command is useful to control stream flows on a wifi/mobile connection.yarp stats: opens a temporary port to receive data from a remote port (at maximum speed). It also prints basic statistics about data trasferred on the instantiated connection.yarp trafficgen: sends generated data over a yarp port. The tool allows to test the communication and the available bandwidth over the network.--type parameter are now supported:bottle (default)imageimage_jpgimage_pngvideodepthdepth_compressedextern-name.uint8_t, uint16_t, uint32_t, uint64_t, size_t, float32_t and float64_t using annotated types. It is now possible to use these types in thrift by defining them using a typedef, for example: Bar struct will be serialized as bar1 (foo1 foo2), instead of as a flat struct bar1 foo1 foo2.yarp.qualifier annotation. For example, this code: Foo with this method: --rightout <portname> option that enables intercepting the mouse right button click events:press point and of the release one to the specified output port)Image/Intercept right click checkable menu item to enable/disable the right click interception (not available in minimal or compact mode or if the --rightout option was not enabled).depth and depth_compressed data types.yarpdataplayer tool was refactored, several bugs fixed, and new features added (#1144, #2140, #2151, #2400, #2401, #2442).std::vector<short int>.yarp::sig::VectorOf<int>.yarp::sig::Soundsound2VecNonInterleaved()vecNonInterleaved2Sound()sound2VecInterleaved()vecInterleaved2Sound()EXPERIMENTAL means that the software is under development, provided with incomplete documentation and it may be modified/renamed/removed without any notice.
websocket carrier. It works only on the receiving side, and it works on an http request that starts with "GET /?ws" (for example 'http://127.0.0.1:10002/?ws' or 'ws://127.0.0.1:10002/?ws' if a read port is opened by yarp). The websocket, on the browser side, needs to communicate using the YARP protocol.RGBDFromRosTopic: it can be wrapped by RGBDSSensorWrapper to make RGBD data, collected by a ROS device, available on YARP via RGBDSensorClient.map2DStorage: store navigation data, e.g MapGrid2D,Map2DLocation etc. It implements all the logic previously located inside device 'Map2DServer'.audioFromFileDevice: wrapped by audioRecorderWrapper.audioToFileDevice: wrapped by audioPlayerWrapper.frameGrabberCropper: attaches to a frameGrabber and published part of the imageframeTransformStorageframeTransformSetMultiplexerframeTransformGetMultiplexercontrolBoard_nws_ros: ROS NWS that can be used to replace controlboardwrapper2 (does not handle networks, use controlboardremapper for that). It requires that the yarp::dev::IAxisInfo is implemented in the device.controlBoard_nws_yarp: YARP NWS that can be used to replace controlboardwrapper2 (does not handle networks, use controlboardremapper for that).frameGrabber_nws_ros: ROS NWS that can be used to replace grabberDual (does not handle image split, use frameGrabberCropper for that)frameGrabber_nws_yarp: YARP NWS that can be used to replace grabberDual (does not handle image split, use frameGrabberCropper for that)frameGrabber_nwc_yarp: YARP NWC that can be used to replace remote_grabberlocalization2D_nws_ros: ROS NWS for devices which implement the ILocalization2D interface, that can be used to replace localization2DServer.localization2D_nws_yarp: YARP NWS for devices which implement the ILocalization2D interface, that can be used to replace localization2DServer.map2D_nws_ros: ROS NWS for a map2DStorage device.map2D_nws_yarp: YARP NWS for a map2DStorage device.rangefinder2D_nws_ros: ROS NWS for devices exposing IRangefinder2D interface.rangefinder2D_nws_yarp: YARP NWS for devices exposing IRangefinder2D interface.rgbdSensor_nws_ros: ROS NWS to replace RGBDSensorWrapper.rgbdSensor_nws_yarp: YARP NWS to replace RGBDSensorWrapper.rgbdToPointCloudSensor_nws_ros: enables point cloud publication from yarp to ros. It converts RGBD data to point cloud and publishes it on a ros topic.frameTransformGet_nws_rosframeTransformGet_nws_yarpframeTransformSet_nws_rosframeTransformSet_nws_yarp All these interfaces have the following differences with their original wrappers:nws_ros devices no longer have the "ROS_" prefix".frameTransformClient and frameTransformServer. These devices are mostly empty containers for multiple plugins that can be combined together through a yarprobotinterface xml file. Different configuration files can be used for different purposes, such as publishing/subscribing transforms on YARP, ROS, ROS2 etc. Please refer to the documentation for additional details. Old devices with frame transform management functionality are called transformServer and transformClient. These devices should be now considered deprecated and they must be not confused with the new devices included in this PR. A yarp page documentation has been added to show the different possible configurations.laserFromRosTopic is still considered EXPERIMENTAL, since it will be replaced by an appropriate NWCpip. A new yarp-middleware package is now distributed in PyPI.ImagetopIsLow flag is now properly handled, kept in sync with the internal IplImage, and forwarded through the network.ImageFileSavePNG() producing corrupted output files.topIsLow flag is no longer changed.This is a list of people that contributed to this release (generated from the git history using git shortlog -ens --no-merges v3.4.0..v3.5.0):