Skip to main content

Overview

Deploying between simulation and a physical robot is extremely simple with GRID due to the parity between simulated and physical robots. The easiest way to do this, is to take a skill that works with a simulated robot and replace the simulated robot with a physical robot. In many cases, this is as simple as changing the object instantiation. Both agents have access to the rest of GRID and the other functionality that we offer.

AirGenDrone to ModalaiDrone Example

Code

Here is an example of a skill that works with AirGenDrone, but can be easily modified to work with ModalaiDrone.
from grid.robot.aerial import AirGenDrone

agent = AirGenDrone()
agent.takeoff()
agent.land()
This would become:
from grid.robot.aerial import ModalaiDrone

agent = ModalaiDrone()
agent.takeoff()
agent.land()

Key Differences

The main difference between the two is that AirGenDrone has access to the underlying AirGen API, enabling it to control the environment, receive ground truth data, etc. This can be accessed by using the AirGenDrone.client field. ModalaiDrone does not have this access, but it does have access to the rest of GRID and the other functionality that we offer.

Further Reading

For PX4-specific setup and MavLinkClient usage, please see PX4 Integration.

IsaacLocomotion to Go2 Example

Code

Here is an example of a skill that works with IsaacLocomotion, but can be easily modified to work with Go2. There is more initial setup required for the IsaacLocomotion as IsaacLab requires ROS.
from grid.robot.locomotion.isaac_locomotion import IsaacLocomotion
from grid.utils.types import Velocity

agent = IsaacLocomotion()
agent.moveByVelocity(Velocity(0.4, 0, 0), Velocity(0, 0, 0))
This would become:
from grid.robot.quadruped import Go2
from grid.utils.types import Velocity

agent = Go2()
agent.moveByVelocity(Velocity(0.4, 0, 0), Velocity(0, 0, 0))

Further Reading

To see another example of how IsaacLocomotion can be used to control the Go2, please see the Safe Navigation Example.