From: Toby C. <tco...@pl...> - 2007-08-21 18:18:46
|
Hi, All the interface definitions that were in player.h are now in individual interface files, but basically you can edit them as before and do a make as before. The generated interface definitions are in player_interfaces.h This was announced on the -developers list, if you are working with CVS I would recommend subscribing to both. also there is an adding_interfaces file in the interfaces folder, this has some basic documentation. I figured it was better to have the documentation close to the place you would be adding the interfaces, but maybe I figured wrong, feel free to add the info to the wiki... Toby P.S. I have started looking at finally getting rid of all the fixed size arrays in player.h, this will allow as many points as you want (up to about 8MB at the moment, but that could possibly be increased). so if you are able to live for a couple of weeks then it may no longer be an issue, We could also look at zlib compression on large message bodies at some stage as part of the underlying protocol (its already supported for the map interface I think, we could just generalise it) Stefan Stiene wrote: > Another needed value is the total number of points per scan. So that you > can determine on client side if a scan is complete or if there are still > messages missing for that scan. > Best Stefan > > Stefan Stiene schrieb: > >> I did an cvs update. >> Now the player.h is really short and the interface definitions are in a >> folder called interfaces. And there is a playerinterfacegen.py. I'm not >> sure what exactly I have to do. (Someone should write a "add new >> interface" wiki page). The second "Problem" is, that I'm on holiday for >> the next to weeks. However there are so small changes that I put them >> in here. I tested it with pv3d: >> http://www.informatik.uni-osnabrueck.de/sstiene/bilder/cloud.gif is a >> picture with 87000 points. >> >> Best Stefan >> >> In the interface definition formerly in player.h: >> >> /** @brief Data: Get cloud (@ref >> PLAYER_POINTCLOUD3D_DATA_STATE) >> The basic 3dcloudpoint data packet. */ >> typedef struct player_pointcloud3d_data >> { >> >> +++ player_pose3d_t pose; >> +++ uint32_t scanNr; >> >> uint32_t points_count; >> player_pointcloud3d_element_t points[PLAYER_POINTCLOUD3D_MAX_POINTS]; >> } player_pointcloud3d_data_t; >> >> In the client lib >> >> playerc.h: >> >> ** @brief pointcloud3d proxy data. */ >> typedef struct >> { >> /** Device info; must be at the start of all device structures. */ >> playerc_device_t info; >> >> /** The number of 3D pointcloud elementS found. */ >> uint16_t points_count; >> +++ /** The scan pose */ >> +++ player_pose3d_t pose; >> +++ /** The scan Nr */ >> +++ uint32_t scanNr >> /** The list of 3D pointcloud elements. */ >> playerc_pointcloud3d_element_t points[PLAYERC_POINTCLOUD3D_MAX_POINTS]; >> } playerc_pointcloud3d_t; >> >> in dev_pointcloud.c: >> >> // Process incoming data >> void playerc_pointcloud3d_putmsg (playerc_pointcloud3d_t *device, >> player_msghdr_t *header, >> void *data) >> { >> if((header->type == PLAYER_MSGTYPE_DATA) && >> (header->subtype == PLAYER_POINTCLOUD3D_DATA_STATE)) >> { >> player_pointcloud3d_data_t* pc3_data = >> (player_pointcloud3d_data_t*)data; >> device->points_count = MIN (pc3_data->points_count, >> PLAYERC_POINTCLOUD3D_MAX_POINTS); >> memcpy (device->points, pc3_data->points, >> sizeof (player_pointcloud3d_element_t)*device->points_count); >> >> +++ device->pose.px = pc3_data->pose.px; >> +++ device->pose.py = pc3_data->pose.py; >> +++ device->pose.pz = pc3_data->pose.pz; >> +++ device->pose.pyaw = pc3_data->pose.pyaw; >> +++ device->pose.ppitch = pc3_data->pose.ppitch; >> +++ device->pose.proll = pc3_data->pose.proll; >> +++ device->scanNr = pc3_data->scanNr; >> } >> else >> PLAYERC_WARN2("skipping pointcloud3d message with unknown >> type/subtype: %s/%d\n", >> msgtype_to_str(header->type), header->subtype); >> } >> >> and in playerc++.h >> >> class Pointcloud3dProxy : public ClientProxy >> { >> private: >> >> void Subscribe(uint aIndex); >> void Unsubscribe(); >> >> // libplayerc data structure >> playerc_pointcloud3d_t *mDevice; >> >> public: >> /// constructor >> Pointcloud3dProxy(PlayerClient *aPc, uint aIndex=0); >> >> /// destructor >> ~Pointcloud3dProxy(); >> >> /// return the point count >> uint GetCount() const { return GetVar(mDevice->points_count); }; >> /// return the scanNr >> +++ uint GetScanNr() const { return GetVar(mDevice->scanNr); }; >> +++ /// return pose >> +++ player_pose3d_t GetPose() const { return GetVar(mDevice->pose); }; >> /// return a particular scan value >> player_pointcloud3d_element_t GetPoint(uint aIndex) const >> { return GetVar(mDevice->points[aIndex]); }; >> >> /// This operator provides an alternate way of access the scan data. >> /// For example, SonarProxy[0] == SonarProxy.GetRange(0) >> player_pointcloud3d_element_t operator [] (uint aIndex) const { >> return GetPoint(aIndex); } >> >> }; >> >> >> Radu Bogdan Rusu schrieb: >> >> >>> Hi Stefan, >>> >>> Could you please generate a patch against player SVN ? I am in favor of that too, so once >>> we have it we'll try to apply it asap. >>> >>> Cheers, >>> Radu. >>> >>> Stefan Stiene wrote: >>> >>> >>> >>>> Hi, >>>> I would like to have two more variables in the pointcloud interface. >>>> Since the maximum number of points that can be send in one message are >>>> relatively small, I would like to have an int scanNumber in the >>>> player_pointcloud3d_data struct. With this int a 3d scan can be combined >>>> from multiple messages. This would open player to everyone who does scan >>>> matching and slam in 3d. The second variable needed is a player_pose3d >>>> that determines the scans pose in a global coordinate system. The values >>>> in the player_pointcloud_data.points field have to be in relative >>>> coordinates to this reference pose. This would ease scan matching >>>> because you only have to adjust the scan poses not the whole scan data. >>>> Perhaps there is someone with write access to the repository who can >>>> make these changes. >>>> Best Stefan >>>> >>>> >>>> >>> >>> >>> >> ------------------------------------------------------------------------- >> This SF.net email is sponsored by: Splunk Inc. >> Still grepping through log files to find problems? Stop. >> Now Search log events and configuration files using AJAX and a browser. >> Download your FREE copy of Splunk now >> http://get.splunk.com/ >> _______________________________________________ >> Playerstage-users mailing list >> Pla...@li... >> https://lists.sourceforge.net/lists/listinfo/playerstage-users >> >> >> >> > > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Splunk Inc. > Still grepping through log files to find problems? Stop. > Now Search log events and configuration files using AJAX and a browser. > Download your FREE copy of Splunk now >> http://get.splunk.com/ > _______________________________________________ > Playerstage-users mailing list > Pla...@li... > https://lists.sourceforge.net/lists/listinfo/playerstage-users > > |