Controlling QTrobot arms using MoveIt
Goal: learn how to control QTrobot arms using MoveIt
Requirements:
This advanced tutorial demonstrate how to use ROS MoveIT to control QTrobot arms. The examples draw some shapes (i,e. rectangle and spirals) on the XY plane in robot frame.
Preparation and requirements
Before running the example, please ensure that following setups of your QTrobot and the machine which you are running the example.
QTrobot setup
By default QTrobot motors interface runs in 'normal' mode. in normal mode, the motors control loop and joints state publisher run in low frequency (2-5Hz). More importantly the joint position values are in degree. To be able to use MoveIt with QTrobot, you need to configure it to run in 'advanced' mode:
- joints position value is in radian
- motors main controller loop and joints state publisher runs in 30hz.
- required interfaces and controller such as
robot_state_publisher
andJointTrajectoryController
are available
Change motor launcher autostart script to run in advanced mode:
nano ~/robot/autostart/start_qt_motor.sh
and change the corresponding line to look like the following and save and exit:
roslaunch qt_motor qt_motor_advanced.launch
Reboot the robot to run the advance motor interface.
Check the advanced mode setup: After rebooting the reboot, you can check (from QTPC, QTRP or your machine) if the motor interface is running in the advanced mode:
joint state publisher frequency:
rostopic hz /qt_robot/joints/state
...
average rate: 30.041
min: 0.029s max: 0.047s std dev: 0.00391s window: 29
joints value should be in radian:
rostopic echo /qt_robot/joints/state
...
position: [0.015707962851830046, 0.0, -0.6073745663782212, 1.569051024174513, -0.9896016991965904, -0.5689773095185405, -0.3455751785790718, -0.8360127383368947]
trajectory controller is running:
rostopic type /qt_robot/left_arm_controller/follow_joint_trajectory/goal
...
control_msgs/FollowJointTrajectoryActionGoal
Your machine setup (QTPC)
After checking and updating the QTrobot setup, you can install the iKfast solver plugin for MoveIt on the machine which you plan to run the example:
Get the latest version of QTrobot open software repository
cd ~/robot/code/software
git pull
If the folder doesn't exists:
cd ~/robot/code/
git clone https://github.com/luxai-qtrobot/software.git
build the plugins:
cd ~/catkin_ws/src
ln -s ~/software/plugins/qtrobot_ikfast_right_arm_plugin .
ln -s ~/software/plugins/qtrobot_ikfast_right_left_plugin .
cd ~/catkin_ws
catkin_make
Build the motors_moveit
Assuming that you already have the tutorial
repository (default path ~/robot/code/tutorials
):
cd ~/catkin_ws/src
ln -s ~/robot/code/tutorials/examples/motors_moveit ./
cd ~/catkin_ws
catkin_make
if you don't have it, then clone it and repeat the above process:
git clone https://github.com/luxai-qtrobot/tutorials
How to run the examples
Launch moveit_qtrobot.launch
to start move_group planner and rviz:
roslaunch motors_moveit moveit_qtrobot.launch
wait until rviz shows up, then run one of the following demos:
Drawing rectangle
rosrun motors_moveit draw_rectangle.py joint_states:=/qt_robot/joints/state
Drawing spiral
rosrun motors_moveit draw_spiral.py joint_states:=/qt_robot/joints/state