A ROS2 interface to control Gremsy gimbals. Based on the Gremsy/gSDK interface, Flova/ros_gremsy , and the MavLink protocol.
Disclaimer: This software package is not officially developed by or related to Gremsy.
This package utilizes UART communication with gimbal COM port to control the gimbal.
The Gremsy gimbals using MavLink protocol for message format and gSDK provides necessary functions for communication.
This package is only tested with Gremsy MIO and ROS2 Galactic so far. Feel free to contribute if you have another model working with this package, or if there are some modifications needed for it.
Clone this repository to src
folder of your workspace. --recurse-submodules
flag will automatically clone the required gSDK submodule.
git clone --recurse-submodules https://github.com/tiiuae/ros2_gremsy
Install dependencies using rosdep from the workspace directory, modify ${ROS_DISTRO} if you have in your environment.
rosdep install -y -r -q --from-paths src --ignore-src --rosdistro ${ROS_DISTRO}
Run the colcon to build package.
colcon build --symlink-install
Check the device name of the gimbal by running the following command.
dmesg | grep tty
The default com_port parameter is already /dev/ttyUSB0
. If the device name is different, you should add it to run command. The launch file is not created yet, so you should manually enter it to the command.
ros2 run ros2_gremsy gremsy_node --ros-args -p com_port:=/dev/ttyUSB0
The default com_port parameter is already /dev/ttyUSB0
. If the device name is different, you should use the correct one to mount the device. For example, --device /dev/ttyUSB1:/dev/ttyUSB0
, so host ttyUSB1
is mounted to container as ttyUSB0
.
docker run --rm -ti --env DRONE_DEVICE_ID=sad99 --network host --device /dev/ttyUSB0:/dev/ttyUSB0 ghcr.io/tiiuae/tii-gremsy:main
By default, the ubuntu user does not have access to the serial port. You can add it by
sudo usermod -a -G tty ${USER}
sudo usermod -a -G dialout ${USER}
Reboot the computer.
Topic name | Type | Description |
---|---|---|
~/imu | sensor_msgs/Imu | IMU data |
~/encoder | geometry_msgs/Vector3Stamped | Encoder data |
~/mount_orientation_global | geometry_msgs/QuaternionStamped | Orientation of the gimbal in the global frame |
~/mount_orientation_local | geometry_msgs/QuaternionStamped | Orientation of the gimbal in the local frame |
Topic name | Type | Description |
---|---|---|
~/gimbal_goal | geometry_msgs/Vector3Stamped | Goal orientation of the gimbal in the global frame in radians. X->Roll, Y->Pitch, Z->Yaw |
~/gimbal_goal_quaternion | geometry_msgs/QuaternionStamped | Goal orientation of the gimbal in the local frame as quaternion. |
Service name | Service type | Input type | Output types | Description |
---|---|---|---|---|
~/lock_mode | std_srvs/SetBool | bool data | bool success, string message | Change gimbal mode: lock mode (true) and follow mode (false) |
Parameter name | Type | Description | Accepted values | Default value |
---|---|---|---|---|
device_id | integer | Device id- 0: MIO, 1: S1, 2: T3V3, 3: T7 | 0,1,2,3 | 0 |
com_port | string | Serial device for the gimbal connection | - | /dev/ttyUSB0 |
baudrate | integer | Baudrate for the gimbal connection | - | 115200 |
state_poll_rate | double | Rate in which the gimbal data is polled and published | 0.0-300.0 | 50.0 |
goal_push_rate | double | Rate in which the gimbal are pushed to the gimbal | 0.0-300.0 | 60.0 |
gimbal_mode | integer | Control mode of the gimbal 0:GIMBAL_OFF, 1:LOCK_MODE, 2:FOLLOW_MODE | 0,1,2 | 1 |
tilt_axis_input_mode | integer | Input mode of the gimbals tilt, 0:CTRL_ANGLE_BODY_FRAME, 1: CTRL_ANGULAR_RATE, 2:CTRL_ANGLE_ABSOLUTE_FRAME | 0,1,2 | 2 |
tilt_axis_stabilize | boolean | Input mode of the gimbals tilt | - | true |
roll_axis_input_mode | integer | Input mode of the gimbals roll, 0:CTRL_ANGLE_BODY_FRAME, 1:CTRL_ANGULAR_RATE, 2:CTRL_ANGLE_ABSOLUTE_FRAME | 0,1,2 | 2 |
roll_axis_stabilize | boolean | Input mode of the gimbals roll | - | true |
pan_axis_input_mode | integer | Input mode of the gimbals pan, 0:CTRL_ANGLE_BODY_FRAME, 1:CTRL_ANGULAR_RATE, 2:CTRL_ANGLE_ABSOLUTE_FRAME | 0,1,2 | 2 |
pan_axis_stabilize | boolean | Input mode of the gimbals pan | - | true |
lock_yaw_to_vehicle | boolean | Uses the yaw relative to the gimbal mount to prevent drift issues. Only a light stabilization is applied. | - | true |
Note: Only Gimbal Pixy and T3V3 support CTRL_ANGLE_BODY_FRAME mode with pitch and yaw axis.
- Create a launch file and parameters file for the package.
- Verify other models working with this package
- Add TF publishing
- Add other topics for controlling gimbal.