diff --git a/controllers/unitree_guide_controller/launch/gazebo_classic.launch.py b/controllers/unitree_guide_controller/launch/gazebo_classic.launch.py index 2962525..7b6259e 100644 --- a/controllers/unitree_guide_controller/launch/gazebo_classic.launch.py +++ b/controllers/unitree_guide_controller/launch/gazebo_classic.launch.py @@ -10,13 +10,10 @@ from launch_ros.actions import Node from launch_ros.substitutions import FindPackageShare from launch.launch_description_sources import PythonLaunchDescriptionSource -package_description = "go2_description" - - - def launch_setup(context, *args, **kwargs): package_description = context.launch_configurations['pkg_description'] + init_height = context.launch_configurations['height'] pkg_path = os.path.join(get_package_share_directory(package_description)) xacro_file = os.path.join(pkg_path, 'xacro', 'robot.xacro') @@ -42,7 +39,7 @@ def launch_setup(context, *args, **kwargs): spawn_entity = Node( package="gazebo_ros", executable="spawn_entity.py", - arguments=["-topic", "robot_description", "-entity", "robot", "-z", "0.5"], + arguments=["-topic", "robot_description", "-entity", "robot", "-z", init_height], output="screen", ) @@ -109,7 +106,14 @@ def generate_launch_description(): description='package for robot description' ) + height = DeclareLaunchArgument( + 'height', + default_value='0.5', + description='Init height in simulation' + ) + return LaunchDescription([ pkg_description, + height, OpaqueFunction(function=launch_setup), ]) \ No newline at end of file diff --git a/descriptions/deep_robotics/lite3_description/README.md b/descriptions/deep_robotics/lite3_description/README.md index 79a8f9d..bedbf12 100644 --- a/descriptions/deep_robotics/lite3_description/README.md +++ b/descriptions/deep_robotics/lite3_description/README.md @@ -45,7 +45,15 @@ ros2 launch lite3_description visualize.launch.py ros2 launch rl_quadruped_controller mujoco.launch.py pkg_description:=lite3_description model_folder:=legged_gym ``` -### Gazebo Simulator +### Gazebo Classic 11 (ROS2 Humble) + +* Unitree Guide Controller + ```bash + source ~/ros2_ws/install/setup.bash + ros2 launch unitree_guide_controller gazebo_classic.launch.py pkg_description:=lite3_description + ``` + +### Gazebo Harmonic (ROS2 Jazzy) * Unitree Guide Controller ```bash diff --git a/descriptions/deep_robotics/lite3_description/config/gazebo.yaml b/descriptions/deep_robotics/lite3_description/config/gazebo.yaml index 2711d98..258bc12 100644 --- a/descriptions/deep_robotics/lite3_description/config/gazebo.yaml +++ b/descriptions/deep_robotics/lite3_description/config/gazebo.yaml @@ -1,7 +1,7 @@ # Controller Manager configuration controller_manager: ros__parameters: - update_rate: 2000 # Hz + update_rate: 1000 # Hz # Define the available controllers joint_state_broadcaster: @@ -26,6 +26,7 @@ imu_sensor_broadcaster: leg_pd_controller: ros__parameters: + update_rate: 1000 # Hz joints: - FR_HipX - FR_HipY @@ -50,6 +51,8 @@ leg_pd_controller: unitree_guide_controller: ros__parameters: update_rate: 200 # Hz +# stand_kp: 30.0 + stand_kd: 1.0 command_prefix: "leg_pd_controller" joints: - FR_HipX diff --git a/descriptions/deep_robotics/lite3_description/xacro/body.xacro b/descriptions/deep_robotics/lite3_description/xacro/body.xacro index 5c2e186..520b856 100644 --- a/descriptions/deep_robotics/lite3_description/xacro/body.xacro +++ b/descriptions/deep_robotics/lite3_description/xacro/body.xacro @@ -2,6 +2,9 @@ + + + @@ -66,6 +69,7 @@ + @@ -94,6 +98,7 @@ + @@ -122,6 +127,7 @@ + @@ -163,6 +169,7 @@ + @@ -191,6 +198,7 @@ + @@ -219,6 +227,7 @@ + @@ -259,6 +268,7 @@ + @@ -287,6 +297,7 @@ + @@ -315,6 +326,7 @@ + @@ -355,6 +367,7 @@ + @@ -383,6 +396,7 @@ + @@ -411,6 +425,7 @@ + diff --git a/descriptions/deep_robotics/lite3_description/xacro/gazebo.xacro b/descriptions/deep_robotics/lite3_description/xacro/gazebo.xacro index 9960c1b..5bdd9a3 100644 --- a/descriptions/deep_robotics/lite3_description/xacro/gazebo.xacro +++ b/descriptions/deep_robotics/lite3_description/xacro/gazebo.xacro @@ -117,13 +117,6 @@ 0.6 0.6 1 - - - .05 .05 .05 1.0 - .05 .05 .05 1.0 - .05 .05 .05 1.0 - - diff --git a/descriptions/deep_robotics/lite3_description/xacro/gazebo_classic.xacro b/descriptions/deep_robotics/lite3_description/xacro/gazebo_classic.xacro new file mode 100644 index 0000000..9bb7f0e --- /dev/null +++ b/descriptions/deep_robotics/lite3_description/xacro/gazebo_classic.xacro @@ -0,0 +1,238 @@ + + + + + + gazebo_ros2_control/GazeboSystem + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(find lite3_description)/config/gazebo.yaml + + + + + 0.6 + 0.6 + 1 + + + + true + + true + 1000 + true + __default_topic__ + + trunk_imu + imu_link + 1000.0 + 0.0 + 0 0 0 + 0 0 0 + imu_link + + 0 0 0 0 0 0 + + + + + 0.2 + 0.2 + + + + + 0.2 + 0.2 + + + 0.2 + 0.2 + 1 + + + + + 0.2 + 0.2 + 1 + + + 0.6 + 0.6 + 1 + + + + + 0.2 + 0.2 + + + 0.2 + 0.2 + 1 + + + + + 0.2 + 0.2 + 1 + + + 0.6 + 0.6 + 1 + + + + + 0.2 + 0.2 + + + 0.2 + 0.2 + 1 + + + + + 0.2 + 0.2 + 1 + + + 0.6 + 0.6 + 1 + + + + + 0.2 + 0.2 + + + 0.2 + 0.2 + 1 + + + + + 0.2 + 0.2 + 1 + + + 0.6 + 0.6 + 1 + + + + + diff --git a/descriptions/deep_robotics/lite3_description/xacro/robot.xacro b/descriptions/deep_robotics/lite3_description/xacro/robot.xacro index 9be5845..b2a22a4 100644 --- a/descriptions/deep_robotics/lite3_description/xacro/robot.xacro +++ b/descriptions/deep_robotics/lite3_description/xacro/robot.xacro @@ -6,8 +6,16 @@ + + + - + + + + + + diff --git a/descriptions/deep_robotics/x30_description/README.md b/descriptions/deep_robotics/x30_description/README.md index 45e9b3e..0caba66 100644 --- a/descriptions/deep_robotics/x30_description/README.md +++ b/descriptions/deep_robotics/x30_description/README.md @@ -35,7 +35,15 @@ ros2 launch x30_description visualize.launch.py ros2 launch ocs2_quadruped_controller mujoco.launch.py pkg_description:=x30_description ``` -### Gazebo Simulator +### Gazebo Classic 11 (ROS2 Humble) + +* Unitree Guide Controller + ```bash + source ~/ros2_ws/install/setup.bash + ros2 launch unitree_guide_controller gazebo_classic.launch.py pkg_description:=x30_description height:=0.64 + ``` + +### Gazebo Harmonic (ROS2 Jazzy) * Unitree Guide Controller ```bash source ~/ros2_ws/install/setup.bash diff --git a/descriptions/deep_robotics/x30_description/config/gazebo.yaml b/descriptions/deep_robotics/x30_description/config/gazebo.yaml index 04729e4..723a090 100644 --- a/descriptions/deep_robotics/x30_description/config/gazebo.yaml +++ b/descriptions/deep_robotics/x30_description/config/gazebo.yaml @@ -1,7 +1,7 @@ # Controller Manager configuration controller_manager: ros__parameters: - update_rate: 2000 # Hz + update_rate: 1000 # Hz # Define the available controllers joint_state_broadcaster: @@ -26,6 +26,7 @@ imu_sensor_broadcaster: leg_pd_controller: ros__parameters: + update_rate: 1000 # Hz joints: - FR_HipX - FR_HipY @@ -65,6 +66,37 @@ unitree_guide_controller: - HL_HipY - HL_Knee + stand_kp: 300.0 + stand_kd: 10.0 + + down_pos: + - 0.0 + - -1.22 + - 2.61 + - 0.0 + - -1.22 + - 2.61 + - 0.0 + - -1.22 + - 2.61 + - 0.0 + - -1.22 + - 2.61 + + stand_pos: + - 0.0 + - -0.732 + - 1.361 + - 0.0 + - -0.732 + - 1.361 + - 0.0 + - -0.732 + - 1.361 + - 0.0 + - -0.732 + - 1.361 + command_interfaces: - effort - position diff --git a/descriptions/deep_robotics/x30_description/xacro/gazebo_classic.xacro b/descriptions/deep_robotics/x30_description/xacro/gazebo_classic.xacro new file mode 100644 index 0000000..6255976 --- /dev/null +++ b/descriptions/deep_robotics/x30_description/xacro/gazebo_classic.xacro @@ -0,0 +1,246 @@ + + + + + + gazebo_ros2_control/GazeboSystem + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(find x30_description)/config/gazebo.yaml + + + + + 0.6 + 0.6 + 1 + + + + true + + true + 1000 + true + __default_topic__ + + trunk_imu + imu_link + 1000.0 + 0.0 + 0 0 0 + 0 0 0 + imu_link + + 0 0 0 0 0 0 + + + + + 0.2 + 0.2 + + + + + 0.2 + 0.2 + Gazebo/DarkGrey + + + 0.2 + 0.2 + 1 + + + Gazebo/Grey + + + 0.2 + 0.2 + 1 + + + 0.6 + 0.6 + 1 + + + + + 0.2 + 0.2 + Gazebo/DarkGrey + + + 0.2 + 0.2 + 1 + + + Gazebo/Grey + + + 0.2 + 0.2 + 1 + + + 0.6 + 0.6 + 1 + + + + + 0.2 + 0.2 + Gazebo/DarkGrey + + + 0.2 + 0.2 + 1 + + + Gazebo/Grey + + + 0.2 + 0.2 + 1 + + + 0.6 + 0.6 + 1 + + + + + 0.2 + 0.2 + Gazebo/DarkGrey + + + 0.2 + 0.2 + 1 + + + Gazebo/Grey + + + 0.2 + 0.2 + 1 + + + 0.6 + 0.6 + 1 + + + + + diff --git a/descriptions/deep_robotics/x30_description/xacro/robot.xacro b/descriptions/deep_robotics/x30_description/xacro/robot.xacro index b933077..809ab29 100644 --- a/descriptions/deep_robotics/x30_description/xacro/robot.xacro +++ b/descriptions/deep_robotics/x30_description/xacro/robot.xacro @@ -7,8 +7,16 @@ + + + - + + + + + + diff --git a/descriptions/unitree/aliengo_description/README.md b/descriptions/unitree/aliengo_description/README.md index f7993bb..d94c7a9 100644 --- a/descriptions/unitree/aliengo_description/README.md +++ b/descriptions/unitree/aliengo_description/README.md @@ -39,8 +39,16 @@ ros2 launch aliengo_description visualize.launch.py source ~/ros2_ws/install/setup.bash ros2 launch ocs2_quadruped_controller mujoco.launch.py pkg_description:=aliengo_description ``` - -### Gazebo Simulator + +### Gazebo Classic 11 (ROS2 Humble) + +* Unitree Guide Controller + ```bash + source ~/ros2_ws/install/setup.bash + ros2 launch unitree_guide_controller gazebo_classic.launch.py pkg_description:=aliengo_description height:=0.535 + ``` + +### Gazebo Harmonic (ROS2 Jazzy) * Unitree Guide Controller ```bash diff --git a/descriptions/unitree/aliengo_description/config/gazebo.yaml b/descriptions/unitree/aliengo_description/config/gazebo.yaml index 6ade07d..923fe57 100644 --- a/descriptions/unitree/aliengo_description/config/gazebo.yaml +++ b/descriptions/unitree/aliengo_description/config/gazebo.yaml @@ -1,7 +1,7 @@ # Controller Manager configuration controller_manager: ros__parameters: - update_rate: 2000 # Hz + update_rate: 1000 # Hz # Define the available controllers joint_state_broadcaster: @@ -26,6 +26,7 @@ imu_sensor_broadcaster: leg_pd_controller: ros__parameters: + update_rate: 1000 # Hz joints: - FR_hip_joint - FR_thigh_joint diff --git a/descriptions/unitree/aliengo_description/xacro/gazebo_classic.xacro b/descriptions/unitree/aliengo_description/xacro/gazebo_classic.xacro new file mode 100644 index 0000000..865ff6e --- /dev/null +++ b/descriptions/unitree/aliengo_description/xacro/gazebo_classic.xacro @@ -0,0 +1,238 @@ + + + + + + gazebo_ros2_control/GazeboSystem + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(find aliengo_description)/config/gazebo.yaml + + + + + 0.6 + 0.6 + 1 + + + + true + + true + 1000 + true + __default_topic__ + + trunk_imu + imu_link + 1000.0 + 0.0 + 0 0 0 + 0 0 0 + imu_link + + 0 0 0 0 0 0 + + + + + + 0.2 + 0.2 + + + 0.2 + 0.2 + 1 + + + + + 0.2 + 0.2 + 1 + + + 0.6 + 0.6 + 1 + + + + + + + 0.2 + 0.2 + + + 0.2 + 0.2 + 1 + + + + + 0.2 + 0.2 + 1 + + + 0.6 + 0.6 + 1 + + + + + + + 0.2 + 0.2 + + + 0.2 + 0.2 + 1 + + + + + 0.2 + 0.2 + 1 + + + 0.6 + 0.6 + 1 + + + + + + + 0.2 + 0.2 + + + 0.2 + 0.2 + 1 + + + + + 0.2 + 0.2 + 1 + + + 0.6 + 0.6 + 1 + + + + diff --git a/descriptions/unitree/aliengo_description/xacro/robot.xacro b/descriptions/unitree/aliengo_description/xacro/robot.xacro index 5ba0355..fc19db0 100644 --- a/descriptions/unitree/aliengo_description/xacro/robot.xacro +++ b/descriptions/unitree/aliengo_description/xacro/robot.xacro @@ -4,16 +4,22 @@ + - + + + + + + - + diff --git a/descriptions/unitree/b2_description/README.md b/descriptions/unitree/b2_description/README.md index 559e8a7..31aa2db 100644 --- a/descriptions/unitree/b2_description/README.md +++ b/descriptions/unitree/b2_description/README.md @@ -34,8 +34,16 @@ ros2 launch b2_description visualize.launch.py source ~/ros2_ws/install/setup.bash ros2 launch ocs2_quadruped_controller mujoco.launch.py pkg_description:=b2_description ``` - -### Gazebo Simulator + +### Gazebo Classic 11 (ROS2 Humble) + +* Unitree Guide Controller + ```bash + source ~/ros2_ws/install/setup.bash + ros2 launch unitree_guide_controller gazebo_classic.launch.py pkg_description:=b2_description height:=0.68 + ``` + +### Gazebo Harmonic (ROS2 Jazzy) * Unitree Guide Controller ```bash diff --git a/descriptions/unitree/b2_description/config/gazebo.yaml b/descriptions/unitree/b2_description/config/gazebo.yaml index c8521c6..fc9f1e4 100644 --- a/descriptions/unitree/b2_description/config/gazebo.yaml +++ b/descriptions/unitree/b2_description/config/gazebo.yaml @@ -1,7 +1,7 @@ # Controller Manager configuration controller_manager: ros__parameters: - update_rate: 2000 # Hz + update_rate: 1000 # Hz # Define the available controllers joint_state_broadcaster: @@ -26,6 +26,7 @@ imu_sensor_broadcaster: leg_pd_controller: ros__parameters: + update_rate: 1000 # Hz joints: - FR_hip_joint - FR_thigh_joint @@ -50,6 +51,9 @@ leg_pd_controller: unitree_guide_controller: ros__parameters: command_prefix: "leg_pd_controller" + update_rate: 500 # Hz + stand_kp: 500.0 + stand_kd: 40.0 joints: - FR_hip_joint - FR_thigh_joint diff --git a/descriptions/unitree/b2_description/xacro/const.xacro b/descriptions/unitree/b2_description/xacro/const.xacro index caea5ca..c42e36b 100755 --- a/descriptions/unitree/b2_description/xacro/const.xacro +++ b/descriptions/unitree/b2_description/xacro/const.xacro @@ -57,8 +57,8 @@ - - + + diff --git a/descriptions/unitree/b2_description/xacro/gazebo_classic.xacro b/descriptions/unitree/b2_description/xacro/gazebo_classic.xacro new file mode 100644 index 0000000..d3ed6a2 --- /dev/null +++ b/descriptions/unitree/b2_description/xacro/gazebo_classic.xacro @@ -0,0 +1,237 @@ + + + + + + gazebo_ros2_control/GazeboSystem + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(find b2_description)/config/gazebo.yaml + + + + + 0.6 + 0.6 + 1 + + + + true + + true + 1000 + true + __default_topic__ + + trunk_imu + imu_link + 1000.0 + 0.0 + 0 0 0 + 0 0 0 + imu_link + + 0 0 0 0 0 0 + + + + + 0.2 + 0.2 + + + 0.2 + 0.2 + 1 + + + + + 0.2 + 0.2 + 1 + + + 0.6 + 0.6 + 1 + + + + + + + 0.2 + 0.2 + + + 0.2 + 0.2 + 1 + + + + + 0.2 + 0.2 + 1 + + + 0.6 + 0.6 + 1 + + + + + + + 0.2 + 0.2 + + + 0.2 + 0.2 + 1 + + + + + 0.2 + 0.2 + 1 + + + 0.6 + 0.6 + 1 + + + + + + + 0.2 + 0.2 + + + 0.2 + 0.2 + 1 + + + + + 0.2 + 0.2 + 1 + + + 0.6 + 0.6 + 1 + + + + diff --git a/descriptions/unitree/b2_description/xacro/robot.xacro b/descriptions/unitree/b2_description/xacro/robot.xacro index bb03cb4..e6f6295 100755 --- a/descriptions/unitree/b2_description/xacro/robot.xacro +++ b/descriptions/unitree/b2_description/xacro/robot.xacro @@ -4,13 +4,19 @@ + - + + + + + + diff --git a/descriptions/unitree/go1_description/README.md b/descriptions/unitree/go1_description/README.md index d07a430..d6845c0 100644 --- a/descriptions/unitree/go1_description/README.md +++ b/descriptions/unitree/go1_description/README.md @@ -35,7 +35,15 @@ ros2 launch go1_description visualize.launch.py ros2 launch ocs2_quadruped_controller mujoco.launch.py pkg_description:=go1_description ``` -### Gazebo Simulator +### Gazebo Classic 11 (ROS2 Humble) + +* Unitree Guide Controller + ```bash + source ~/ros2_ws/install/setup.bash + ros2 launch unitree_guide_controller gazebo_classic.launch.py pkg_description:=go1_description + ``` + +### Gazebo Harmonic (ROS2 Jazzy) * Unitree Guide Controller ```bash diff --git a/descriptions/unitree/go1_description/config/gazebo.yaml b/descriptions/unitree/go1_description/config/gazebo.yaml index c8521c6..796ca46 100644 --- a/descriptions/unitree/go1_description/config/gazebo.yaml +++ b/descriptions/unitree/go1_description/config/gazebo.yaml @@ -1,7 +1,7 @@ # Controller Manager configuration controller_manager: ros__parameters: - update_rate: 2000 # Hz + update_rate: 1000 # Hz # Define the available controllers joint_state_broadcaster: @@ -26,6 +26,7 @@ imu_sensor_broadcaster: leg_pd_controller: ros__parameters: + update_rate: 1000 # Hz joints: - FR_hip_joint - FR_thigh_joint @@ -49,6 +50,7 @@ leg_pd_controller: unitree_guide_controller: ros__parameters: + update_rate: 200 # Hz command_prefix: "leg_pd_controller" joints: - FR_hip_joint diff --git a/descriptions/unitree/go1_description/xacro/const.xacro b/descriptions/unitree/go1_description/xacro/const.xacro index b4744fb..5fc5410 100644 --- a/descriptions/unitree/go1_description/xacro/const.xacro +++ b/descriptions/unitree/go1_description/xacro/const.xacro @@ -2,158 +2,158 @@ - - - + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - + + + + - - - - - + + + + + - - - - - - - + + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - + + diff --git a/descriptions/unitree/go1_description/xacro/depthCamera.xacro b/descriptions/unitree/go1_description/xacro/depthCamera.xacro index 7700819..eb485a2 100644 --- a/descriptions/unitree/go1_description/xacro/depthCamera.xacro +++ b/descriptions/unitree/go1_description/xacro/depthCamera.xacro @@ -1,87 +1,87 @@ - - - - - - + + + + + + - - - - - - - + + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + \ No newline at end of file diff --git a/descriptions/unitree/go1_description/xacro/gazebo.xacro b/descriptions/unitree/go1_description/xacro/gazebo.xacro index eba3c33..6f3a38d 100644 --- a/descriptions/unitree/go1_description/xacro/gazebo.xacro +++ b/descriptions/unitree/go1_description/xacro/gazebo.xacro @@ -1,188 +1,188 @@ - - - gz_ros2_control/GazeboSimSystem - + + + gz_ros2_control/GazeboSimSystem + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - $(find go1_description)/config/gazebo.yaml - - - - + + + $(find go1_description)/config/gazebo.yaml + + + + - - 0.6 - 0.6 - 1 - + + 0.6 + 0.6 + 1 + - - - 1 - 500 - true - imu - - - - - 0.0 - 2e-4 - 0.0000075 - 0.0000008 - - - - - 0.0 - 2e-4 - 0.0000075 - 0.0000008 - - - - - 0.0 - 2e-4 - 0.0000075 - 0.0000008 - - - - - - - 0.0 - 1.7e-2 - 0.1 - 0.001 - - - - - 0.0 - 1.7e-2 - 0.1 - 0.001 - - - - - 0.0 - 1.7e-2 - 0.1 - 0.001 - - - - - - - - true - + + + 1 + 500 + true + imu + + + + + 0.0 + 2e-4 + 0.0000075 + 0.0000008 + + + + + 0.0 + 2e-4 + 0.0000075 + 0.0000008 + + + + + 0.0 + 2e-4 + 0.0000075 + 0.0000008 + + + + + + + 0.0 + 1.7e-2 + 0.1 + 0.001 + + + + + 0.0 + 1.7e-2 + 0.1 + 0.001 + + + + + 0.0 + 1.7e-2 + 0.1 + 0.001 + + + + + + + + true + diff --git a/descriptions/unitree/go1_description/xacro/gazebo_classic.xacro b/descriptions/unitree/go1_description/xacro/gazebo_classic.xacro new file mode 100644 index 0000000..a7a931d --- /dev/null +++ b/descriptions/unitree/go1_description/xacro/gazebo_classic.xacro @@ -0,0 +1,254 @@ + + + + + + gazebo_ros2_control/GazeboSystem + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(find go1_description)/config/gazebo.yaml + + + + + 0.6 + 0.6 + 1 + Gazebo/Grey + + + + true + + true + 1000 + true + __default_topic__ + + trunk_imu + imu_link + 1000.0 + 0.0 + 0 0 0 + 0 0 0 + imu_link + + 0 0 0 0 0 0 + + + + + 0.2 + 0.2 + Gazebo/DarkGrey + + + 0.2 + 0.2 + 1 + Gazebo/Grey + + + + + 0.2 + 0.2 + 1 + Gazebo/DarkGrey + + + 0.6 + 0.6 + 1 + Gazebo/DarkGrey + + + + + + + 0.2 + 0.2 + Gazebo/DarkGrey + + + 0.2 + 0.2 + 1 + Gazebo/Grey + + + + + 0.2 + 0.2 + 1 + Gazebo/DarkGrey + + + 0.6 + 0.6 + 1 + Gazebo/DarkGrey + + + + + + + 0.2 + 0.2 + Gazebo/DarkGrey + + + 0.2 + 0.2 + 1 + Gazebo/Grey + + + + + 0.2 + 0.2 + 1 + Gazebo/DarkGrey + + + 0.6 + 0.6 + 1 + Gazebo/DarkGrey + + + + + + + 0.2 + 0.2 + Gazebo/DarkGrey + + + 0.2 + 0.2 + 1 + Gazebo/Grey + + + + + 0.2 + 0.2 + 1 + Gazebo/DarkGrey + + + 0.6 + 0.6 + 1 + Gazebo/DarkGrey + + + + diff --git a/descriptions/unitree/go1_description/xacro/leg.xacro b/descriptions/unitree/go1_description/xacro/leg.xacro index cf3f7e4..c44fa36 100644 --- a/descriptions/unitree/go1_description/xacro/leg.xacro +++ b/descriptions/unitree/go1_description/xacro/leg.xacro @@ -2,280 +2,280 @@ - + - + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - 0.2 - 0.2 - + + 0.2 + 0.2 + - - 0.2 - 0.2 - 1 - - - + + 0.2 + 0.2 + 0 + + + - - 0.2 - 0.2 - 1 - + + 0.6 + 0.6 + 1 + - - 0.6 - 0.6 - 1 - - - + + 0.6 + 0.6 + 1 + + + - - + + diff --git a/descriptions/unitree/go1_description/xacro/materials.xacro b/descriptions/unitree/go1_description/xacro/materials.xacro index 2637563..36e08d5 100644 --- a/descriptions/unitree/go1_description/xacro/materials.xacro +++ b/descriptions/unitree/go1_description/xacro/materials.xacro @@ -1,48 +1,48 @@ - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + diff --git a/descriptions/unitree/go1_description/xacro/robot.xacro b/descriptions/unitree/go1_description/xacro/robot.xacro index d5ec870..0254654 100644 --- a/descriptions/unitree/go1_description/xacro/robot.xacro +++ b/descriptions/unitree/go1_description/xacro/robot.xacro @@ -2,157 +2,163 @@ - - + + + - - - + + + - - + + - - - - - - + + + + + + + + + + + - + - - + + - - - - - - - - - + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - - + + + + + - - + + - - - - - + + + + + - - + + - - - + + + - - - + + + - - - + + + diff --git a/descriptions/unitree/go1_description/xacro/ros2_control.xacro b/descriptions/unitree/go1_description/xacro/ros2_control.xacro index a2e4209..688e259 100644 --- a/descriptions/unitree/go1_description/xacro/ros2_control.xacro +++ b/descriptions/unitree/go1_description/xacro/ros2_control.xacro @@ -1,176 +1,176 @@ - + - - hardware_unitree_mujoco/HardwareUnitree - + + hardware_unitree_mujoco/HardwareUnitree + - - - - - - + + + + + + - - - - + + + + - - - - - - + + + + + + - - - - + + + + - - - - - - + + + + + + - - - - + + + + - - - - - - + + + + + + - - - - + + + + - - - - - - + + + + + + - - - - + + + + - - - - - - + + + + + + - - - - + + + + - - - - - - + + + + + + - - - - + + + + - - - - - - + + + + + + - - - - + + + + - - - - - - + + + + + + - - - - + + + + - - - - - - + + + + + + - - - - + + + + - - - - - - + + + + + + - - - - + + + + - - - - - - + + + + + + - - - - + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - + + + + + + - + diff --git a/descriptions/unitree/go1_description/xacro/transmission.xacro b/descriptions/unitree/go1_description/xacro/transmission.xacro index cee02e4..b6b1999 100644 --- a/descriptions/unitree/go1_description/xacro/transmission.xacro +++ b/descriptions/unitree/go1_description/xacro/transmission.xacro @@ -2,41 +2,41 @@ - + - - transmission_interface/SimpleTransmission - - hardware_interface/EffortJointInterface - - - hardware_interface/EffortJointInterface - 1 - - + + transmission_interface/SimpleTransmission + + hardware_interface/EffortJointInterface + + + hardware_interface/EffortJointInterface + 1 + + - - transmission_interface/SimpleTransmission - - hardware_interface/EffortJointInterface - - - hardware_interface/EffortJointInterface - 1 - - + + transmission_interface/SimpleTransmission + + hardware_interface/EffortJointInterface + + + hardware_interface/EffortJointInterface + 1 + + - - transmission_interface/SimpleTransmission - - hardware_interface/EffortJointInterface - - - hardware_interface/EffortJointInterface - 1 - - + + transmission_interface/SimpleTransmission + + hardware_interface/EffortJointInterface + + + hardware_interface/EffortJointInterface + 1 + + - + diff --git a/descriptions/unitree/go1_description/xacro/ultraSound.xacro b/descriptions/unitree/go1_description/xacro/ultraSound.xacro index fb5b299..8c7deab 100644 --- a/descriptions/unitree/go1_description/xacro/ultraSound.xacro +++ b/descriptions/unitree/go1_description/xacro/ultraSound.xacro @@ -1,33 +1,33 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + \ No newline at end of file diff --git a/descriptions/unitree/go2_description/config/gazebo.yaml b/descriptions/unitree/go2_description/config/gazebo.yaml index efa1a6f..221922d 100644 --- a/descriptions/unitree/go2_description/config/gazebo.yaml +++ b/descriptions/unitree/go2_description/config/gazebo.yaml @@ -1,7 +1,7 @@ # Controller Manager configuration controller_manager: ros__parameters: - update_rate: 2000 # Hz + update_rate: 1000 # Hz # Define the available controllers joint_state_broadcaster: @@ -26,7 +26,7 @@ imu_sensor_broadcaster: leg_pd_controller: ros__parameters: - update_rate: 500 # Hz + update_rate: 1000 # Hz joints: - FR_hip_joint - FR_thigh_joint @@ -50,7 +50,7 @@ leg_pd_controller: unitree_guide_controller: ros__parameters: - update_rate: 500 # Hz + update_rate: 200 # Hz command_prefix: "leg_pd_controller" joints: - FR_hip_joint diff --git a/descriptions/unitree/go2_description/xacro/const.xacro b/descriptions/unitree/go2_description/xacro/const.xacro index 2996604..3d8cbb9 100755 --- a/descriptions/unitree/go2_description/xacro/const.xacro +++ b/descriptions/unitree/go2_description/xacro/const.xacro @@ -2,120 +2,120 @@ - - - + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - + + + + - - - - - + + + + + - - - - - - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/descriptions/unitree/go2_description/xacro/gazebo.xacro b/descriptions/unitree/go2_description/xacro/gazebo.xacro index 6a6be5e..757b7b6 100644 --- a/descriptions/unitree/go2_description/xacro/gazebo.xacro +++ b/descriptions/unitree/go2_description/xacro/gazebo.xacro @@ -1,188 +1,188 @@ - - - gz_ros2_control/GazeboSimSystem - + + + gz_ros2_control/GazeboSimSystem + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - $(find go2_description)/config/gazebo.yaml - - - - + + + $(find go2_description)/config/gazebo.yaml + + + + - - 0.6 - 0.6 - 1 - + + 0.6 + 0.6 + 1 + - - - 1 - 500 - true - imu - - - - - 0.0 - 2e-4 - 0.0000075 - 0.0000008 - - - - - 0.0 - 2e-4 - 0.0000075 - 0.0000008 - - - - - 0.0 - 2e-4 - 0.0000075 - 0.0000008 - - - - - - - 0.0 - 1.7e-2 - 0.1 - 0.001 - - - - - 0.0 - 1.7e-2 - 0.1 - 0.001 - - - - - 0.0 - 1.7e-2 - 0.1 - 0.001 - - - - - - - - true - + + + 1 + 500 + true + imu + + + + + 0.0 + 2e-4 + 0.0000075 + 0.0000008 + + + + + 0.0 + 2e-4 + 0.0000075 + 0.0000008 + + + + + 0.0 + 2e-4 + 0.0000075 + 0.0000008 + + + + + + + 0.0 + 1.7e-2 + 0.1 + 0.001 + + + + + 0.0 + 1.7e-2 + 0.1 + 0.001 + + + + + 0.0 + 1.7e-2 + 0.1 + 0.001 + + + + + + + + true + diff --git a/descriptions/unitree/go2_description/xacro/gazebo_classic.xacro b/descriptions/unitree/go2_description/xacro/gazebo_classic.xacro index 042cf71..a9e81f1 100644 --- a/descriptions/unitree/go2_description/xacro/gazebo_classic.xacro +++ b/descriptions/unitree/go2_description/xacro/gazebo_classic.xacro @@ -1,139 +1,139 @@ - - - gazebo_ros2_control/GazeboSystem - + + + gazebo_ros2_control/GazeboSystem + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - $(find go2_description)/config/gazebo.yaml - - + + + $(find go2_description)/config/gazebo.yaml + + - - 0.6 - 0.6 - 1 - + + 0.6 + 0.6 + 1 + - - true - - true - 1000 - true - __default_topic__ - - trunk_imu - imu_link - 1000.0 - 0.0 - 0 0 0 - 0 0 0 - imu_link - - 0 0 0 0 0 0 - - + + true + + true + 1000 + true + __default_topic__ + + trunk_imu + imu_link + 1000.0 + 0.0 + 0 0 0 + 0 0 0 + imu_link + + 0 0 0 0 0 0 + + diff --git a/descriptions/unitree/go2_description/xacro/leg.xacro b/descriptions/unitree/go2_description/xacro/leg.xacro index 5c8f406..9b2f9bf 100755 --- a/descriptions/unitree/go2_description/xacro/leg.xacro +++ b/descriptions/unitree/go2_description/xacro/leg.xacro @@ -25,11 +25,11 @@ + upper="${hip_position_max}"/> + upper="${-hip_position_min}"/> @@ -62,9 +62,9 @@ + ixx="${hip_ixx}" ixy="${hip_ixy*mirror*front_hind}" ixz="${hip_ixz*front_hind}" + iyy="${hip_iyy}" iyz="${hip_iyz*mirror}" + izz="${hip_izz}"/> @@ -75,7 +75,7 @@ + upper="${thigh_position_max}"/> @@ -101,9 +101,9 @@ + ixx="${thigh_ixx}" ixy="${thigh_ixy*mirror}" ixz="${thigh_ixz}" + iyy="${thigh_iyy}" iyz="${thigh_iyz*mirror}" + izz="${thigh_izz}"/> @@ -115,7 +115,7 @@ + upper="${calf_position_max}"/> @@ -136,9 +136,9 @@ + ixx="${calf_ixx}" ixy="${calf_ixy}" ixz="${calf_ixz}" + iyy="${calf_iyy}" iyz="${calf_iyz}" + izz="${calf_izz}"/> @@ -165,9 +165,9 @@ + ixx="${(2*foot_mass)/5.0*(foot_radius*foot_radius)}" ixy="0.0" ixz="0.0" + iyy="${(2*foot_mass)/5.0*(foot_radius*foot_radius)}" iyz="0.0" + izz="${(2*foot_mass)/5.0*(foot_radius*foot_radius)}"/> diff --git a/descriptions/unitree/go2_description/xacro/materials.xacro b/descriptions/unitree/go2_description/xacro/materials.xacro index a558693..4e584ac 100755 --- a/descriptions/unitree/go2_description/xacro/materials.xacro +++ b/descriptions/unitree/go2_description/xacro/materials.xacro @@ -1,40 +1,40 @@ - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + diff --git a/descriptions/unitree/go2_description/xacro/robot.xacro b/descriptions/unitree/go2_description/xacro/robot.xacro index a54ea76..a2459d9 100755 --- a/descriptions/unitree/go2_description/xacro/robot.xacro +++ b/descriptions/unitree/go2_description/xacro/robot.xacro @@ -2,136 +2,154 @@ - - - + + + - - - + + + - - - - - - - - - - - + + + + + + + + + + + - + - - + + - - - - - - - - - + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + - - - - + + + + diff --git a/descriptions/unitree/go2_description/xacro/ros2_control.xacro b/descriptions/unitree/go2_description/xacro/ros2_control.xacro index a2e4209..688e259 100644 --- a/descriptions/unitree/go2_description/xacro/ros2_control.xacro +++ b/descriptions/unitree/go2_description/xacro/ros2_control.xacro @@ -1,176 +1,176 @@ - + - - hardware_unitree_mujoco/HardwareUnitree - + + hardware_unitree_mujoco/HardwareUnitree + - - - - - - + + + + + + - - - - + + + + - - - - - - + + + + + + - - - - + + + + - - - - - - + + + + + + - - - - + + + + - - - - - - + + + + + + - - - - + + + + - - - - - - + + + + + + - - - - + + + + - - - - - - + + + + + + - - - - + + + + - - - - - - + + + + + + - - - - + + + + - - - - - - + + + + + + - - - - + + + + - - - - - - + + + + + + - - - - + + + + - - - - - - + + + + + + - - - - + + + + - - - - - - + + + + + + - - - - + + + + - - - - - - + + + + + + - - - - + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - + + + + + + - + diff --git a/descriptions/unitree/go2_description/xacro/transmission.xacro b/descriptions/unitree/go2_description/xacro/transmission.xacro index cee02e4..b6b1999 100755 --- a/descriptions/unitree/go2_description/xacro/transmission.xacro +++ b/descriptions/unitree/go2_description/xacro/transmission.xacro @@ -2,41 +2,41 @@ - + - - transmission_interface/SimpleTransmission - - hardware_interface/EffortJointInterface - - - hardware_interface/EffortJointInterface - 1 - - + + transmission_interface/SimpleTransmission + + hardware_interface/EffortJointInterface + + + hardware_interface/EffortJointInterface + 1 + + - - transmission_interface/SimpleTransmission - - hardware_interface/EffortJointInterface - - - hardware_interface/EffortJointInterface - 1 - - + + transmission_interface/SimpleTransmission + + hardware_interface/EffortJointInterface + + + hardware_interface/EffortJointInterface + 1 + + - - transmission_interface/SimpleTransmission - - hardware_interface/EffortJointInterface - - - hardware_interface/EffortJointInterface - 1 - - + + transmission_interface/SimpleTransmission + + hardware_interface/EffortJointInterface + + + hardware_interface/EffortJointInterface + 1 + + - + diff --git a/descriptions/xiaomi/cyberdog_description/README.md b/descriptions/xiaomi/cyberdog_description/README.md index 51a6aee..0daf777 100644 --- a/descriptions/xiaomi/cyberdog_description/README.md +++ b/descriptions/xiaomi/cyberdog_description/README.md @@ -36,7 +36,15 @@ ros2 launch cyberdog_description visualize.launch.py ros2 launch ocs2_quadruped_controller mujoco.launch.py pkg_description:=cyberdog_description ``` -### Gazebo Simulator +### Gazebo Classic 11 (ROS2 Humble) + +* Unitree Guide Controller + ```bash + source ~/ros2_ws/install/setup.bash + ros2 launch unitree_guide_controller gazebo_classic.launch.py pkg_description:=cyberdog_description height:=0.31 + ``` + +### Gazebo Harmonic (ROS2 Jazzy) * Unitree Guide Controller ```bash diff --git a/descriptions/xiaomi/cyberdog_description/config/gazebo.yaml b/descriptions/xiaomi/cyberdog_description/config/gazebo.yaml index 4a47873..d057f97 100644 --- a/descriptions/xiaomi/cyberdog_description/config/gazebo.yaml +++ b/descriptions/xiaomi/cyberdog_description/config/gazebo.yaml @@ -1,7 +1,7 @@ # Controller Manager configuration controller_manager: ros__parameters: - update_rate: 2000 # Hz + update_rate: 1000 # Hz # Define the available controllers joint_state_broadcaster: @@ -23,6 +23,7 @@ imu_sensor_broadcaster: leg_pd_controller: ros__parameters: + update_rate: 1000 # Hz joints: - FR_hip_joint - FR_thigh_joint @@ -48,6 +49,7 @@ unitree_guide_controller: ros__parameters: command_prefix: "leg_pd_controller" update_rate: 500 # Hz + stand_kd: 1.0 joints: - FR_hip_joint - FR_thigh_joint diff --git a/descriptions/xiaomi/cyberdog_description/xacro/const.xacro b/descriptions/xiaomi/cyberdog_description/xacro/const.xacro index 54eca40..9db9ad0 100644 --- a/descriptions/xiaomi/cyberdog_description/xacro/const.xacro +++ b/descriptions/xiaomi/cyberdog_description/xacro/const.xacro @@ -55,9 +55,9 @@ - - - + + + diff --git a/descriptions/xiaomi/cyberdog_description/xacro/gazebo_classic.xacro b/descriptions/xiaomi/cyberdog_description/xacro/gazebo_classic.xacro new file mode 100644 index 0000000..60cc473 --- /dev/null +++ b/descriptions/xiaomi/cyberdog_description/xacro/gazebo_classic.xacro @@ -0,0 +1,238 @@ + + + + + + gazebo_ros2_control/GazeboSystem + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(find cyberdog_description)/config/gazebo.yaml + + + + + 0.6 + 0.6 + 1 + + + + true + + true + 1000 + true + __default_topic__ + + trunk_imu + imu_link + 1000.0 + 0.0 + 0 0 0 + 0 0 0 + imu_link + + 0 0 0 0 0 0 + + + + + + 0.2 + 0.2 + + + 0.2 + 0.2 + 1 + + + + + 0.2 + 0.2 + 1 + + + 0.6 + 0.6 + 1 + + + + + + + 0.2 + 0.2 + + + 0.2 + 0.2 + 1 + + + + + 0.2 + 0.2 + 1 + + + 0.6 + 0.6 + 1 + + + + + + + 0.2 + 0.2 + + + 0.2 + 0.2 + 1 + + + + + 0.2 + 0.2 + 1 + + + 0.6 + 0.6 + 1 + + + + + + + 0.2 + 0.2 + + + 0.2 + 0.2 + 1 + + + + + 0.2 + 0.2 + 1 + + + 0.6 + 0.6 + 1 + + + + diff --git a/descriptions/xiaomi/cyberdog_description/xacro/robot.xacro b/descriptions/xiaomi/cyberdog_description/xacro/robot.xacro index 4e9bbeb..a42e802 100644 --- a/descriptions/xiaomi/cyberdog_description/xacro/robot.xacro +++ b/descriptions/xiaomi/cyberdog_description/xacro/robot.xacro @@ -1,220 +1,226 @@ - - - + + + + - - + + - - - - - - + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - + + + + + + + - - - - - + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - .1 .1 .1 1.0 - .1 .1 .1 1.0 - .1 .1 .1 1.0 - - - + + + + .1 .1 .1 1.0 + .1 .1 .1 1.0 + .1 .1 .1 1.0 + + + \ No newline at end of file