-
Notifications
You must be signed in to change notification settings - Fork 7
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
CVT for JAUS IOP testing #2
Comments
You're right, CVT is only for members. |
Thank you for the information |
Yes, client services are similar to CVT, but without tests of all functionality. The client services uses only relevant parts for bridge. |
So when we will have a CVT will the OCU client be running? |
Yes |
Then how is ocu client a CVT? |
a CVT is a tool to test your JAUS/IOP components on the robot. It sends messages (wrong and correct) defined by test profiles and analyze the responses from robot. If they are not as expected CVT reports an error. CVT tries to cover all defined messages of a service/all services. An OCU client is a component with a set of configured JAUS/IOP services which control the robot and consumes sensor information from this robot. The sensor information is translated to ROS messages, which can be visualized by e.g. rviz or rqt. |
Can we please know the difference between a normal service and a client service e.g. Discovery and Discovery Client. It is not very evident in the documentation. |
Discovery is a service, usually running on robot. DiscoveryClient support the access to Discovery from OCU side. Perhaps it is easier to understand on GlobalPoseSensorService and GlobalPoseSensorClient. ROBOT or OCU side can be replaced by other IOP compliant software. |
Does this mean that OCU client is a part of the CVT and not our robot? |
OCU is an Operator Control Unit and means your control software running NOT on your robot. CVT is a test tool which sends and receives the same massages like OCU, but does not visualize the sensor data and does not send meaningful control commands. |
How do I use OCU client to create any Event to which my platform manager should respond or a client to query for liveness and make my platform manager respond or any other service apart from Discovery which is described in the documentation? Do we have to generate "*_sm.cpp" files for all services as mentioned in jaustoolset guide or is there some other way? I tried to make a Liveness Client using JTS as mentioned in the guide but my liveness service does not respond to it (though the Liveness server created using the guide responds). Is there any way to check what is the message sent in sendJausMessage? |
Sorry, I don't understand what you try to do. Do you will use IOP compliant services on robot? Setup an IOP comliant robot? Create your own IOP services? This ROS/IOP Bridge make your ROS services availabe for IOP compliant OCU's. You need only configure your ROS launch files. See example configuration on robot side If you want control an IOP compliant robot, you need to setup client service of the ROS/IOP Bridge. See example configuration on OCU side. If you still want create your own plugin see docu |
What I intend to do is that I already have a ROS robot ready. Now I want a JAUS layer over my robot which can respond to CVT e.g. if CVT queries for liveness, then my robot should respond to it. I dont think I will have to implement my own services because most of the services which I require are already present in the package. I am just unable to figure out a way to test them. Creating the launch file as described in https://github.com/fkie/iop_core/blob/master/doc/howto_minimal_config.md |
If you have setup the bridge for the robot and has already discovered it, most of work is done. How can you test it:
There is no guarantee you pass all of CVT tests! CVT sends a command and expect what the report contains the predifined values. If this values are different, you can change most of these by parameter, e.g. access_timeout or events_timeout. Currently there is no client for liveness service, so no request are generated for it, but the service itself pass the CVT test. |
I am able to connect to my robot from the rqt access control and when I give it a "ocu/cmd_vel" my robot moves (in simulation). Does it mean that the jaus ros bridge is properly setup and it is something like CVT controlling the robot? Or is it only ros messages because superficially, there isnt anything like JAUS which I can see. When I echo /is_controlled it shows "true". And /iop_system list all my services even before I access control my robot from rqt. Is that suppose to happen? |
This sounds good!
|
I could set up wireshark and I know its configured for JAUS messages because when I play an example .pcap file, I can read decoded JAUS messages. But when I launch my launch files, I dont get any JAUS messages. All of them show TCP Protocol. How do I get the Jaus messages? I have edited nm.cfg file to change "EnableLoopback" to 1 as mentioned in guide. Also I noticed that when I launch jaus_node_manager it shows "Unable to bind to UDP port 3794" and "Unable to bind to UDP Loopback port 55555". Can this be a possible reason. What do I do about it? Another thing which I noticed is that of I edit nm.cfg file and type anything gibberish, jaus node manager launches without any error other than the UDP port one. I am certain that I am editing the correct nm.cfg file which is loaded with JTSNodeManager. How is it possible? My jaus node manager launch file And after I get wireshark working I can see the jaus messages, but my robot will not respond on its own, right? The client will have to query something like "set emergency" or anything else. rqt access is only for cmd_vel. How do I control the other things. |
The "Unable to bind to UDP port 3794" error occurs if the JTS node manager was launched twice without to stop the first one. Somethime it does not stop for some reason... Search for process The easiest way to see that the right file was loaded is to change the LogMsgLevel_. If you install your build code it is perhaps a different location of the nm.cfg. Launch configuration for JTS node manager:
Launch for other nodes to uses the right JTS configuration file:
If after all of this wireshart does not shows the JAUS messages, try to change the "EnableLoopback" to 2... To control other things you need on the robot the right service, .e.g. |
I get the jaus messages now but only for query identification in wireshark. Even though my robot is moving by /ocu/cmd_vel in rqt, there are no jaus messages in wireshark |
I did not tested the dissector file. Do you see other UDP messages which are not marked as JAUS? |
Yes. And the UDP and Jaus messages have the same source and destination. Dont know if that matters |
query identification message are the only message send using multicast. All other messages are send as unicast message. By communication on the same host the unicast messages are not going through the network interface by default. You can try to launch the robot stuff on different host. If it works, the loopback device does not configured properly or wireshark does not listen on the right interface. |
Thank you for the information |
Is 'set local pose' code not already written because the 'updateLocalPoseAction(SetLocalPose msg)' function is empty Where do I get the list of all data values SetLocalPose msg holds and extract them |
You're right, it is currently not implemented! You can add your code to updateLocalPoseAction(SetLocalPose msg) in LocalPoseSensor_ReceiveFSM.cpp You can test it, by adding a ros::Subscriber to LocalPoseSensorClient_ReceiveFSM.cpp in iop_client_local_pose_sensor_fkie. In callback you need to send a Jaus message SetLocalPose to p_remote_addr. The description of the message you find on http://openjaus.com/htmlDoc/index.html in Mobility ServiceSet. The c++ message classes are located in |
Thank you for the information |
In the readme for iop_client_local_waypoint_driver_fkie the subscribe topic for poses is written as cmd_local_pose. I guess it should be cmd_pose as that is the topic subscribed in the LocalWaypointDriverClient_ReceiveFSM And in LocalWaypointDriverClient_ReceiveFSM.cpp in line 257 it should be pose_out.pose.position.y instead of pose_out.pose.position.x Pls correct me if I am wrong |
Thanks! I changed cmd_pose to cmd_local_pose in iop_client_local_waypoint_driver_fkie. There is also cmd_global_pose in _iop_client_global_waypoint_driver_fkie. I fixed also the error LocalWaypointDriverClient_ReceiveFSM.cpp in 257. |
As mentioned in https://github.com/fkie/iop_core/blob/master/doc/howto_minimal_config.md we set services in platform manager which is our robot. Why do we include the client services in platform manager. Shouldnt they be only in OCUClient because OCU client is controlling the robot and not the robot itself? |
There are only few client services in platform manager ("DiscoveryClient" and "EventsClient"). We need only "DiscoveryClient" to register the service in Discovery service. Theoretically, in platfrom manager we can register the services direct by Discovery service. In real there is no interface for that... You need "DiscoveryClient" also in each component on the robot to discover Discovery service and register own services. |
If I am using LocalWaypointDriver then do I include LocalWaypointDriverClient in both platform manager and OCU client or only in OCU client. |
in platform_manager you include iop_global_waypoint_driver_fkie: "LocalWaypointDriver" |
Whenever I set /ocu/cmd_mgmt_emergency which is as I suppose the command to set robot in emergency, rqt shows Services with warning state: |
In emergency state you can't control robot. |
I dont get control over my robot again after I get to emergency once even on setting /ocu/cm_mgmt_emergency false. I have to release control and get access control again by clicking on my robot beside 'view' in rqt. Why does this happen? |
Whenever I use "local waypoint list driver" although the waypoints are executed correctly I receive this message consistently "list element rejected by 133.64.15: request_id: 59, reject code: 5". How do I get information about this error code 5? |
I believe this error comes from RejectElementRequest(ListManager). You find the information on http://openjaus.com/htmlDoc/index.html. If I find time I will check the LocalWaypointListDriver again. Is this error occurs each time? |
I think, this is not really intuitive... I need an idea for a better handling... |
Yes the error shows up everytime. But the waypoints are perfectly achieved. Doesnt seem to be a major problem then. |
I have edited LocalWaypointDriver_ReceiveFSM.cpp as per my requirement to set the local pose. Which function in LocalWaypointDriverClient_ReceiveFSM.cpp do I have to use to subscribe to the set pose command? |
LocalWaypointDriverClient subscribed to 'cmd_local_pose'. If PoseStamped is received the pCmdPose will be called. In this method PoseStamped is translated to JAUS message SetLocalWaypoint and send to LocalWaypointDriver. |
I've changed the behaviour on emergency in ocu client. The component address with emergency state will now be stored and it is easier to clear the emergency state. |
Thank you for the help Also how can I change the service versions. Some of the services have version 1.1 but I want 1.0 |
you are welcome You can change the version of services in plugin_iop.xml which is located in each package. |
I want to set the presence vector of reportlocalpose in robot side according to the presence vector requested by reportlocalpose from client side. How do I do this? Like in client for localpose we set a presencevector to 65535. Now how do I detect on the robot side that the query msg has a presence vector of 65535 and set my reportlocalpose presence vector accordingly |
You can't change the presence vector of ReportLocalPose! On robot side you have to look at each bit of the presence vector and decide which information should be reported. If first bit is set you have to report the X position. So you set it:
For presence vector meaning see: The value of 65535 was chosen because of type of presence vector. It is enough to set it to 255 to get all values of report local pose. Currently it is not tested, because in the origin JSIDL the query message is not passed to the function. To get access to the query you need to change the LocalPoseSensor.xml in iop_builder_fkie. And pass instead of |
It has not effect on robot side in this bridge, but other IOP compliant robots should look at the presence vector. |
Is there a reason why event for Report Control is not implemented in Access Control? |
there is no reason! |
I dont get what changes do I have to do in these three functions. What I did was added the two lines in setupnotifications and did changes in accesscontrolclient. I could get it working(The function for handlereportcontrol was being called at desired rate). What changes do I have to do in storeAddressAction, setAuthorityAction and sendReportTimeoutAction? |
you have to add the content of sendReportControlAction to update &response and also trigger onchange event with something like this:
|
Thank You for the help |
How do I get a CONFORMANCE VERIFICATION TOOL (CVT) to test whether I am able to implement the standards or not. I cant find this in internet. Its private I guess, only for NAMC members.
Is there any other way of testing whether I have done stuff correctly?
The text was updated successfully, but these errors were encountered: