-
Notifications
You must be signed in to change notification settings - Fork 17.7k
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
AP_DDS: Rally Get and Set #28449
base: master
Are you sure you want to change the base?
AP_DDS: Rally Get and Set #28449
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice addition, great to see some more interfaces like this.
The altitude needs a frame. |
@timtuxworth I have set the altitude frame explicitly now. |
8fb305b
to
7b5774b
Compare
As there is no code associated with the Rally flags, the DDS interface has been limited to only the Geopoint and the altitude frame |
0c549f9
to
e735057
Compare
Tools/ros2/ardupilot_dds_tests/test/ardupilot_dds_tests/test_rally_point.py
Outdated
Show resolved
Hide resolved
420c0d1
to
6dca61b
Compare
Rebased and pushed again. |
6dca61b
to
9fdff44
Compare
df289c2
to
76e08d0
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Functionally, looks good. Just needs code cleanup and removal of potential link-flooding.
Tools/ros2/ardupilot_dds_tests/test/ardupilot_dds_tests/test_rally_point.py
Outdated
Show resolved
Hide resolved
7bcf60a
to
bee945e
Compare
@Ryanf55 suggestions applied, rebased and tested. |
08d2a04
to
3d943b9
Compare
|
||
```bash | ||
ros2 service call /ap/rally_get ardupilot_msgs/srv/RallyGet "index: 0" | ||
requester: making request: ardupilot_msgs.srv.RallyGet_Request(index=0) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe it's something I need to understand about ROS, but how would you know if there is more than one rally point, there doesn't seem to be a request rally count message, do you just keep requesting indexes until you get a fail?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
When you set a rally, it responds with the length of the Rally list. When you request a particular index, it fails if it does not exist. You can also use the service set call with an invalid point to obtain the length of the Rally list without adding any.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
An AP might have previously been configured with zero, one or more rally points. After booting, the only way to find out if there are any rally points would be to start requesting them at the first and then incrementally keep requesting until you get a fail, or to request some really large index number (what the largest valid number +1?) to get the number.
I'm not sure I understand how that's ok.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree that we should ensure this API works if there are pre-existing rally points. A sequence diagram could be helpful
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Would adding a field to the set_rally
response that provides the number of rally points solve this issue?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@timtuxworth the rally_get
has been extended with a size
field. Now it returns also the size of the list.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good answer. Should Set also return size? Oh I see it does, so at least one example needs the size return added.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Set does return size already
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In my example, Size already reports the current size:
response:
ardupilot_msgs.srv.RallySet_Response(success=True, size=1)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good
ba5d645
to
0b91c49
Compare
Rebased, ready for another round. |
0b91c49
to
dd3576f
Compare
@Ryanf55 @timtuxworth I applied your suggestions. It should be good to go now. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A couple of minor documentation/example fixes. I'm confused why altitude is documented as having 0 digits (which I would question), whereas several examples who altitudes with at least 1 decimal place. For small vehicles 1 meter is a long way.
|
||
```bash | ||
ros2 service call /ap/rally_get ardupilot_msgs/srv/RallyGet "index: 0" | ||
requester: making request: ardupilot_msgs.srv.RallyGet_Request(index=0) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good answer. Should Set also return size? Oh I see it does, so at least one example needs the size return added.
6d31239
to
ee9f38c
Compare
ee9f38c
to
92ce630
Compare
LGTM - thanks for your work on this! |
@timtuxworth @Ryanf55 could you approve this PR? |
Issue
#28444
What Changed
/ap/rally_set
appends a Rally Point to the list or clears the list (using theclear
flag).point
: geolocationaltitude_frame
mandatory, follows enum of AltFrame.success
is the action is successful;size
is the list's size./ap/rally_get
gets the Rally Point at a given index. Returns:success
size
is the list's size.rally
the rally point asardupilot_msgs/Rally
type.ardupilot_msgs/Rally
type is defined, that copies the structure definition inAP_Rally
.Test
Auto Test
Manual Test
ros2 service call /ap/rally_set ardupilot_msgs/srv/RallySet "{clear: true}"
ros2 service call /ap/rally_set ardupilot_msgs/srv/RallySet "{rally: {point: {latitude: -35.36, longitude: 149.17, altitude: 400}}}"
ros2 service call /ap/rally_get ardupilot_msgs/srv/RallyGet "index: 0"