AGRIBOT’s physical form is a four-wheel skid-steer chassis designed in SolidWorks 2016 and manufactured at SVNIT Surat with assistance from Team DRISHTI. The chassis houses an Nvidia Jetson Nano as the central compute board, which runs all ROS navigation nodes and CNN inference simultaneously. Navigation sensors — a NEO-M8N GPS module and an MPU-9265 9-DOF IMU/magnetometer — are mounted directly on the chassis and connected to the Jetson Nano, while a Raspberry Pi Camera v2 feeds visual data straight into the crop-weed classification model. The robot’s body (Documentation Index
Fetch the complete documentation index at: https://mintlify.com/Dhruv2012/Autonomous-Farm-Robot/llms.txt
Use this file to discover all available pages before exploring further.
base_link) has a mass of 3.4672 kg; each wheel has a mass of 0.411 kg and uses a 10:1 mechanical reduction drive.
Hardware Components
Nvidia Jetson Nano
The onboard compute platform that runs all ROS nodes — including
gps_converter, data_manipulation, and autonomus_drive — as well as real-time Bonnet CNN inference on the camera stream. Also handles remote SSH access for monitoring and development. See the Configuring Jetson Nano wiki for setup instructions.NEO-M8N GPS
u-blox NEO-M8N multi-GNSS receiver providing
sensor_msgs/NavSatFix messages. In the ROS stack, these are published on /agribot/fix at 5 Hz. The gps_converter node converts these WGS84 coordinates into local Cartesian XY using an Alvin Mercator projection relative to a fixed origin point (lat: 21.1613331649, lon: 72.7870533933).MPU-9265 IMU / Magnetometer
InvenSense MPU-9265 9-DOF sensor providing 3-axis accelerometer, 3-axis gyroscope, and 3-axis magnetometer data. The magnetometer heading is used as the primary orientation reference for autonomous navigation. An Arduino sketch (
imudata.ino) reads the raw I²C registers and publishes the data as a ROS std_msgs/String message on the imu topic at 10 Hz; the Gazebo simulation replaces this with libhector_gazebo_ros_imu.so at 200 Hz.Raspberry Pi Camera v2
8 MP Sony IMX219 sensor streaming 640×480 RGB images. In Gazebo, this is simulated by
libgazebo_ros_camera.so publishing on /agribot/camera/image_raw at 30 fps. The image stream is passed directly to real-time.py for live Bonnet CNN segmentation, producing per-pixel weed/crop/soil labels overlaid on the video output.IMU Arduino Interface
The physical MPU-9265 is read by an Arduino microcontroller runningimudata.ino, located at agribot_ws/src/imudata/imudata.ino. The sketch initializes the MPU via I²C, reads all 14 accelerometer and gyroscope registers at address 0x68, encodes the values into a compact string format, and publishes them as a ROS topic using ros_lib. The encoding format is:
The Arduino sketch publishes raw 16-bit register values as a packed string, not a standard
sensor_msgs/Imu message. The data_manipulation.py node on the Jetson Nano side parses this string and converts it into engineering units before applying the Kalman filter. In Gazebo simulation, the IMU plugin publishes proper sensor_msgs/Imu messages directly.Sensor Simulation in Gazebo
All hardware sensors are replicated in Gazebo using the Hector Gazebo plugin suite, configured inagribot_sensors.urdf.xacro. The simulation parameters are tuned to model real-world sensor behavior as closely as possible.
GPS Plugin
Plugin:libhector_gazebo_ros_gps.so
IMU Plugin
Plugin:libhector_gazebo_ros_imu.so
-9.8 m/s² on Z) is pre-applied. The imu_link is positioned at xyz="0 0.06 0" relative to base_link.
Magnetometer Plugin
Plugin:libhector_gazebo_ros_magnetic.so
data_manipulation.py.
Skid-Steer Drive Plugin
Plugin:libgazebo_ros_skid_steer_drive.so
ROS Topic Reference
The following table summarizes every sensor topic published in the AGRIBOT system, covering both the real hardware configuration and the Gazebo simulation:| Sensor | ROS Topic | Message Type | Rate |
|---|---|---|---|
| GPS | /agribot/fix | sensor_msgs/NavSatFix | 5 Hz |
| IMU | /agribot/imu | sensor_msgs/Imu | 200 Hz |
| Magnetometer | /magnetic | geometry_msgs/Vector3Stamped | 5 Hz |
| Camera | /agribot/camera/image_raw | sensor_msgs/Image | 30 fps |
| Odometry | /odom | nav_msgs/Odometry | 100 Hz |
URDF Link Frame Positions
The sensor links are defined as fixed joints relative tobase_link in agribot_body.urdf.xacro:
| Link | Parent | Offset (xyz) | Purpose |
|---|---|---|---|
imu_link | base_link | 0 0.06 0 | IMU/gyroscope frame |
gps_link | base_link | 0 -0.06 0 | GPS antenna phase center |
magnetometer_link | base_link | 0.3 0 0 | Magnetometer — forward-mounted |
camera_link | base_link | 0 0 0 | Camera — co-located with chassis origin |
dummy_link | — | — | Root physics frame at ground plane |
base_link | dummy_link | 0 0 0.26 | Chassis center, 0.26 m above ground |