mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-22 01:11:42 +00:00
Bring back the gazebo plugins (#1063)
The models and meshes are not included. We will need to find an alternate way to reintegrate these and use them. * Add simulation/gz_msgs back, and build with Gradle. * Add back in the frc simulation plugins for gazebo. * Add a new shared library, halsim_gazebo. This library will become the interface between the HAL sim layer and gazebo. * Preserve the first channel number used in created Encoders in the Sim MockData. This allows us to use the DIO channel number to connect with simulated encoders. * Have the HAL Simulator set the reverse direction on creation. This enables a simulator to be aware of the direction. * Add a drive_motor plugin. This is a bit of a 'magic' motor, which allows us to build robot models that drive in a more realistic fashion. It does this by apply forces directly to the chassis, rather than relying on the complex motion dynamics of a driven wheel. This in turn allows the model to reduce wheel friction, reducing scrub, and allowing for a more natural driving experience.
This commit is contained in:
committed by
Peter Johnson
parent
70960b0251
commit
ebd41fe0bb
@@ -0,0 +1,75 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) 2018 FIRST. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#include <simulation/gz_msgs/msgs.h>
|
||||
|
||||
#include <gazebo/gazebo.hh>
|
||||
#include <gazebo/gazebo_client.hh>
|
||||
#include <gazebo/msgs/msgs.hh>
|
||||
#include <gazebo/sensors/sensors.hh>
|
||||
#include <gazebo/transport/transport.hh>
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
using namespace testing;
|
||||
|
||||
static char* library;
|
||||
static char* world_sdf;
|
||||
static double latest_time;
|
||||
|
||||
void cb(gazebo::msgs::ConstFloat64Ptr& msg) { latest_time = msg->data(); }
|
||||
|
||||
TEST(ClockTests, test_clock) {
|
||||
gazebo::physics::WorldPtr world;
|
||||
|
||||
ASSERT_TRUE(library);
|
||||
ASSERT_TRUE(!access(library, X_OK | R_OK));
|
||||
ASSERT_TRUE(world_sdf);
|
||||
ASSERT_TRUE(!access(world_sdf, R_OK));
|
||||
|
||||
gazebo::addPlugin(library);
|
||||
ASSERT_TRUE(gazebo::setupServer());
|
||||
|
||||
world = gazebo::loadWorld(world_sdf);
|
||||
ASSERT_TRUE(world != NULL);
|
||||
|
||||
ASSERT_TRUE(gazebo::client::setup());
|
||||
|
||||
gazebo::transport::NodePtr node(new gazebo::transport::Node());
|
||||
node->Init();
|
||||
|
||||
gazebo::transport::SubscriberPtr sub =
|
||||
node->Subscribe("/gazebo/frc/time", cb);
|
||||
|
||||
gazebo::sensors::run_once(true);
|
||||
gazebo::sensors::run_threads();
|
||||
gazebo::common::Time::MSleep(1);
|
||||
|
||||
double start = latest_time;
|
||||
|
||||
for (unsigned int i = 0; i < 1000; ++i) {
|
||||
gazebo::runWorld(world, 1);
|
||||
gazebo::sensors::run_once();
|
||||
gazebo::common::Time::MSleep(1);
|
||||
}
|
||||
|
||||
double end = latest_time;
|
||||
|
||||
ASSERT_TRUE(end > start);
|
||||
ASSERT_TRUE(gazebo::client::shutdown());
|
||||
ASSERT_TRUE(gazebo::shutdown());
|
||||
}
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
testing::InitGoogleTest(&argc, argv);
|
||||
|
||||
if (argc >= 1) library = argv[1];
|
||||
|
||||
if (argc >= 2) world_sdf = argv[2];
|
||||
|
||||
return RUN_ALL_TESTS();
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" ?>
|
||||
<sdf version="1.5">
|
||||
<world name="default">
|
||||
<scene>
|
||||
<ambient>0.2 0.2 0.2 1</ambient>
|
||||
<background>1 1 1 1</background>
|
||||
<shadows>false</shadows>
|
||||
<grid>false</grid>
|
||||
<origin_visual>false</origin_visual>
|
||||
</scene>
|
||||
<model name='Clock'>
|
||||
<plugin name='clock' filename='libclock.so'>
|
||||
<topic>/gazebo/frc/time</topic>
|
||||
</plugin>
|
||||
</model>
|
||||
</world>
|
||||
</sdf>
|
||||
Reference in New Issue
Block a user