Skip to content
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

Merge ignition-edifice into main #20

Merged
merged 32 commits into from
Apr 14, 2022
Merged

Merge ignition-edifice into main #20

merged 32 commits into from
Apr 14, 2022

Conversation

srmainwaring
Copy link
Collaborator

@srmainwaring srmainwaring commented Apr 14, 2022

This PR merges ignition-edifice into main which will then be set as the default branch.

There is a new branch (from master) for legacy gazebo (gazebo9, gazebo11) called gazebo-classic.

The original master has been renamed to main, and this will revert to the default branch. This is the first step in consolidating the different ignition-<version> branches back into main.

srmainwaring and others added 30 commits January 19, 2021 23:06
…interface

1. Add package dependency on jsoncpp. Use this library as there is already an implicit dependency on it via Gazebo.
2. Add example executable to create the JSON message required by SITL.
1. add a stand alone executable that connects to the SITL socket
2. WIP: data is received from SITL but the output JSON data is not recv by SITL
1. Use copy of ArduPilot SocketAPM class for socket handling - consistent with SITL.
2. Add stripped down python example from the SITL examples to establish connection with SITL. This version has no physics (static model).
3. Rework c++ example to connect to SITL. Now working after using jsoncpp stream writer to generate JSON string removing all indentation and newlines.
1. Initial draft of ArduPilotPlugin using SITL JSON. Two way connection operational but subject to many timeouts.
1. Writing JSON was a performance bottleneck. Replace jsoncpp with the faster rapidjson (also header only).
2. Update examples and plugin.
3. Further adjustments to connection and timeout tests - further work still required.
1. Reduce the timeout for socket.recv to prevent ReceiveMotorCommand from blocking the main Gazebo update loop.
2. Re-enable the code to drain the socket
3. Remove the Time::NSleep(100) from the timeout check block
… functions

1. Provide more descriptive names for addresses and ports
2. Create new functions to load sensor parameters and split up the main load function
3. Update comments and messages
1. ReceiveServoPacket will return directly if no packet is received or the protocol byte is incorrect.
1. revert the deprecation of the fdm_port_in parameter as a review of the SITL JSON code reveals that both the FDM server address and port can still be overridden in the STIL instance.
Remove the xml namespace attribute from the iris model as prevents the model from loading in Gazebo 11.
1. Add optional params <servo_min> and <servo_max> to the servo controllers
2. The JSON interfaces sends raw PWM values that are not necessarily in [1000, 2000], this changes allows a model to configure different servo limits if necessary
3. Update the command calculation using new limits.
4. Use conditional compilation to disable dev debug code.
Update package name for RapidJSON in CMakeLists.txt
Add install instructions for Ubuntu
Remove the JSON and socket C++ and Python examples.
Remove the anemometer sensor world example

Signed-off-by: Rhys Mainwaring <[email protected]>
- Update the plugin to use the ignition-gazebo interfaces following @gerkey's migration guide

Signed-off-by: Rhys Mainwaring <[email protected]>
- Fix bug where the imu name is stored in a temporary.

Signed-off-by: Rhys Mainwaring <[email protected]>
…or json backend

- Add <servo_min> and <servo_max> params.
- Add <useForce> param

Signed-off-by: Rhys Mainwaring <[email protected]>
- Set parameter <useForce>1</useForce> as setting joint velocities directly does not work.
- Remove commented code from Socket and ArduPilotPlugin
- Adjust namespace formatting

Signed-off-by: Rhys Mainwaring <[email protected]>
- Replace Gazebo material scripts with equivalent ambient, diffuse, specular elements compatible with Ignition.

Signed-off-by: Rhys Mainwaring <[email protected]>
Add an ArduPilot enabled Zephyr delta wing adpated from the
model provided by OpenRobotics.

The model is configured to work with ignition-gazebo. Changes include:

- Rename the model to avoid conflict
- Update the location of the wing mesh texture in the collada file
- Disable the GPS sensor
- Use the ignition-gazebo version of the lift-drag plugin
- Provide a new runway / ground plane model for demonstration
  (contains assets from ambientCG.com, licensed under CC0 1.0 Universal:
  textures https://ambientcg.com/view?id=Grass004)
- Update the iris_arducopter_runway world to use the new model
- Clean up CMakeLists.txt to use ignition conventions
- Only require ignition-gazebo package as other dependencies
  are pulled in recursively.
- This version of the mode will fly with ArduPilot plane4.1
- Add imu link and set pose: <pose>0 0 0 3.141593 0 -1.5707963</pose>.
  This is to adjust for the Zephyr model having a non-standard orientation (x : -R, y : -F, z : -D)
- Add joint-force system plugins
- Add ArduPilot plugin and configure:
- Gazebo body frame to ArudPilot FRD has an extra rotation about z
  to correct for the non-standard wing orientation.
- Gazebo world to NED is the usual rotation
- The elevon mappings are different from the model in SwiftGust's repo.
  The elevon channels are swapped and no servo reverse is required.
- Upstream: gazebo-zephyr.parm needs to have
  SERVO1_REVERSED = 0
  SERVO2_REVERSED = 0
- Orient the model for vertical takeoff
- Update the default transform for rotating from the Gazebo world frame to NED.

Signed-off-by: Rhys Mainwaring <[email protected]>
…#3)

- Document the frame conversion calculations needed to move from Gazebo to ArduPilot (aircraft) conventions
- Use the Pose3d composition operator (operator*) to simplify the pose calculations and align the code with the documentation

Signed-off-by: Rhys Mainwaring <[email protected]>
- Include the iris_with_standoffs model in the OSRF edifice-demo-world and add the ignition::gazebo::system::Imu plugin.

Signed-off-by: Rhys Mainwaring <[email protected]>
* [Lock-Step] add define to display debug information for JSON

Signed-off-by: Rhys Mainwaring <[email protected]>

* [Lock-Step] split the creation and sending of the JSON state and cache the state between updates

- Add function CreateStateJSON that creates and caches the state JSON string
- Modify the function SendState to send the cached JSON state
- This is to allow the JSON state to be resent to the controller if required

Signed-off-by: Rhys Mainwaring <[email protected]>

* [Lock-Step] move the update of motor commands to a separate function

- Move the servo packet declaration to the header
- Move the conversion of PWM values to motor commands to a separate function

Signed-off-by: Rhys Mainwaring <[email protected]>

* [Lock-Step] check the simulation is not paused in the pre and post update steps

- Check that the simulation is not paused before receiving or sending state

Signed-off-by: Rhys Mainwaring <[email protected]>

* [Lock-Step] removed unused debug checks

Signed-off-by: Rhys Mainwaring <[email protected]>

* [Lock-Step] add logic to enforce lock-step and a plugin parameter to toggle

- Add parameter <lock_step> which is set to true to enforce lock-step simulation
- Update the Iris and Zephyr models to use lock-step
- Modify PreUpdate when in lock-step mode
	- Keep calling ReceiveServoPacket until a packet is received
- Modify ReceiveServoPacket when in lock-step mode
	- Resend the state if no data received from the controller instead of timing out
	- Resend the state if a duplicate servo packet is received
- Fix a bug in the missed frames warning message

Signed-off-by: Rhys Mainwaring <[email protected]>

* [Lock-Step] add signal handler and break out of the receive servo packet loop when a signal is received

- Add a signal handler to allow the plugin to exit cleanly on Ctrl-C.

Signed-off-by: Rhys Mainwaring <[email protected]>
- Set the link for the IMU contained in this model - the ECM foreach iterates over all model components in the world.

Signed-off-by: Rhys Mainwaring <[email protected]>
@srmainwaring srmainwaring self-assigned this Apr 14, 2022
@srmainwaring srmainwaring added the enhancement New feature or request label Apr 14, 2022
@srmainwaring srmainwaring merged commit 52e3d6c into main Apr 14, 2022
@srmainwaring srmainwaring deleted the ignition-edifice branch December 14, 2022 09:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants