Mobile Manipulation

Dingo mobile manipulation


To-date the Gen3 Lite arm has only been tested on Dingo-D; while the Dingo-O is technically capable of supporting it, there may be additional configuration steps & debugging needed.

The Dingo-O and Dingo-D can support a Kinova Gen3 Lite 6-DOF arm. This section explains how to add the arm to your robot and install the appropriate drivers.

Physical Installation

First, power off the robot and install the arm. The arm’s power regulator can be placed inside one of the extra payload bays on the Dingo-O. On Dingo-D the power regulator must be mounted to the outside of the robot.

The power regulator mounted to the outside of Dingo-D

Connect the input power to the Gen3 Lite’s power regulator to the VBAT connector on Dingo’s MCU:

the VBAT connector on the Dingo-D MCU

Connect the output power from the Gen3 Lite’s power cable.

Input & output of the Gen3 Lite's power regulator

Connect the MicroUSB port of the Gen3 Lite to an open USB port on the Dingo’s computer and connect the Gen3 Lite’s power cable to the port on the arm’s base.

Gen3 Lite's base with power and USB connections.

Network Confguration

The Kinova Gen3 Lite does not support configuring the IP address of the arm; the arm always communicates via ethernet-over-USB with address To configure Dingo to communicate with the arm, first connect the micro-USB cable between the arm and an empty USB port on your robot’s PC. Run dmesg – you should see the USB connection identified as an ethernet device and assigned a network device identifier like usb0, enx8c04ba888725` or ``enp0s20u9 – the exact ID will vary based on the motherboard and the OS configuration.

Modify /etc/network/interfaces to add the USB ethernet device to the br0 bridge, for example, if the device showed up as usb0:

bridge_ports regex (eth.*)|(en.*)|(usb.*)

Then add a new interface to the bridge by adding this to the same file:

# Static interface for communicating with the Gen3 Lite arm
auto br0:1
allow-hotplug br0:1
iface br0:1 inet static

Driver Installation

Create a catkin workspace and clone the dingo_manipulation and ros_kortex packages into it:

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_init_workspace src
cd src
git clone
git clone

The ros_kortex package requires additional steps before it can be built:

sudo apt install python3 python3-pip
sudo python3 -m pip install conan
conan config set general.revisions_enabled=1
conan profile new default --detect > /dev/null
conan profile update settings.compiler.libcxx=libstdc++11 default

Install any additional necessary ROS dependencies:

cd ~/catkin_ws
rosdep install --from-paths src --ignore-src -r -y

Finally build the packages. ros_kortex can take a very long time to build. This is normal.

cd ~/catkin_ws

If your Dingo has a Jetson computer you need to specify additional parameters to build ros_kortex:

catkin_make --cmake-args -DCONAN_TARGET_PLATFORM=jetson

Once everything is built remember to source your workspace: source $HOME/catkin_ws/devel/setup.bash.

URDF Configuration

Next you must add the arm to your robot’s URDF. The easiest way to do this is to use the DINGO_URDF_EXTRAS environment variable. Edit /etc/ros/setup.bash and add the following to the end of it:

# source the catkin workspace; edit this path as necessary for your robot
source /home/administrator/catkin_ws/devel/setup.bash

# add the gen3 lite description to the URDF
export DINGO_URDF_EXTRAS=$(catkin_find dingo_kinova_description urdf/dingo_gen3_lite_description.urdf.xacro --first-only)

If your robot already has a DINGO_URDF_EXTRAS then simply include the dingo_gen3_lite_description.urdf.xacro file in it:

<include filename="$(find dingo_kinova_description)/urdf/dingo_gen3_lite_description.urdf.xacro" />

This will mount the arm to the front_b_mount link on the robot’s chassis. To apply an offset and/or rotation, set the DINGO_ARM_XYZ and DINGO_ARM_RPY environment variables. See Dingo Description for a summary of all available environment variables. To use a different mounting location, set the DINGO_ARM_MOUNT environment variable. The following links are defined in the Dingo-O and Dingo-D URDFs and may be used as mounting points:

Link (front to back)
























If your arm’s power regulator is externally mounted, as will likely be the case for Dingo-D, you may add this to the model by setting the DINGO_ARM_EXTERNAL_POWER environment variable to 1. By default the external power will be mounted to the rear_b_mount link.

To verify that your model is correct you can use roslaunch dingo_viz view_model.launch. You should see the arm sticking straight up in the air:

Dingo-D model with Kinova Gen3 Lite

Driver Bringup & Controlling the Arm

To control the arm you must run 2 launch files: one to launch the underlying ros_kortex driver to control the arm and the second to launch the moveit interface to allow for planning & executing commands. In two separate terminals run the folliwing commands:

roslaunch dingo_kinova_bringup dingo_gen3_lite_bringup.launch
roslaunch dingo_gen3_lite_moveit_config dingo_gen3_lite_moveit_planning_execution.launch

To make sure everything is working, set the ROS_MASTER_URI on your computer to use the robot, and then launch rviz:

export ROS_MASTER_URI=http://<your-robot>:11311


This assumes you have configured your network correctly to allow remote rviz connections

In rviz, add the Mobile Manipulation topic. After a moment you should see the robot with the arm in its current state.

Add the Motion Planning topic to Rviz

Use the spherical control to move the arm to a new position and press the “plan and execute” button. You should see the arm move from its current state to the desired goal.

Moveit motion planning in Rviz

The dingo_gen3_lite_moveit_config package includes 2 default poses for the arm: vertical which sets all the joint positions to 0 (which will point the arm straight up in the air) and stow which will fold the arm up into a safe, compact position for travel. Additional poses can be created by running

roslaunch dingo_gen3_lite_moveit_config setup_assistant.launch

Refer to the dingo_manupulation documentation on GitHub for more information on adding additional static poses.

Appendix: Additional Customization

The default driver bringup assumes that the robot is in a mostly-stock state. It is possible that your robot includes additional sensors and payloads that the arm could collide with.

The dingo_manipulation package includes additional documentation for customizing the moveit configuration for the arm: