Skip to content

A survelliance based mobile manipulator for controlled environments

Notifications You must be signed in to change notification settings

Labeeb1234/Hydroponics

Repository files navigation

Mobile Manipulator For Hydroponics Systems

CAD model 🖥️⚙️🛠️

  • Created using Fusion360 and exported to URDF format to import the model into IsaacSim to get ready-rigged bot model
  • Existing AMR-UST chassis modified with a generic manipulator(5-DOF) ---> subject to change if the project progresses
  • AMR-UST chassis was modified to fit a 4WD off-road kind of type drive

Fig.1| CAD-Model IsaacSim View      Fig.2| CAD-Model IsaacSim View New Version

Requirements ✅

  • ROS2 (Humble/Iron/Jazzy)
  • MoveIt2
  • NVIDIA IsaacSim (Version 4.2.0)

1. Install ROS2 (Humble/Iron/Jazzy) 📥

Choose a ROS2 version

You need to install one of the following ROS2 versions:

Note: As of 2024, Jazzy does not have a stable IsaacSim-ROS2 bridge node. For stable integration, use Humble or Iron.


2. Install MoveIt2 📥

MoveIt2 is essential for motion planning and robot control within ROS2. Install it based on the ROS2 version you've chosen.

MoveIt2 Installation Instructions:

Important: Choose installation steps for your specific ROS2 version (Humble/Iron).


3. Install NVIDIA IsaacSim (Version 4.2.0) 📥

NVIDIA IsaacSim is a powerful simulation tool for robots. Version 4.2.0 is compatible with ROS2 Humble and Iron.

IsaacSim Installation Instructions:

Key Points:

  • Ensure you are installing IsaacSim version 4.2.0.
  • Follow the official steps for proper integration with ROS2 and MoveIt2.
  • Important: Double-check version compatibility between IsaacSim, ROS2, and MoveIt2.

4. Check Version Compatibility 🔍

ROS2 and IsaacSim Compatibility:

  • Jazzy is not stable with IsaacSim-ROS2 bridge as of 2024.
  • Humble and Iron are stable for IsaacSim integration as of 2024.

World Setup 🌍

  • For the world setup lines of hydroponics system were setup in the IsaacSim Environment for the use case required
  • Always remember add Ground Plane and Physics Scene for a ground for the model to fall onto and also to activate gravity in your environment respectively
  • The initial reference for the hydroponic system was taken from here


Fig.2| IsaacSim Simulation Environment

  • All the rendering and material assignments given are quite trivial and easy to do, all you have to do is follow these tutorials; Environment Setup, Adding Simple Objects and Working with USD

  • Note: .USD(Universal Scene Description) is very much different from .sdf and .URDF files as this type of files basically contain the information of the saved state of your IsaacSim simulation, just like how .sdf and .urdf carry information about your simulation in igntion gazebo(or Gazebo Sim(ver. 2024))

Simulation Setup 📋 (The document below details all the steps and docs used for building this simulation using the bare bones of the IsaacSim Simulator, can be used as reference for building other simulations too)

Model Property Tuning and Articulation Setup/Tuning (rigging)


  • Prepping and importing bot model to IsaacSim Environment
  • Use the URDF Importer Extension available in the IsaacSim Extensions tab, check here for the extact setups involved
  • An important setup before using this extension is to make sure the path of the mesh files that you are importing are in the correct one otherwise you make encounter some errors related to it
  • Since the base is moving make sure the base_link is not imported as a fixed link
  • Important: If the model was exported to URDF from Fusion360 using the Fusion2URDF ROS2 plugin then the initial model file will be in .xacro format; this has to be converted to .URDF format after commenting out the gazebo and trans dependecies from the .xacro (shown in the image below)


Fig.3| Comment as shown if the Fusion2URDF plugin was used for exportation

  • The command for the above is given below:
xacro path/to/your.xacro > output/path/output.urdf
  • Install the xacro package if not installed using:
sudo apt install ros-DISTRO-xacro 
  • Next step is to check the model that was imported into your current scene, go to the individual links' collision prims(primitives) and check the collisions (usually a green model geometry based outlines), if the collisions are not encompassing the model links very good modify the collision model, under the collider presets in the bottom right tab, from current basic collisions to convex hull or convex decomposition which auto-calculates your collision geometry and gives you the best approximate for your imported model. (An example of comparison shown below). Also the link here explains the above breifly for your understanding, once you get to the page go to the collision meshes section
  • After the collision groups and meshes are setup and modified to the requirements next it to rig/modify the joints and its properties (or atleast examine them before add the articulation root to the system). Each links and joints of your model will be under certain frames called X-Forms(TFs equivalent in IsaacSim) under the X-Forms of each link there will be joints of your model present, clicking on that will display its properties like damping, stiffness, joint force, velocity, position and torque limits. The stiffness and damping constants are quite important as tuning those params are required for the appropriate actuator responses in the simulator here is the link for more on tuning the joint gains. The position, force and velocity limits can be set manually based on the design and actuator constraints you want. The main acutator plugin is under the joint drive section under the joint properties tab, which displays when you click on the joint prims.
  • After the joint properties are setup and tuned then we can add the articulation root which helps in implementing kinematics easily for your system either by using the core Python API or by using ROS2. Articulation root is like a reference for all other joints in your system, its usually given to the base_link or before the set of joints you want to have kinematic control over (very rough explaination). More on adding articulation root and extra info is here ---> its very easy to setup really, just 2 clicks that's all
  • After all is the above setup and done your custom basic USD containing the model/bot is created.

Note: URDF file by default adds all the required model physics, like rigid body with collider presets(which can be removed if not required easily using the GUI), once imported

Note: All the steps given above can be reproduced using the IsaacSim Core Python API too

Note: Open a clean USD scene in the simulator and then import the URDF (will be easier to tune the rigging and modifying the bot in case there are system resource constraints). On top of the URDF importer extensions there is also an extension to convert any of your USD files to URDF too ---> see here --> very easy to use.


Joint Control and Kinematics Setup (OmniGraph Method)


ROS2

moveit_setup_assistant_config:
  urdf:
    package: amr_mani_description
    relative_path: urdf/amr_mani.xacro
  srdf:
    relative_path: config/amr_mani.srdf
  package_settings:
    author_name: labeeb
    author_email: labeebranassar@gmail.com
    generated_timestamp: 1731477887
  control_xacro:
    command:
      - position
    state:
      - position
      - velocity
  modified_urdf:
    xacros:
      - control_xacro
  control_xacro:
    command:
      - position
    state:
      - position
      - velocity

Note: the file name should be ".setup_assistant"

Note to self

  • commands to run
joint_states_remapper,
amr_diff_drive_controller_code,
p-controller based goal_pose node (for basic trajectory control)
then the isaac-launch file for moveit for manipulator path planning and control launch as well as the ros2 control launch (topic based control system)
pymoveit is getting depreciated very regularly have to shift to the moveit cpp commander (ASAP), 3rd time the pkg is getting fuckked up because the author's negligence

Video Demos

About

A survelliance based mobile manipulator for controlled environments

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published