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

libgz-sim7-dev #28

Closed
wants to merge 38 commits into from
Closed

libgz-sim7-dev #28

wants to merge 38 commits into from

Conversation

Rezenders
Copy link
Contributor

gz-sim7-dev does not exist in ubuntu 22.04

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]>
…ArduPilot#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]>
…rduPilot#4)

- 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]>
…-gazebo7

- Use new interface on EntityComponentManager::CreateComponent
- Remove unused package dependencies from CMakeLists.txt
- Update dependency to ignition-gazebo7
- 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]>
clydemcqueen and others added 8 commits March 28, 2022 19:34
* Add RELAY control type

* Rename new control type from RELAY to COMMAND

- Minor updates to parameter documentation
- Rename new control type to COMMAND
- Add dependency on World utility and use it to fully scope command topic names
- Remove work-around for ArduSub as the initialisation issue should be fixed upstream

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

Co-authored-by: Clyde McQueen <[email protected]>
* ign -> gz: namespaces

* IGN to GZ

Signed-off-by: ahcorde <[email protected]>

* update README.md

Signed-off-by: ahcorde <[email protected]>

* Added reset

Signed-off-by: ahcorde <[email protected]>

* Update

Signed-off-by: ahcorde <[email protected]>

* more updates

Signed-off-by: ahcorde <[email protected]>

* clean worlds

Signed-off-by: ahcorde <[email protected]>

* more ign to gz

Signed-off-by: ahcorde <[email protected]>

Signed-off-by: ahcorde <[email protected]>
Co-authored-by: Gustavo <[email protected]>
@srmainwaring srmainwaring changed the base branch from ignition-garden to main December 14, 2022 08:51
@srmainwaring
Copy link
Collaborator

srmainwaring commented Dec 14, 2022

@Rezenders thanks for the PR. I believe I've captured this in #29, but I'll rebase this branch on main now that garden is default, and check.

Edit rebased this PR on main and AFAICT the change is included, so closing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants