Skip to content

Commit

Permalink
add experiment demo files
Browse files Browse the repository at this point in the history
  • Loading branch information
duISIR committed May 26, 2023
1 parent c85b78b commit 49ab62c
Show file tree
Hide file tree
Showing 12 changed files with 3,555 additions and 7 deletions.
8 changes: 7 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,17 +60,23 @@ With admittance control in local frame and obstacle avoidance, MPC tracking oper
With motion planning of two end-effectors' positions, MPC tracking operational trajectory with admittance control in local frame
1. roslaunch chonk_pushing gazebo_planner_MPC_BC_operational_pick_localsensorAD_obstacle_wholetrajectory.launch or
roslaunch chonk_pushing gazebo_planner_MPC_BC_operational_pick_localsensorAD_obstacle_wholetrajectory_turn.launch
2. roslaunch chonk_pushing action_servers_MPC_BC_operational_pick_localsensorAD_obstacle_wholetrajectory.launch
roslaunch chonk_pushing gazebo_planner_MPC_BC_operational_pick_localsensorAD_obstacle_wholetrajectory_turn_experimentgazebo.launch
2. roslaunch chonk_pushing action_servers_MPC_BC_operational_pick_localsensorAD_obstacle_wholetrajectory.launch
roslaunch chonk_pushing action_servers_MPC_BC_operational_pick_localsensorAD_obstacle_wholetrajectory_turn_experimentgazebo.launch
3. roslaunch chonk_dynamics chonk_dynamics.launch
4. rosrun chonk_pushing action_client_cmd_pose_MPC_BC_operational_pick_localsensorAD_obstacle_wholetrajectory.py or
rosrun chonk_pushing action_client_cmd_pose_MPC_BC_operational_pick_localsensorAD_obstacle_wholetrajectory_turn.py
rosrun chonk_pushing action_client_cmd_pose_MPC_BC_operational_pick_localsensorAD_obstacle_wholetrajectory_turn_experimentgazebo.py

With motion planning of two end-effectors' positions and orientation, MPC tracking operational trajectory with admittance control in local frame
1. roslaunch chonk_pushing gazebo_planner_MPC_BC_operational_pick_localsensorAD_obstacle_wholetrajectory_withOrientation.launch or
roslaunch chonk_pushing gazebo_planner_MPC_BC_operational_pick_localsensorAD_obstacle_wholetrajectory_withOrientation_turn.launch
roslaunch chonk_pushing gazebo_planner_MPC_BC_operational_pick_localsensorAD_obstacle_wholetrajectory_withOrientation_turn_experimentgazebo.launch
2. roslaunch chonk_pushing action_servers_MPC_BC_operational_pick_localsensorAD_obstacle_wholetrajectory_withOrientation.launch
roslaunch chonk_pushing action_servers_MPC_BC_operational_pick_localsensorAD_obstacle_wholetrajectory_withOrientation_turn_experimentgazebo.launch
3. roslaunch chonk_dynamics chonk_dynamics.launch
4. rosrun chonk_pushing action_client_cmd_pose_MPC_BC_operational_pick_localsensorAD_obstacle_wholetrajectory_withOrientation.py or
rosrun chonk_pushing action_client_cmd_pose_MPC_BC_operational_pick_localsensorAD_obstacle_wholetrajectory_withOrientation_turn.py
rosrun chonk_pushing action_client_cmd_pose_MPC_BC_operational_pick_localsensorAD_obstacle_wholetrajectory_withOrientation_turn_experimentgazebo.py


Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
name="action_server_cmd_pose_MPC_BC_operational_AD"
pkg="chonk_pushing"
ns="/$(arg robot_name)"
type="action_server_cmd_pose_MPC_BC_operational_pick_localsensorAD_obstacle_wholetrajectory_experimentgazebo.py"
type="action_server_cmd_pose_MPC_BC_operational_pick_localsensorAD_obstacle_wholetrajectory_turn_experimentgazebo.py"
output="screen"
>
<param name="link_donkey" type="string" value="link_donkey"/>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
<?xml version="1.0"?>

<launch>
<!-- set global arguments -->
<arg name="robot_name" default="chonk"/>
<param name="robot_description_wholebody" command="$(find xacro)/xacro --inorder '$(find chonk_pushing)/urdf/chonk_pushing_wholebody.urdf'"/>


<!-- Spawn position controller -->
<node
name="trajectory_controller"
pkg="controller_manager"
type="spawner"
ns="/$(arg robot_name)"
args="/$(arg robot_name)/trajectory_controller"
respawn="false"
output="screen"
/>

<!-- Launch a mux to send commands to the robot only from one source/controller -->
<node
name="mux_joint_position"
pkg="topic_tools"
type="mux"
ns="/$(arg robot_name)"
args="trajectory_controller/command
streaming_controller/command
DefaultPositionController/command
ActionCmdPosePositionController/command
ActionCmdConfigPositionController/command
ActionTeleop2DPositionController/command
mux:=mux_joint_position"
/>
<!-- Action Service Node for commanding end-effector poses -->
<node
name="action_server_cmd_config"
pkg="chonk_pushing"
ns="/$(arg robot_name)"
type="action_server_cmd_config_wholetrajectory.py"
output="screen"
>
<param name="cmd_topic_name" type="string" value="/$(arg robot_name)/ActionCmdConfigPositionController/command"/>
<remap from="/joint_states" to="/$(arg robot_name)/joint_states"/>
<remap from="/mux_selected" to="/$(arg robot_name)/mux_joint_position/selected"/>
</node>
<!-- Action Service Node for planning joint positions and build MPC to track the planning results -->
<node
name="action_server_cmd_pose_MPC_BC_operational_AD"
pkg="chonk_pushing"
ns="/$(arg robot_name)"
type="action_server_cmd_pose_MPC_BC_operational_pick_localsensorAD_obstacle_wholetrajectory_withOrientation_turn_experiment.py"
output="screen"
>
<param name="link_donkey" type="string" value="link_donkey"/>
<!-- <param name="link_ee_right" type="string" value="RARM_END_EFFECTOR_finger"/>
<param name="link_ee_left" type="string" value="LARM_END_EFFECTOR_finger"/>-->
<param name="link_ee_right" type="string" value="RARM_END_EFFECTOR_grasp"/>
<param name="link_ee_left" type="string" value="LARM_END_EFFECTOR_grasp"/>
<!-- <param name="link_sensor_right" type="string" value="RARM_changer_link_base"/>
<param name="link_sensor_left" type="string" value="LARM_changer_link_base"/>-->
<param name="link_head" type="string" value="CAMERA_HEAD_HEADING_Link"/>
<param name="link_gaze" type="string" value="gaze_ref"/>
<param name="cmd_topic_name" type="string" value="/$(arg robot_name)/ActionCmdPosePositionController/command"/>
<remap from="/joint_states" to="/$(arg robot_name)/joint_states"/>
<remap from="/mux_selected" to="/$(arg robot_name)/mux_joint_position/selected"/>
</node>

</launch>
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
<?xml version="1.0"?>

<launch>
<!-- set global arguments -->
<arg name="robot_name" default="chonk"/>

<!-- Spawn position controller -->
<node
name="trajectory_controller"
pkg="controller_manager"
type="spawner"
ns="/$(arg robot_name)"
args="/$(arg robot_name)/trajectory_controller"
respawn="false"
output="screen"
/>

<!-- Launch a mux to send commands to the robot only from one source/controller -->
<node
name="mux_joint_position"
pkg="topic_tools"
type="mux"
ns="/$(arg robot_name)"
args="trajectory_controller/command
streaming_controller/command
DefaultPositionController/command
ActionCmdPosePositionController/command
ActionCmdConfigPositionController/command
ActionTeleop2DPositionController/command
mux:=mux_joint_position"
/>
<!-- Action Service Node for commanding end-effector poses -->
<node
name="action_server_cmd_config"
pkg="chonk_pushing"
ns="/$(arg robot_name)"
type="action_server_cmd_config_wholetrajectory.py"
output="screen"
>
<param name="cmd_topic_name" type="string" value="/$(arg robot_name)/ActionCmdConfigPositionController/command"/>
<remap from="/joint_states" to="/$(arg robot_name)/joint_states"/>
<remap from="/mux_selected" to="/$(arg robot_name)/mux_joint_position/selected"/>
</node>
<!-- Action Service Node for planning joint positions and build MPC to track the planning results -->
<node
name="action_server_cmd_pose_MPC_BC_operational_AD"
pkg="chonk_pushing"
ns="/$(arg robot_name)"
type="action_server_cmd_pose_MPC_BC_operational_pick_localsensorAD_obstacle_wholetrajectory_withOrientation_turn_experimentgazebo.py"
output="screen"
>
<param name="link_donkey" type="string" value="link_donkey"/>
<!-- <param name="link_ee_right" type="string" value="RARM_END_EFFECTOR_finger"/>
<param name="link_ee_left" type="string" value="LARM_END_EFFECTOR_finger"/>-->
<param name="link_ee_right" type="string" value="RARM_END_EFFECTOR_grasp"/>
<param name="link_ee_left" type="string" value="LARM_END_EFFECTOR_grasp"/>
<!-- <param name="link_sensor_right" type="string" value="RARM_changer_link_base"/>
<param name="link_sensor_left" type="string" value="LARM_changer_link_base"/>-->
<param name="link_head" type="string" value="CAMERA_HEAD_HEADING_Link"/>
<param name="link_gaze" type="string" value="gaze_ref"/>
<param name="cmd_topic_name" type="string" value="/$(arg robot_name)/ActionCmdPosePositionController/command"/>
<remap from="/joint_states" to="/$(arg robot_name)/joint_states"/>
<remap from="/mux_selected" to="/$(arg robot_name)/mux_joint_position/selected"/>
</node>
<!-- Action Service Node for teleoperating robot in 2D -->
<node
name="action_server_teleop_2d"
pkg="chonk_pushing"
ns="/$(arg robot_name)"
type="action_server_teleop_2d.py"
output="screen"
>
<param name="link_ee_right" type="string" value="RARM_END_EFFECTOR_finger"/>
<param name="link_ee_left" type="string" value="LARM_END_EFFECTOR_finger"/>
<param name="link_head" type="string" value="CAMERA_HEAD_HEADING_Link"/>
<param name="link_ref" type="string" value="teleop_ref"/>
<param name="link_gaze" type="string" value="gaze_ref"/>
<param name="cmd_topic_name" type="string" value="/$(arg robot_name)/ActionTeleop2DPositionController/command"/>
<param name="x_min" type="double" value="0.2"/>
<param name="x_max" type="double" value="0.8"/>
<param name="y_min" type="double" value="-0.5"/>
<param name="y_max" type="double" value="0.5"/>
<!-- <param name="roll_min" type="double" value="-25"/>
<param name="roll_max" type="double" value="25"/>
<param name="pitch_min" type="double" value="-20"/>
<param name="pitch_max" type="double" value="70"/> -->
<param name="roll_min" type="double" value="0"/>
<param name="roll_max" type="double" value="0"/>
<param name="pitch_min" type="double" value="0"/>
<param name="pitch_max" type="double" value="0"/>
<param name="yaw_min" type="double" value="-120"/>
<param name="yaw_max" type="double" value="120"/>
<remap from="/joint_states" to="/$(arg robot_name)/joint_states"/>
<remap from="/mux_selected" to="/$(arg robot_name)/mux_joint_position/selected"/>
</node>
</launch>
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
<?xml version="1.0"?>

<launch>
<!-- set global arguments -->
<arg name="robot_name" default="chonk"/>
<param name="robot_description" command="$(find xacro)/xacro --inorder '$(find chonk_pushing)/urdf/chonk_pushing.urdf.xacro'"/>
<param name="robot_description_wholebody" command="$(find xacro)/xacro --inorder '$(find chonk_pushing)/urdf/chonk_pushing_wholebody.urdf'"/>



<!-- Loads the Gazebo world -->
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="world_name" value="$(find chonk_pushing)/world/chonk_pick_turn_obstacle_experiment.world"/>
<arg name="debug" value="false" />
<arg name="gui" value="true" />
<arg name="gui_required" value="true"/>
<arg name="paused" value="false"/>
<arg name="use_sim_time" value="true"/>
<arg name="recording" value="false"/>
</include>

<!-- Run a python script to send a service call to gazebo_ros to spawn a URDF robot -->
<node
name="urdf_spawner"
pkg="gazebo_ros"
type="spawn_model"
respawn="false"
output="screen"
args="-urdf -model $(arg robot_name) -param robot_description -x 0 -y 0 -z 0"
/>
<!-- Load joint controller configurations from YAML file to parameter server -->
<rosparam
file="$(find chonk_gazebo)/config/chonk_pushing_control_pick_wholetrajectory.yaml"
command="load"
ns="$(arg robot_name)"
/>

<!-- load the controllers -->
<node
name="controller_spawner"
pkg="controller_manager"
type="spawner"
respawn="false"
output="screen"
ns="/$(arg robot_name)"
args="/$(arg robot_name)/joint_state_controller"
/>

<!-- convert joint states to TF transforms -->
<node
name="robot_state_publisher"
pkg="robot_state_publisher"
type="robot_state_publisher"
respawn="false"
output="screen"
>
<remap from="/joint_states" to="/$(arg robot_name)/joint_states" />
</node>

<!-- Spawn position controller -->
<!-- <node
name="position_controller"
pkg="controller_manager"
type="spawner"
ns="/$(arg robot_name)"
args="/$(arg robot_name)/streaming_controller"
respawn="false"
output="screen"
/>-->

<!-- Spawn velocity controller -->
<node
name="velocity_controller"
pkg="controller_manager"
type="spawner"
ns="/$(arg robot_name)"
args="/$(arg robot_name)/donkey_velocity_controller"
respawn="false"
output="screen"
/>


</launch>
2 changes: 1 addition & 1 deletion script/action_client_cmd_config_wholetrajectory.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ def feedback_cb(self, feedback):
type=float, default=[0., 0., 0., 0., 0., -30., 0., 30., 90., 0., 0., -30., 0., 30., -90],
metavar=('CHEST_JOINT0', 'HEAD_JOINT0', 'HEAD_JOINT1', 'LARM_JOINT0', 'LARM_JOINT1', 'LARM_JOINT2', 'LARM_JOINT3', 'LARM_JOINT4', 'LARM_JOINT5', 'RARM_JOINT0', 'RARM_JOINT1', 'RARM_JOINT2', 'RARM_JOINT3', 'RARM_JOINT4', 'RARM_JOINT5' )
)
parser.add_argument("--duration", help="Give duration of motion in seconds.", type=float, default=5.0)
parser.add_argument("--duration", help="Give duration of motion in seconds.", type=float, default=4.0)
args = vars(parser.parse_args())
# get arguments
target_config = [deg2rad(q) for q in args['target_config']]
Expand Down
Loading

0 comments on commit 49ab62c

Please sign in to comment.