Robotics StackExchange | Archived questions

The kinematics plugin (arm) failed to load. and Kinematics solver could not be instantiated for joint group arm.

Hi, im a begginer of kinova, and im using ubuntu 16.04. im starting with moveit! for a virtual robot. Everything seems fine until i run:

roslaunch j2n6s300_moveit_config j2n6s300_virtual_robot_demo.launch

The error are:

ruxuan@ruxuan-Predator-G3-571:~$ roslaunch j2n6s300_moveit_config j2n6s300_virtual_robot_demo.launch
... logging to /home/ruxuan/.ros/log/4ed97efc-e307-11e8-9c10-f828197a2a1f/roslaunch-ruxuan-Predator-G3-571-7188.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

xacro: Traditional processing is deprecated. Switch to --inorder processing!
To check for compatibility of your document, use option --check-order.
For more infos, see http://wiki.ros.org/xacro#Processing_Order
xacro.py is deprecated; please use xacro instead
started roslaunch server http://localhost:41765/

SUMMARY
========

PARAMETERS
 * /joint_state_publisher/use_gui: False
 * /joint_state_publisher/zeros/j2n6s300_joint_2: 3.1415
 * /joint_state_publisher/zeros/j2n6s300_joint_3: 3.1415
 * /move_group/allow_trajectory_execution: True
 * /move_group/allowed_execution_duration_scaling: 1.2
 * /move_group/allowed_goal_duration_margin: 0.5
 * /move_group/arm/planner_configs: ['SBLkConfigDefau...
 * /move_group/capabilities: move_group/MoveGr...
 * /move_group/controller_list: [{'joints': ['j2n...
 * /move_group/gripper/planner_configs: ['SBLkConfigDefau...
 * /move_group/initial: [{'pose': 'Home',...
 * /move_group/jiggle_fraction: 0.05
 * /move_group/max_range: 5.0
 * /move_group/max_safe_path_cost: 1
 * /move_group/moveit_controller_manager: moveit_fake_contr...
 * /move_group/moveit_manage_controllers: True
 * /move_group/octomap_resolution: 0.025
 * /move_group/planner_configs/BKPIECEkConfigDefault/border_fraction: 0.9
 * /move_group/planner_configs/BKPIECEkConfigDefault/failed_expansion_score_factor: 0.5
 * /move_group/planner_configs/BKPIECEkConfigDefault/min_valid_path_fraction: 0.5
 * /move_group/planner_configs/BKPIECEkConfigDefault/range: 0.0
 * /move_group/planner_configs/BKPIECEkConfigDefault/type: geometric::BKPIECE
 * /move_group/planner_configs/ESTkConfigDefault/goal_bias: 0.05
 * /move_group/planner_configs/ESTkConfigDefault/range: 0.0
 * /move_group/planner_configs/ESTkConfigDefault/type: geometric::EST
 * /move_group/planner_configs/KPIECEkConfigDefault/border_fraction: 0.9
 * /move_group/planner_configs/KPIECEkConfigDefault/failed_expansion_score_factor: 0.5
 * /move_group/planner_configs/KPIECEkConfigDefault/goal_bias: 0.05
 * /move_group/planner_configs/KPIECEkConfigDefault/min_valid_path_fraction: 0.5
 * /move_group/planner_configs/KPIECEkConfigDefault/range: 0.0
 * /move_group/planner_configs/KPIECEkConfigDefault/type: geometric::KPIECE
 * /move_group/planner_configs/LBKPIECEkConfigDefault/border_fraction: 0.9
 * /move_group/planner_configs/LBKPIECEkConfigDefault/min_valid_path_fraction: 0.5
 * /move_group/planner_configs/LBKPIECEkConfigDefault/range: 0.0
 * /move_group/planner_configs/LBKPIECEkConfigDefault/type: geometric::LBKPIECE
 * /move_group/planner_configs/PRMkConfigDefault/max_nearest_neighbors: 10
 * /move_group/planner_configs/PRMkConfigDefault/type: geometric::PRM
 * /move_group/planner_configs/PRMstarkConfigDefault/type: geometric::PRMstar
 * /move_group/planner_configs/RRTConnectkConfigDefault/range: 0.0
 * /move_group/planner_configs/RRTConnectkConfigDefault/type: geometric::RRTCon...
 * /move_group/planner_configs/RRTkConfigDefault/goal_bias: 0.05
 * /move_group/planner_configs/RRTkConfigDefault/range: 0.0
 * /move_group/planner_configs/RRTkConfigDefault/type: geometric::RRT
 * /move_group/planner_configs/RRTstarkConfigDefault/delay_collision_checking: 1
 * /move_group/planner_configs/RRTstarkConfigDefault/goal_bias: 0.05
 * /move_group/planner_configs/RRTstarkConfigDefault/range: 0.0
 * /move_group/planner_configs/RRTstarkConfigDefault/type: geometric::RRTstar
 * /move_group/planner_configs/SBLkConfigDefault/range: 0.0
 * /move_group/planner_configs/SBLkConfigDefault/type: geometric::SBL
 * /move_group/planner_configs/TRRTkConfigDefault/frountierNodeRatio: 0.1
 * /move_group/planner_configs/TRRTkConfigDefault/frountier_threshold: 0.0
 * /move_group/planner_configs/TRRTkConfigDefault/goal_bias: 0.05
 * /move_group/planner_configs/TRRTkConfigDefault/init_temperature: 10e-6
 * /move_group/planner_configs/TRRTkConfigDefault/k_constant: 0.0
 * /move_group/planner_configs/TRRTkConfigDefault/max_states_failed: 10
 * /move_group/planner_configs/TRRTkConfigDefault/min_temperature: 10e-10
 * /move_group/planner_configs/TRRTkConfigDefault/range: 0.0
 * /move_group/planner_configs/TRRTkConfigDefault/temp_change_factor: 2.0
 * /move_group/planner_configs/TRRTkConfigDefault/type: geometric::TRRT
 * /move_group/planning_plugin: ompl_interface/OM...
 * /move_group/planning_scene_monitor/publish_geometry_updates: True
 * /move_group/planning_scene_monitor/publish_planning_scene: True
 * /move_group/planning_scene_monitor/publish_state_updates: True
 * /move_group/planning_scene_monitor/publish_transforms_updates: True
 * /move_group/request_adapters: default_planner_r...
 * /move_group/start_state_max_bounds_error: 0.1
 * /pick_place_demo/arm/solve_type: Manipulation2
 * /robot_connected: False
 * /robot_description: <?xml version="1....
 * /robot_description_kinematics/arm/kinematics_solver: trac_ik_kinematic...
 * /robot_description_kinematics/arm/kinematics_solver_attempts: 3
 * /robot_description_kinematics/arm/kinematics_solver_search_resolution: 0.005
 * /robot_description_kinematics/arm/kinematics_solver_timeout: 0.005
 * /robot_description_kinematics/arm/solve_type: Distance
 * /robot_description_planning/joint_limits/j2n6s300_joint_1/has_acceleration_limits: False
 * /robot_description_planning/joint_limits/j2n6s300_joint_1/has_velocity_limits: True
 * /robot_description_planning/joint_limits/j2n6s300_joint_1/max_acceleration: 0
 * /robot_description_planning/joint_limits/j2n6s300_joint_1/max_velocity: 0.35
 * /robot_description_planning/joint_limits/j2n6s300_joint_2/has_acceleration_limits: False
 * /robot_description_planning/joint_limits/j2n6s300_joint_2/has_velocity_limits: True
 * /robot_description_planning/joint_limits/j2n6s300_joint_2/max_acceleration: 0
 * /robot_description_planning/joint_limits/j2n6s300_joint_2/max_velocity: 0.35
 * /robot_description_planning/joint_limits/j2n6s300_joint_3/has_acceleration_limits: False
 * /robot_description_planning/joint_limits/j2n6s300_joint_3/has_velocity_limits: True
 * /robot_description_planning/joint_limits/j2n6s300_joint_3/max_acceleration: 0
 * /robot_description_planning/joint_limits/j2n6s300_joint_3/max_velocity: 0.35
 * /robot_description_planning/joint_limits/j2n6s300_joint_4/has_acceleration_limits: False
 * /robot_description_planning/joint_limits/j2n6s300_joint_4/has_velocity_limits: True
 * /robot_description_planning/joint_limits/j2n6s300_joint_4/max_acceleration: 0
 * /robot_description_planning/joint_limits/j2n6s300_joint_4/max_velocity: 0.35
 * /robot_description_planning/joint_limits/j2n6s300_joint_5/has_acceleration_limits: False
 * /robot_description_planning/joint_limits/j2n6s300_joint_5/has_velocity_limits: True
 * /robot_description_planning/joint_limits/j2n6s300_joint_5/max_acceleration: 0
 * /robot_description_planning/joint_limits/j2n6s300_joint_5/max_velocity: 0.35
 * /robot_description_planning/joint_limits/j2n6s300_joint_6/has_acceleration_limits: False
 * /robot_description_planning/joint_limits/j2n6s300_joint_6/has_velocity_limits: True
 * /robot_description_planning/joint_limits/j2n6s300_joint_6/max_acceleration: 0
 * /robot_description_planning/joint_limits/j2n6s300_joint_6/max_velocity: 0.35
 * /robot_description_planning/joint_limits/j2n6s300_joint_finger_1/has_acceleration_limits: False
 * /robot_description_planning/joint_limits/j2n6s300_joint_finger_1/has_velocity_limits: True
 * /robot_description_planning/joint_limits/j2n6s300_joint_finger_1/max_acceleration: 0
 * /robot_description_planning/joint_limits/j2n6s300_joint_finger_1/max_velocity: 5
 * /robot_description_planning/joint_limits/j2n6s300_joint_finger_2/has_acceleration_limits: False
 * /robot_description_planning/joint_limits/j2n6s300_joint_finger_2/has_velocity_limits: True
 * /robot_description_planning/joint_limits/j2n6s300_joint_finger_2/max_acceleration: 0
 * /robot_description_planning/joint_limits/j2n6s300_joint_finger_2/max_velocity: 5
 * /robot_description_planning/joint_limits/j2n6s300_joint_finger_3/has_acceleration_limits: False
 * /robot_description_planning/joint_limits/j2n6s300_joint_finger_3/has_velocity_limits: True
 * /robot_description_planning/joint_limits/j2n6s300_joint_finger_3/max_acceleration: 0
 * /robot_description_planning/joint_limits/j2n6s300_joint_finger_3/max_velocity: 5
 * /robot_description_planning/joint_limits/j2n6s300_joint_finger_tip_1/has_acceleration_limits: False
 * /robot_description_planning/joint_limits/j2n6s300_joint_finger_tip_1/has_velocity_limits: True
 * /robot_description_planning/joint_limits/j2n6s300_joint_finger_tip_1/max_acceleration: 0
 * /robot_description_planning/joint_limits/j2n6s300_joint_finger_tip_1/max_velocity: 5
 * /robot_description_planning/joint_limits/j2n6s300_joint_finger_tip_2/has_acceleration_limits: False
 * /robot_description_planning/joint_limits/j2n6s300_joint_finger_tip_2/has_velocity_limits: True
 * /robot_description_planning/joint_limits/j2n6s300_joint_finger_tip_2/max_acceleration: 0
 * /robot_description_planning/joint_limits/j2n6s300_joint_finger_tip_2/max_velocity: 5
 * /robot_description_planning/joint_limits/j2n6s300_joint_finger_tip_3/has_acceleration_limits: False
 * /robot_description_planning/joint_limits/j2n6s300_joint_finger_tip_3/has_velocity_limits: True
 * /robot_description_planning/joint_limits/j2n6s300_joint_finger_tip_3/max_acceleration: 0
 * /robot_description_planning/joint_limits/j2n6s300_joint_finger_tip_3/max_velocity: 5
 * /robot_description_semantic: <?xml version="1....
 * /robot_type: j2n6s300
 * /rosdistro: kinetic
 * /rosversion: 1.12.14
 * /rviz_ruxuan_Predator_G3_571_7188_2954315284843418521/arm/kinematics_solver: trac_ik_kinematic...
 * /rviz_ruxuan_Predator_G3_571_7188_2954315284843418521/arm/kinematics_solver_attempts: 3
 * /rviz_ruxuan_Predator_G3_571_7188_2954315284843418521/arm/kinematics_solver_search_resolution: 0.005
 * /rviz_ruxuan_Predator_G3_571_7188_2954315284843418521/arm/kinematics_solver_timeout: 0.005
 * /rviz_ruxuan_Predator_G3_571_7188_2954315284843418521/arm/solve_type: Distance
 * /source_list: ['/move_group/fak...

NODES
  /
    joint_state_publisher (joint_state_publisher/joint_state_publisher)
    move_group (moveit_ros_move_group/move_group)
    robot_state_publisher (robot_state_publisher/robot_state_publisher)
    rviz_ruxuan_Predator_G3_571_7188_2954315284843418521 (rviz/rviz)

ROS_MASTER_URI=http://localhost:11311

process[joint_state_publisher-1]: started with pid [7208]
process[robot_state_publisher-2]: started with pid [7209]
process[move_group-3]: started with pid [7210]
process[rviz_ruxuan_Predator_G3_571_7188_2954315284843418521-4]: started with pid [7211]
[ INFO] [1541648133.772051607]: Loading robot model 'j2n6s300'...
[ WARN] [1541648133.772114702]: Skipping virtual joint 'world_joint' because its child frame 'root' does not match the URDF frame 'world'
[ INFO] [1541648133.772126760]: No root/virtual joint specified in SRDF. Assuming fixed joint
[ INFO] [1541648133.821511341]: rviz version 1.12.16
[ INFO] [1541648133.821551969]: compiled against Qt version 5.5.1
[ INFO] [1541648133.821561454]: compiled against OGRE version 1.9.0 (Ghadamon)
[ INFO] [1541648133.926110354]: Stereo is NOT SUPPORTED
[ INFO] [1541648133.926204321]: OpenGl version: 3 (GLSL 1.3).
[ERROR] [1541648133.969137768]: The kinematics plugin (arm) failed to load. Error: According to the loaded plugin descriptions the class trac_ik_kinematics_plugin/TRAC_IKKinematicsPlugin with base class type kinematics::KinematicsBase does not exist. Declared types are  cached_ik_kinematics_plugin/CachedKDLKinematicsPlugin cached_ik_kinematics_plugin/CachedSrvKinematicsPlugin j2n6s300_arm_kinematics/IKFastKinematicsPlugin j2s6s300_arm_kinematics/IKFastKinematicsPlugin j2s7s300_robot_arm_kinematics/IKFastKinematicsPlugin kdl_kinematics_plugin/KDLKinematicsPlugin lma_kinematics_plugin/LMAKinematicsPlugin m1n6s300_mico_arm_kinematics/IKFastKinematicsPlugin srv_kinematics_plugin/SrvKinematicsPlugin
[ERROR] [1541648133.969199370]: Kinematics solver could not be instantiated for joint group arm.
[ INFO] [1541648134.404314689]: Publishing maintained planning scene on 'monitored_planning_scene'
[ INFO] [1541648134.406943049]: MoveGroup debug mode is ON
Starting context monitors...
[ INFO] [1541648134.407005230]: Starting scene monitor
[ INFO] [1541648134.409404680]: Listening to '/planning_scene'
[ INFO] [1541648134.409445392]: Starting world geometry monitor
[ INFO] [1541648134.411696690]: Listening to '/collision_object' using message notifier with target frame '/world '
[ INFO] [1541648134.414140962]: Listening to '/planning_scene_world' for planning scene world geometry
[ INFO] [1541648135.045999910]: Listening to '/attached_collision_object' for attached collision objects
Context monitors started.
[ INFO] [1541648135.072077075]: Initializing OMPL interface using ROS parameters
[ INFO] [1541648135.101670548]: Using planning interface 'OMPL'
[ INFO] [1541648135.107534190]: Param 'default_workspace_bounds' was not set. Using default value: 10
[ INFO] [1541648135.108294730]: Param 'start_state_max_bounds_error' was set to 0.1
[ INFO] [1541648135.109155710]: Param 'start_state_max_dt' was not set. Using default value: 0.5
[ INFO] [1541648135.109905548]: Param 'start_state_max_dt' was not set. Using default value: 0.5
[ INFO] [1541648135.110559687]: Param 'jiggle_fraction' was set to 0.05
[ INFO] [1541648135.111312685]: Param 'max_sampling_attempts' was not set. Using default value: 100
[ INFO] [1541648135.111383887]: Using planning request adapter 'Add Time Parameterization'
[ INFO] [1541648135.111398888]: Using planning request adapter 'Fix Workspace Bounds'
[ INFO] [1541648135.111410490]: Using planning request adapter 'Fix Start State Bounds'
[ INFO] [1541648135.111420929]: Using planning request adapter 'Fix Start State In Collision'
[ INFO] [1541648135.111430291]: Using planning request adapter 'Fix Start State Path Constraints'
[ WARN] [1541648135.113962437]: 
Deprecation warning: parameter 'allowed_execution_duration_scaling' moved into namespace 'trajectory_execution'.
Please, adjust file trajectory_execution.launch.xml!
[ WARN] [1541648135.114480527]: 
Deprecation warning: parameter 'allowed_goal_duration_margin' moved into namespace 'trajectory_execution'.
Please, adjust file trajectory_execution.launch.xml!
[ INFO] [1541648135.122573432]: Loading robot model 'j2n6s300'...
[ WARN] [1541648135.122661714]: Skipping virtual joint 'world_joint' because its child frame 'root' does not match the URDF frame 'world'
[ INFO] [1541648135.122682437]: No root/virtual joint specified in SRDF. Assuming fixed joint
[ERROR] [1541648135.299379633]: The kinematics plugin (arm) failed to load. Error: According to the loaded plugin descriptions the class trac_ik_kinematics_plugin/TRAC_IKKinematicsPlugin with base class type kinematics::KinematicsBase does not exist. Declared types are  cached_ik_kinematics_plugin/CachedKDLKinematicsPlugin cached_ik_kinematics_plugin/CachedSrvKinematicsPlugin j2n6s300_arm_kinematics/IKFastKinematicsPlugin j2s6s300_arm_kinematics/IKFastKinematicsPlugin j2s7s300_robot_arm_kinematics/IKFastKinematicsPlugin kdl_kinematics_plugin/KDLKinematicsPlugin lma_kinematics_plugin/LMAKinematicsPlugin m1n6s300_mico_arm_kinematics/IKFastKinematicsPlugin srv_kinematics_plugin/SrvKinematicsPlugin
[ERROR] [1541648135.299433832]: Kinematics solver could not be instantiated for joint group arm.
[ INFO] [1541648135.299496289]: Set joints of group 'arm' to pose 'Home'.
[ INFO] [1541648135.299730555]: Fake controller 'fake_arm_controller' with joints [ j2n6s300_joint_1 j2n6s300_joint_2 j2n6s300_joint_3 j2n6s300_joint_4 j2n6s300_joint_5 j2n6s300_joint_6 ]
[ INFO] [1541648135.300273798]: Fake controller 'fake_gripper_controller' with joints [ j2n6s300_joint_finger_1 j2n6s300_joint_finger_2 j2n6s300_joint_finger_3 ]
[ INFO] [1541648135.300841869]: Returned 2 controllers in list
[ INFO] [1541648135.315882765]: Trajectory execution is managing controllers
Loading 'move_group/ApplyPlanningSceneService'...
Loading 'move_group/ClearOctomapService'...
Loading 'move_group/MoveGroupCartesianPathService'...
Loading 'move_group/MoveGroupExecuteService'...
Loading 'move_group/MoveGroupExecuteTrajectoryAction'...
Loading 'move_group/MoveGroupGetPlanningSceneService'...
Loading 'move_group/MoveGroupKinematicsService'...
Loading 'move_group/MoveGroupMoveAction'...
Loading 'move_group/MoveGroupPickPlaceAction'...
Loading 'move_group/MoveGroupPlanService'...
Loading 'move_group/MoveGroupQueryPlannersService'...
Loading 'move_group/MoveGroupStateValidationService'...
[ INFO] [1541648135.388718985]: 

********************************************************
* MoveGroup using: 
*     - ApplyPlanningSceneService
*     - ClearOctomapService
*     - CartesianPathService
*     - ExecuteTrajectoryService
*     - ExecuteTrajectoryAction
*     - GetPlanningSceneService
*     - KinematicsService
*     - MoveAction
*     - PickPlaceAction
*     - MotionPlanService
*     - QueryPlannersService
*     - StateValidationService
********************************************************

[ INFO] [1541648135.388828460]: MoveGroup context using planning plugin ompl_interface/OMPLPlanner
[ INFO] [1541648135.388857640]: MoveGroup context initialization complete

You can start planning now!

[ INFO] [1541648137.318264270]: Loading robot model 'j2n6s300'...
[ WARN] [1541648137.318301893]: Skipping virtual joint 'world_joint' because its child frame 'root' does not match the URDF frame 'world'
[ INFO] [1541648137.318314999]: No root/virtual joint specified in SRDF. Assuming fixed joint
[ERROR] [1541648137.484755679]: The kinematics plugin (arm) failed to load. Error: According to the loaded plugin descriptions the class trac_ik_kinematics_plugin/TRAC_IKKinematicsPlugin with base class type kinematics::KinematicsBase does not exist. Declared types are  cached_ik_kinematics_plugin/CachedKDLKinematicsPlugin cached_ik_kinematics_plugin/CachedSrvKinematicsPlugin j2n6s300_arm_kinematics/IKFastKinematicsPlugin j2s6s300_arm_kinematics/IKFastKinematicsPlugin j2s7s300_robot_arm_kinematics/IKFastKinematicsPlugin kdl_kinematics_plugin/KDLKinematicsPlugin lma_kinematics_plugin/LMAKinematicsPlugin m1n6s300_mico_arm_kinematics/IKFastKinematicsPlugin srv_kinematics_plugin/SrvKinematicsPlugin
[ERROR] [1541648137.484798253]: Kinematics solver could not be instantiated for joint group arm.
[ INFO] [1541648137.955413432]: Starting scene monitor
[ INFO] [1541648137.958843973]: Listening to '/move_group/monitored_planning_scene'
[ INFO] [1541648138.186731388]: No active joints or end effectors found for group 'arm'. Make sure that kinematics.yaml is loaded in this node's namespace.
[ INFO] [1541648138.187791159]: Constructing new MoveGroup connection for group 'arm' in namespace ''
[ WARN] [1541648139.042690424]: 
Deprecation warning: Trajectory execution service is deprecated (was replaced by an action).
Replace 'MoveGroupExecuteService' with 'MoveGroupExecuteTrajectoryAction' in move_group.launch
[ INFO] [1541648139.045148516]: Ready to take commands for planning group arm.
[ INFO] [1541648139.045196313]: Looking around: no
[ INFO] [1541648139.045224570]: Replanning: no

Anyone could help me with the issue i have here? Many thanks!

Asked by ruxuan.kuang521 on 2018-11-07 22:48:11 UTC

Comments

This log output doesn't actually contain any errors. What behavior are you expecting here?

Asked by BryceWilley on 2018-11-07 23:50:49 UTC

Please don't cross-post (ros-planning/moveit#1190).

Asked by gvdhoorn on 2018-11-08 03:14:34 UTC

Answers

[ERROR] [1541648137.484755679]: The kinematics plugin (arm) failed to load. Error: According to the loaded plugin descriptions the class trac_ik_kinematics_plugin/TRAC_IKKinematicsPlugin with base class type kinematics::KinematicsBase does not exist. Declared types are  cached_ik_kinematics_plugin/CachedKDLKinematicsPlugin cached_ik_kinematics_plugin/CachedSrvKinematicsPlugin j2n6s300_arm_kinematics/IKFastKinematicsPlugin j2s6s300_arm_kinematics/IKFastKinematicsPlugin j2s7s300_robot_arm_kinematics/IKFastKinematicsPlugin kdl_kinematics_plugin/KDLKinematicsPlugin lma_kinematics_plugin/LMAKinematicsPlugin m1n6s300_mico_arm_kinematics/IKFastKinematicsPlugin srv_kinematics_plugin/SrvKinematicsPlugin

The important bit of this error message is this:

Error: According to the loaded plugin descriptions the class trac_ik_kinematics_plugin/TRAC_IKKinematicsPlugin with base class type kinematics::KinematicsBase does not exist.

In most cases, this means you don't actually have that plugin installed.

To make sure, check the output of dpkg -l | grep trac-ik. If you don't get any output, or if trac-ik-kinematics-plugin is not in the list, you don't have the package installed.

To install it:

sudo apt-get install ros-kinetic-trac-ik-kinematics-plugin

Asked by gvdhoorn on 2018-11-08 03:18:05 UTC

Comments

thx a lot!

Asked by ruxuan.kuang521 on 2018-11-08 15:33:21 UTC

it works fine right now!

Asked by ruxuan.kuang521 on 2018-11-08 15:33:33 UTC