├── cheetah_control ├── scripts │ ├── .~1IDbF-renViKJjU43QZe8B45ITgRLFhfN-c185b7.insyncdl │ ├── __pycache__ │ │ └── chee_control.cpython-38.pyc │ ├── control_cur.py │ ├── control_pos.py │ └── chee_control.py ├── launch │ ├── cheetah_control_trajectory.launch │ ├── cheetah_control_current.launch │ ├── cheetah_control_velocity.launch │ ├── cheetah_control_position.launch │ └── controller │ │ ├── cheetah_control_trajectory.yaml │ │ ├── cheetah_control_cur.yaml │ │ ├── cheetah_control_pos.yaml │ │ └── cheetah_control_vel.yaml ├── package.xml └── CMakeLists.txt ├── cheetah_show ├── Cheetah.png ├── launch │ └── cheetah_gazebo.launch ├── package.xml └── CMakeLists.txt ├── cheetah_description ├── meshes │ ├── calf.STL │ ├── foot.STL │ ├── hip.STL │ ├── thigh.STL │ └── trunk.STL ├── CMakeLists.txt ├── package.xml └── xacro │ ├── mini_cheetah_control.urdf │ └── mini_cheetah.urdf ├── reconfigure ├── README.md ├── launch │ ├── server_cur.launch │ └── server_pos.launch ├── CMakeLists.txt ├── scripts │ ├── cur_reconfigure_server.py │ ├── pos_reconfigure_server.py │ ├── cur_pub.py │ └── pos_pub.py ├── cfg │ ├── current_reconfigure.cfg │ └── position_reconfigure.cfg └── package.xml └── README.md /cheetah_control/scripts/.~1IDbF-renViKJjU43QZe8B45ITgRLFhfN-c185b7.insyncdl: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cheetah_show/Cheetah.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sevocrear/Mini-Cheetah-ROS/HEAD/cheetah_show/Cheetah.png -------------------------------------------------------------------------------- /cheetah_description/meshes/calf.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sevocrear/Mini-Cheetah-ROS/HEAD/cheetah_description/meshes/calf.STL -------------------------------------------------------------------------------- /cheetah_description/meshes/foot.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sevocrear/Mini-Cheetah-ROS/HEAD/cheetah_description/meshes/foot.STL -------------------------------------------------------------------------------- /cheetah_description/meshes/hip.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sevocrear/Mini-Cheetah-ROS/HEAD/cheetah_description/meshes/hip.STL -------------------------------------------------------------------------------- /cheetah_description/meshes/thigh.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sevocrear/Mini-Cheetah-ROS/HEAD/cheetah_description/meshes/thigh.STL -------------------------------------------------------------------------------- /cheetah_description/meshes/trunk.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sevocrear/Mini-Cheetah-ROS/HEAD/cheetah_description/meshes/trunk.STL -------------------------------------------------------------------------------- /reconfigure/README.md: -------------------------------------------------------------------------------- 1 | That's the package that might be used in order to configure joints current, position, e.t.c. through the dynamic rqt. 2 | -------------------------------------------------------------------------------- /cheetah_control/scripts/__pycache__/chee_control.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sevocrear/Mini-Cheetah-ROS/HEAD/cheetah_control/scripts/__pycache__/chee_control.cpython-38.pyc -------------------------------------------------------------------------------- /reconfigure/launch/server_cur.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /reconfigure/launch/server_pos.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /reconfigure/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 2.8.3) 2 | project(reconfigure) 3 | 4 | find_package(catkin REQUIRED COMPONENTS 5 | dynamic_reconfigure 6 | roscpp 7 | rospy 8 | ) 9 | 10 | generate_dynamic_reconfigure_options( 11 | cfg/position_reconfigure.cfg 12 | cfg/current_reconfigure.cfg 13 | ) 14 | 15 | catkin_package( 16 | ) 17 | 18 | include_directories( 19 | ${catkin_INCLUDE_DIRS} 20 | ) 21 | -------------------------------------------------------------------------------- /cheetah_description/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 2.8.3) 2 | project(cheetah_description) 3 | 4 | find_package(catkin REQUIRED COMPONENTS 5 | urdf 6 | xacro 7 | ) 8 | 9 | catkin_package( 10 | # INCLUDE_DIRS include 11 | # LIBRARIES cheetah_description 12 | # CATKIN_DEPENDS urdf xacro 13 | # DEPENDS system_lib 14 | ) 15 | 16 | include_directories( 17 | # include 18 | ${catkin_INCLUDE_DIRS} 19 | ) 20 | 21 | -------------------------------------------------------------------------------- /cheetah_show/launch/cheetah_gazebo.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /reconfigure/scripts/cur_reconfigure_server.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import rospy 4 | 5 | from dynamic_reconfigure.server import Server 6 | from reconfigure.cfg import current_reconfigureConfig 7 | 8 | def callback(config, level): 9 | rospy.loginfo("""Configure : {FR_hip_cur}, {FR_thigh_cur}, {FR_calf_cur}, 10 | {FL_hip_cur}, {FL_thigh_cur}, {FL_calf_cur}, 11 | {BR_hip_cur}, {BR_thigh_cur}, {BR_calf_cur}, 12 | {BL_hip_cur}, {BL_thigh_cur}, {BL_calf_cur}""".format(**config)) 13 | return config 14 | 15 | if __name__ == "__main__": 16 | rospy.init_node("Cheetah joint currents SET", anonymous = False) 17 | srv = Server(current_reconfigureConfig, callback) 18 | rospy.spin() -------------------------------------------------------------------------------- /reconfigure/scripts/pos_reconfigure_server.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import rospy 4 | 5 | from dynamic_reconfigure.server import Server 6 | from reconfigure.cfg import position_reconfigureConfig 7 | 8 | def callback(config, level): 9 | rospy.loginfo("""Configure : {FR_hip_pos}, {FR_thigh_pos}, {FR_calf_pos}, 10 | {FL_hip_pos}, {FL_thigh_pos}, {FL_calf_pos}, 11 | {BR_hip_pos}, {BR_thigh_pos}, {BR_calf_pos}, 12 | {BL_hip_pos}, {BL_thigh_pos}, {BL_calf_pos}""".format(**config)) 13 | return config 14 | 15 | if __name__ == "__main__": 16 | rospy.init_node("Cheetah joint positions SET", anonymous = False) 17 | srv = Server(position_reconfigureConfig, callback) 18 | rospy.spin() -------------------------------------------------------------------------------- /cheetah_control/launch/cheetah_control_trajectory.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 20 | 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Mini-Cheetah-ROS 2 | * for urdf thx to [grassjelly and HitSZwang](https://github.com/HitSZwang/mini-cheetah-gazebo-urdf) 3 | ![mini](cheetah_show/Cheetah.png) 4 | 5 | 6 | ### In order to use this code, you shoud go through next steps: 7 | 8 | ```bash 9 | cd catkin_ws/src 10 | ``` 11 | 12 | ```bash 13 | git clone https://github.com/Terminateit/Mini-Cheetah-ROS.git 14 | ``` 15 | 16 | ```bash 17 | cd .. 18 | ``` 19 | 20 | ```bash 21 | catkin_make 22 | ``` 23 | 24 | ```bash 25 | source devel/setup.bash 26 | ``` 27 | 28 | And here we are ready! 29 | 30 | 31 | 32 | * If you want just to see the model: 33 | 34 | ```bash 35 | roslaunch cheetah_show cheetah_gazebo.launch 36 | ``` 37 | 38 | * Position control: 39 | ```bash 40 | roslaunch cheetah_control cheetah_control_position.launch 41 | ``` 42 | 43 | * Current control: 44 | ```bash 45 | roslaunch cheetah_control cheetah_control_current.launch 46 | ``` 47 | 48 | * Velocity Control: 49 | ```bash 50 | roslaunch cheetah_control cheetah_control_velocity.launch 51 | ``` 52 | 53 | -------------------------------------------------------------------------------- /reconfigure/cfg/current_reconfigure.cfg: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | PACKAGE = "reconfigure" 3 | 4 | from dynamic_reconfigure.parameter_generator_catkin import * 5 | 6 | gen = ParameterGenerator() 7 | 8 | gen.add("FR_hip_cur", double_t, 0, "FR hip cur", 0.00, -18, 18) 9 | gen.add("FR_thigh_cur", double_t, 0, "FR thigh cur", 0.00, -18, 18) 10 | gen.add("FR_calf_cur", double_t, 0, "FR calf cur", 0.00, -18, 18) 11 | 12 | gen.add("FL_hip_cur", double_t, 0, "FL hip cur", 0.00, -18, 18) 13 | gen.add("FL_thigh_cur", double_t, 0, "FL thigh cur", 0.00, -18, 18) 14 | gen.add("FL_calf_cur", double_t, 0, "FL calf cur", 0.00, -18, 18) 15 | 16 | gen.add("BR_hip_cur", double_t, 0, "BR hip cur", 0.00, -18, 18) 17 | gen.add("BR_thigh_cur", double_t, 0, "BR thigh cur", 0.00, -18, 18) 18 | gen.add("BR_calf_cur", double_t, 0, "BR calf cur", 0.00, -18, 18) 19 | 20 | gen.add("BL_hip_cur", double_t, 0, "BL hip cur", 0.00, -18, 18) 21 | gen.add("BL_thigh_cur", double_t, 0, "BL thigh cur", 0.00, -18, 18) 22 | gen.add("BL_calf_cur", double_t, 0, "BL calf cur", 0.00, -18, 18) 23 | 24 | exit(gen.generate(PACKAGE, "reconfigure", "current_reconfigure")) -------------------------------------------------------------------------------- /reconfigure/cfg/position_reconfigure.cfg: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | PACKAGE = "reconfigure" 3 | 4 | from dynamic_reconfigure.parameter_generator_catkin import * 5 | 6 | gen = ParameterGenerator() 7 | 8 | gen.add("FR_hip_pos", double_t, 0, "FR hip pos", 0.00, -1.047, 0.872) 9 | gen.add("FR_thigh_pos", double_t, 0, "FR thigh pos", 0.71184, -0.523, 3.926) 10 | gen.add("FR_calf_pos", double_t, 0, "FR calf pos", -1.5705, -3.141, 3.141) 11 | 12 | gen.add("FL_hip_pos", double_t, 0, "FL hip pos", 0.00, -1.047, 0.872) 13 | gen.add("FL_thigh_pos", double_t, 0, "FL thigh pos", 0.71184, -0.523, 3.926) 14 | gen.add("FL_calf_pos", double_t, 0, "FL calf pos", -1.5705, -3.141, 3.141) 15 | 16 | gen.add("BR_hip_pos", double_t, 0, "BR hip pos", 0.00, -1.047, 0.872) 17 | gen.add("BR_thigh_pos", double_t, 0, "BR thigh pos", 0.71184, -0.523, 3.926) 18 | gen.add("BR_calf_pos", double_t, 0, "BR calf pos", -1.5705, -3.141, 3.141) 19 | 20 | gen.add("BL_hip_pos", double_t, 0, "BL hip pos", 0.00, -1.047, 0.872) 21 | gen.add("BL_thigh_pos", double_t, 0, "BL thigh pos", 0.71184, -0.523, 3.926) 22 | gen.add("BL_calf_pos", double_t, 0, "BL calf pos", -1.5705, -3.141, 3.141) 23 | 24 | exit(gen.generate(PACKAGE, "reconfigure", "position_reconfigure")) -------------------------------------------------------------------------------- /cheetah_control/launch/cheetah_control_current.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 20 | 22 | 23 | -------------------------------------------------------------------------------- /cheetah_control/launch/cheetah_control_velocity.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 21 | 23 | -------------------------------------------------------------------------------- /cheetah_control/launch/cheetah_control_position.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 20 | 21 | 23 | 24 | -------------------------------------------------------------------------------- /cheetah_control/launch/controller/cheetah_control_trajectory.yaml: -------------------------------------------------------------------------------- 1 | mini_chee: 2 | joint_states_controller: 3 | type: joint_state_controller/JointStateController 4 | publish_rate: 25 5 | 6 | # Controls the position of a group of joints using a pid loop. 7 | joint_group_position_controller: 8 | type: effort_controllers/JointTrajectoryController 9 | joints: 10 | - FL_hip_joint 11 | - FL_thigh_joint 12 | - FL_calf_joint 13 | - FR_hip_joint 14 | - FR_thigh_joint 15 | - FR_calf_joint 16 | - RL_hip_joint 17 | - RL_thigh_joint 18 | - RL_calf_joint 19 | - RR_hip_joint 20 | - RR_thigh_joint 21 | - RR_calf_joint 22 | 23 | gains: 24 | FL_hip_joint : {p: 180, d: 0.9, i: 20} 25 | FL_thigh_joint : {p: 180, d: 0.9, i: 20} 26 | FL_calf_joint : {p: 180, d: 0.9, i: 20} 27 | FR_hip_joint : {p: 180, d: 0.9, i: 20} 28 | FR_thigh_joint : {p: 180, d: 0.9, i: 20} 29 | FR_calf_joint : {p: 180, d: 0.9, i: 20} 30 | RL_hip_joint : {p: 180, d: 0.9, i: 20} 31 | RL_thigh_joint : {p: 180, d: 0.9, i: 20} 32 | RL_calf_joint : {p: 180, d: 0.9, i: 20} 33 | RR_hip_joint : {p: 180, d: 0.9, i: 20} 34 | RR_thigh_joint : {p: 180, d: 0.9, i: 20} 35 | RR_calf_joint : {p: 180, d: 0.9, i: 20} -------------------------------------------------------------------------------- /cheetah_control/scripts/control_cur.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # license removed for brevity 3 | import rospy 4 | from chee_control import cheetah_control 5 | 6 | 7 | if __name__ == '__main__': 8 | cheetah_control_cur = cheetah_control(type_of_control = 'torque') 9 | 10 | LF_hip = (0.0,0) 11 | LF_upper = (-5,5) 12 | LF_lower = (0.9,0.9) 13 | 14 | RF_hip = (0.0,0) 15 | RF_upper = (-5,5) 16 | RF_lower = (0.9, 0.9) 17 | 18 | LH_hip = (0.0, 0) 19 | LH_upper = (-5, 5) 20 | LH_lower = (0.9, 0.9) 21 | 22 | RH_hip = (0.0, 0.0) 23 | RH_upper = (-5, 5) 24 | RH_lower = (0.9, 0.9) 25 | len_configurations = len(LF_hip) 26 | 27 | while not rospy.is_shutdown(): 28 | try: 29 | for i in range(len_configurations): 30 | cheetah_control_cur.move_joint(1,LF_hip[i]) 31 | cheetah_control_cur.move_joint(2,LF_upper[i]) 32 | cheetah_control_cur.move_joint(3,LF_lower[i]) 33 | 34 | cheetah_control_cur.move_joint(4,RF_hip[i]) 35 | cheetah_control_cur.move_joint(5,RF_upper[i]) 36 | cheetah_control_cur.move_joint(6,RF_lower[i]) 37 | 38 | cheetah_control_cur.move_joint(7,LH_hip[i]) 39 | cheetah_control_cur.move_joint(8,LH_upper[i]) 40 | cheetah_control_cur.move_joint(9,LH_lower[i]) 41 | 42 | cheetah_control_cur.move_joint(10,RH_hip[i]) 43 | cheetah_control_cur.move_joint(11,RH_upper[i]) 44 | cheetah_control_cur.move_joint(12,RH_lower[i]) 45 | cheetah_control_cur.rate.sleep() 46 | except rospy.ROSInterruptException: 47 | pass -------------------------------------------------------------------------------- /cheetah_control/scripts/control_pos.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # license removed for brevity 3 | import rospy 4 | from chee_control import cheetah_control 5 | 6 | if __name__ == '__main__': 7 | cheetah_control_pos = cheetah_control() 8 | 9 | LF_hip = (0.0,) 10 | LF_upper = (-0.45,) 11 | LF_lower = (0.9,) 12 | 13 | RF_hip = (0.0,) 14 | RF_upper = (-0.45,) 15 | RF_lower = (0.9,) 16 | 17 | LH_hip = (0.0,) 18 | LH_upper = (-0.45,) 19 | LH_lower = (0.9,) 20 | 21 | RH_hip = (0.0,) 22 | RH_upper = (-0.45,) 23 | RH_lower = (0.9,) 24 | len_configurations = len(LF_hip) 25 | 26 | while not rospy.is_shutdown(): 27 | try: 28 | print(cheetah_control_pos.joints_positions) 29 | for i in range(len_configurations): 30 | cheetah_control_pos.move_joint(1,LF_hip[i]) 31 | cheetah_control_pos.move_joint(2,LF_upper[i]) 32 | cheetah_control_pos.move_joint(3,LF_lower[i]) 33 | 34 | cheetah_control_pos.move_joint(4,RF_hip[i]) 35 | cheetah_control_pos.move_joint(5,RF_upper[i]) 36 | cheetah_control_pos.move_joint(6,RF_lower[i]) 37 | 38 | cheetah_control_pos.move_joint(7,LH_hip[i]) 39 | cheetah_control_pos.move_joint(8,LH_upper[i]) 40 | cheetah_control_pos.move_joint(9,LH_lower[i]) 41 | 42 | cheetah_control_pos.move_joint(10,RH_hip[i]) 43 | cheetah_control_pos.move_joint(11,RH_upper[i]) 44 | cheetah_control_pos.move_joint(12,RH_lower[i]) 45 | cheetah_control_pos.rate.sleep() 46 | except rospy.ROSInterruptException: 47 | pass -------------------------------------------------------------------------------- /cheetah_control/launch/controller/cheetah_control_cur.yaml: -------------------------------------------------------------------------------- 1 | mini_chee: 2 | # Publish all joint states ----------------------------------- 3 | joint_state_controller: 4 | type: joint_state_controller/JointStateController 5 | publish_rate: 50 6 | 7 | # Effort Controllers --------------------------------------- 8 | 9 | # First Left Leg 10 | FL_hip_Effort_controller: 11 | type: effort_controllers/JointEffortController 12 | joint: FL_hip_joint 13 | pid: {p: 180, d: 0.9, i: 20} 14 | 15 | FL_thigh_Effort_controller: 16 | type: effort_controllers/JointEffortController 17 | joint: FL_thigh_joint 18 | pid: {p: 180, d: 0.9, i: 20} 19 | 20 | FL_calf_Effort_controller: 21 | type: effort_controllers/JointEffortController 22 | joint: FL_calf_joint 23 | pid: {p: 180, d: 0.9, i: 20} 24 | 25 | # First Right Leg 26 | FR_hip_Effort_controller: 27 | type: effort_controllers/JointEffortController 28 | joint: FR_hip_joint 29 | pid: {p: 180, d: 0.9, i: 20} 30 | 31 | FR_thigh_Effort_controller: 32 | type: effort_controllers/JointEffortController 33 | joint: FR_thigh_joint 34 | pid: {p: 180, d: 0.9, i: 20} 35 | 36 | FR_calf_Effort_controller: 37 | type: effort_controllers/JointEffortController 38 | joint: FR_calf_joint 39 | pid: {p: 180, d: 0.9, i: 20} 40 | 41 | #Back Left Leg 42 | RL_hip_Effort_controller: 43 | type: effort_controllers/JointEffortController 44 | joint: RL_hip_joint 45 | pid: {p: 180, d: 0.9, i: 20} 46 | 47 | RL_thigh_Effort_controller: 48 | type: effort_controllers/JointEffortController 49 | joint: RL_thigh_joint 50 | pid: {p: 180, d: 0.9, i: 20} 51 | 52 | RL_calf_Effort_controller: 53 | type: effort_controllers/JointEffortController 54 | joint: RL_calf_joint 55 | pid: {p: 180, d: 0.9, i: 20} 56 | 57 | # Back Right Leg 58 | RR_hip_Effort_controller: 59 | type: effort_controllers/JointEffortController 60 | joint: RR_hip_joint 61 | pid: {p: 180, d: 0.9, i: 20} 62 | 63 | RR_thigh_Effort_controller: 64 | type: effort_controllers/JointEffortController 65 | joint: RR_thigh_joint 66 | pid: {p: 180, d: 0.9, i: 20} 67 | 68 | RR_calf_Effort_controller: 69 | type: effort_controllers/JointEffortController 70 | joint: RR_calf_joint 71 | pid: {p: 180, d: 0.9, i: 20} -------------------------------------------------------------------------------- /cheetah_control/launch/controller/cheetah_control_pos.yaml: -------------------------------------------------------------------------------- 1 | mini_chee: 2 | # Publish all joint states ----------------------------------- 3 | joint_state_controller: 4 | type: joint_state_controller/JointStateController 5 | publish_rate: 50 6 | 7 | # Position Controllers --------------------------------------- 8 | 9 | # First Left Leg 10 | FL_hip_position_controller: 11 | type: effort_controllers/JointPositionController 12 | joint: FL_hip_joint 13 | pid: {p: 10, d: 0.9, i: 5} 14 | 15 | FL_thigh_position_controller: 16 | type: effort_controllers/JointPositionController 17 | joint: FL_thigh_joint 18 | pid: {p: 10, d: 0.9, i: 5} 19 | 20 | FL_calf_position_controller: 21 | type: effort_controllers/JointPositionController 22 | joint: FL_calf_joint 23 | pid: {p: 10, d: 0.9, i: 5} 24 | 25 | # First Right Leg 26 | FR_hip_position_controller: 27 | type: effort_controllers/JointPositionController 28 | joint: FR_hip_joint 29 | pid: {p: 10, d: 0.9, i: 5} 30 | 31 | FR_thigh_position_controller: 32 | type: effort_controllers/JointPositionController 33 | joint: FR_thigh_joint 34 | pid: {p: 10, d: 0.9, i: 5} 35 | 36 | FR_calf_position_controller: 37 | type: effort_controllers/JointPositionController 38 | joint: FR_calf_joint 39 | pid: {p: 10, d: 0.9, i: 5} 40 | 41 | #Back Left Leg 42 | RL_hip_position_controller: 43 | type: effort_controllers/JointPositionController 44 | joint: RL_hip_joint 45 | pid: {p: 10, d: 0.9, i: 5} 46 | 47 | RL_thigh_position_controller: 48 | type: effort_controllers/JointPositionController 49 | joint: RL_thigh_joint 50 | pid: {p: 10, d: 0.9, i: 5} 51 | 52 | RL_calf_position_controller: 53 | type: effort_controllers/JointPositionController 54 | joint: RL_calf_joint 55 | pid: {p: 10, d: 0.9, i: 5} 56 | 57 | # Back Right Leg 58 | RR_hip_position_controller: 59 | type: effort_controllers/JointPositionController 60 | joint: RR_hip_joint 61 | pid: {p: 10, d: 0.9, i: 5} 62 | 63 | RR_thigh_position_controller: 64 | type: effort_controllers/JointPositionController 65 | joint: RR_thigh_joint 66 | pid: {p: 10, d: 0.9, i: 5} 67 | 68 | RR_calf_position_controller: 69 | type: effort_controllers/JointPositionController 70 | joint: RR_calf_joint 71 | pid: {p: 10, d: 0.9, i: 5} -------------------------------------------------------------------------------- /cheetah_control/launch/controller/cheetah_control_vel.yaml: -------------------------------------------------------------------------------- 1 | mini_chee: 2 | # Publish all joint states ----------------------------------- 3 | joint_state_controller: 4 | type: joint_state_controller/JointStateController 5 | publish_rate: 50 6 | 7 | # velocity Controllers --------------------------------------- 8 | 9 | # First Left Leg 10 | FL_hip_velocity_controller: 11 | type: effort_controllers/JointVelocityController 12 | joint: FL_hip_joint 13 | pid: {p: 10, d: 0.1, i: 1} 14 | 15 | FL_thigh_velocity_controller: 16 | type: effort_controllers/JointVelocityController 17 | joint: FL_thigh_joint 18 | pid: {p: 10, d: 0.1, i: 1} 19 | 20 | FL_calf_velocity_controller: 21 | type: effort_controllers/JointVelocityController 22 | joint: FL_calf_joint 23 | pid: {p: 10, d: 0.1, i: 1} 24 | 25 | # First Right Leg 26 | FR_hip_velocity_controller: 27 | type: effort_controllers/JointVelocityController 28 | joint: FR_hip_joint 29 | pid: {p: 10, d: 0.1, i: 1} 30 | 31 | FR_thigh_velocity_controller: 32 | type: effort_controllers/JointVelocityController 33 | joint: FR_thigh_joint 34 | pid: {p: 10, d: 0.1, i: 1} 35 | 36 | FR_calf_velocity_controller: 37 | type: effort_controllers/JointVelocityController 38 | joint: FR_calf_joint 39 | pid: {p: 10, d: 0.1, i: 1} 40 | 41 | #Back Left Leg 42 | RL_hip_velocity_controller: 43 | type: effort_controllers/JointVelocityController 44 | joint: RL_hip_joint 45 | pid: {p: 10, d: 0.1, i: 1} 46 | 47 | RL_thigh_velocity_controller: 48 | type: effort_controllers/JointVelocityController 49 | joint: RL_thigh_joint 50 | pid: {p: 10, d: 0.1, i: 1} 51 | 52 | RL_calf_velocity_controller: 53 | type: effort_controllers/JointVelocityController 54 | joint: RL_calf_joint 55 | pid: {p: 10, d: 0.1, i: 1} 56 | 57 | # Back Right Leg 58 | RR_hip_velocity_controller: 59 | type: effort_controllers/JointVelocityController 60 | joint: RR_hip_joint 61 | pid: {p: 10, d: 0.1, i: 1} 62 | 63 | RR_thigh_velocity_controller: 64 | type: effort_controllers/JointVelocityController 65 | joint: RR_thigh_joint 66 | pid: {p: 10, d: 0.1, i: 1} 67 | 68 | RR_calf_velocity_controller: 69 | type: effort_controllers/JointVelocityController 70 | joint: RR_calf_joint 71 | pid: {p: 10, d: 0.1, i: 1} -------------------------------------------------------------------------------- /reconfigure/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | reconfigure 4 | 0.0.0 5 | The reconfigure package 6 | 7 | 8 | 9 | 10 | sevocrear 11 | 12 | 13 | 14 | 15 | 16 | TODO 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | catkin 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /cheetah_show/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | cheetah_show 4 | 0.0.0 5 | The cheetah_show package 6 | 7 | 8 | 9 | 10 | sevocrear 11 | 12 | 13 | 14 | 15 | 16 | TODO 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | catkin 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /cheetah_control/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | cheetah_control 4 | 0.0.0 5 | The cheetah_control package 6 | 7 | 8 | 9 | 10 | sevocrear 11 | 12 | 13 | 14 | 15 | 16 | TODO 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | catkin 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /cheetah_description/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | cheetah_description 4 | 0.0.0 5 | The cheetah_description package 6 | 7 | 8 | 9 | 10 | sevocrear 11 | 12 | 13 | 14 | 15 | 16 | TODO 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | catkin 52 | urdf 53 | xacro 54 | urdf 55 | xacro 56 | urdf 57 | xacro 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /cheetah_control/scripts/chee_control.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # license removed for brevity 3 | import rospy 4 | import time 5 | from std_msgs.msg import Float64 6 | from sensor_msgs.msg import JointState 7 | class cheetah_control(): 8 | def __init__(self, type_of_control = 'position', time_pause_before_control = 0, rate_value = 50): 9 | rospy.init_node('cheetah_control', anonymous=True) 10 | self.type_of_control = type_of_control 11 | self.time_pause_before_control = time_pause_before_control 12 | time.sleep(self.time_pause_before_control) 13 | 14 | if type_of_control == 'position': 15 | self.joints = {1: 'FL_hip_position_controller', 2: 'FL_thigh_position_controller', 3: 'FL_calf_position_controller', 16 | 17 | 4: 'FR_hip_position_controller', 5: 'FR_thigh_position_controller', 6: 'FR_calf_position_controller', 18 | 19 | 7: 'RL_hip_position_controller', 8: 'RL_thigh_position_controller', 9: 'RL_calf_position_controller', 20 | 21 | 10: 'RR_hip_position_controller', 11: 'RR_thigh_position_controller', 12: 'RR_calf_position_controller'} 22 | 23 | elif type_of_control == 'torque': 24 | self.joints = {1: 'FL_hip_Effort_controller', 2: 'FL_thigh_Effort_controller', 3: 'FL_calf_Effort_controller', 25 | 26 | 4: 'FR_hip_Effort_controller', 5: 'FR_thigh_Effort_controller', 6: 'FR_calf_Effort_controller', 27 | 28 | 7: 'RL_hip_Effort_controller', 8: 'RL_thigh_Effort_controller', 9: 'RL_calf_Effort_controller', 29 | 30 | 10: 'RR_hip_Effort_controller', 11: 'RR_thigh_Effort_controller', 12: 'RR_calf_Effort_controller'} 31 | 32 | self.pub = {} 33 | self.joints_number = len(self.joints) 34 | 35 | self.cheetah_joints_sub = rospy.Subscriber("/mini_chee/joint_states", JointState, self.joints_pos_callback) 36 | for i in range(1,self.joints_number+1): 37 | self.pub[i]=rospy.Publisher(self.joint_name(self.joints[i]), Float64, queue_size=10) 38 | 39 | self.rate = rospy.Rate(rate_value) 40 | 41 | self.joints_positions = {} 42 | 43 | def move_joint(self,i, pos): 44 | """ 45 | 46 | i - number of joint: 47 | 1: 'FL_hip_controller', 48 | 2: 'FL_thigh_controller', 49 | 3: 'FL_calf_controller', 50 | 4: 'FR_hip_controller', 51 | 5: 'FR_thigh_controller', 52 | 6: 'FR_calf_controller', 53 | 7: 'RL_hip_controller', 54 | 8: 'RL_thigh_controller', 55 | 9: 'RL_calf_controller', 56 | 10: 'RR_hip_controller', 57 | 11: 'RR_thigh_controller', 58 | 12: 'RR_calf_controller' 59 | 60 | 61 | pos - angle in rad 62 | """ 63 | self.pub[i].publish(pos) 64 | 65 | def joint_name(self, joint): 66 | joint_name = '/mini_chee/'+joint+'/command' 67 | return joint_name 68 | 69 | #callback function for robot pos 70 | def joints_pos_callback(self, cheetah_joints_pos): 71 | ''' 72 | joints: 73 | ['FL_calf_joint', 'FL_hip_joint', 'FL_thigh_joint', 74 | 'FR_calf_joint', 'FR_hip_joint', 'FR_thigh_joint', 75 | 'RL_calf_joint', 'RL_hip_joint', 'RL_thigh_joint', 76 | 'RR_calf_joint', 'RR_hip_joint', 'RR_thigh_joint'] 77 | ''' 78 | self.joints_positions = dict(zip(cheetah_joints_pos.name, cheetah_joints_pos.position)) -------------------------------------------------------------------------------- /reconfigure/scripts/cur_pub.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # license removed for brevity 3 | import rospy 4 | from std_msgs.msg import Float64 5 | import math 6 | import random 7 | import time 8 | import numpy as np 9 | from dynamic_reconfigure.msg import Config # dynamics reconfigure 10 | 11 | config = Config() # dynamics reconfigure 12 | 13 | def reconfigure_cb(data): # dynamics reconfigure callback 14 | global config 15 | config = data 16 | 17 | class cheetah_control(): 18 | def __init__(self, type_of_control = 'Effort', time_pause_before_control = 5, rate_value = 50): 19 | rospy.init_node('rotate', anonymous=True) 20 | 21 | self.type_of_control = type_of_control 22 | self.time_pause_before_control = time_pause_before_control 23 | 24 | time.sleep(self.time_pause_before_control) 25 | 26 | self.joints = {1: 'FL_hip_Effort_controller', 2: 'FL_thigh_Effort_controller', 3: 'FL_calf_Effort_controller', 27 | 28 | 4: 'FR_hip_Effort_controller', 5: 'FR_thigh_Effort_controller', 6: 'FR_calf_Effort_controller', 29 | 30 | 7: 'RL_hip_Effort_controller', 8: 'RL_thigh_Effort_controller', 9: 'RL_calf_Effort_controller', 31 | 32 | 10: 'RR_hip_Effort_controller', 11: 'RR_thigh_Effort_controller', 12: 'RR_calf_Effort_controller'} 33 | self.pub = {} 34 | self.joints_number = len(self.joints) 35 | 36 | for i in range(1,self.joints_number+1): 37 | self.pub[i]=rospy.Publisher(self.joint_name(self.joints[i]), Float64, queue_size=10) 38 | 39 | self.rate = rospy.Rate(rate_value) 40 | 41 | def move_joint_to_cur(self,i, pos): 42 | """ 43 | 44 | i - number of joint: 45 | 1: 'FL_hip_Effort_controller', 46 | 2: 'FL_thigh_Effort_controller', 47 | 3: 'FL_calf_Effort_controller', 48 | 4: 'FR_hip_Effort_controller', 49 | 5: 'FR_thigh_Effort_controller', 50 | 6: 'FR_calf_Effort_controller', 51 | 7: 'RL_hip_Effort_controller', 52 | 8: 'RL_thigh_Effort_controller', 53 | 9: 'RL_calf_Effort_controller', 54 | 10: 'RR_hip_Effort_controller', 55 | 11: 'RR_thigh_Effort_controller', 56 | 12: 'RR_calf_Effort_controller' 57 | 58 | 59 | pos - angle in rad 60 | """ 61 | self.pub[i].publish(pos) 62 | 63 | def joint_name(self, joint): 64 | joint_name = '/mini_chee/'+joint+'/command' 65 | return joint_name 66 | 67 | 68 | if __name__ == '__main__': 69 | 70 | reconfigure_sub = rospy.Subscriber('/cheetah_cur_reconfigure/parameter_updates', Config, reconfigure_cb) # dynamics reconfigure subscriber 71 | 72 | cheetah_control_cur = cheetah_control() 73 | 74 | while not rospy.is_shutdown(): 75 | 76 | for i in range(len(config.doubles)): 77 | if config.doubles[i].name == 'FR_hip_cur': 78 | FR_hip_cur = config.doubles[i].value 79 | if config.doubles[i].name == 'FR_thigh_cur': 80 | FR_thigh_cur = config.doubles[i].value 81 | if config.doubles[i].name == 'FR_calf_cur': 82 | FR_calf_cur = config.doubles[i].value 83 | 84 | if config.doubles[i].name == 'FL_hip_cur': 85 | FL_hip_cur = config.doubles[i].value 86 | if config.doubles[i].name == 'FL_thigh_cur': 87 | FL_thigh_cur = config.doubles[i].value 88 | if config.doubles[i].name == 'FL_calf_cur': 89 | FL_calf_cur = config.doubles[i].value 90 | 91 | if config.doubles[i].name == 'BR_hip_cur': 92 | BR_hip_cur = config.doubles[i].value 93 | if config.doubles[i].name == 'BR_thigh_cur': 94 | BR_thigh_cur = config.doubles[i].value 95 | if config.doubles[i].name == 'BR_calf_cur': 96 | BR_calf_cur = config.doubles[i].value 97 | 98 | if config.doubles[i].name == 'BL_hip_cur': 99 | BL_hip_cur = config.doubles[i].value 100 | if config.doubles[i].name == 'BL_thigh_cur': 101 | BL_thigh_cur = config.doubles[i].value 102 | if config.doubles[i].name == 'BL_calf_cur': 103 | BL_calf_cur = config.doubles[i].value 104 | 105 | cheetah_control_cur.move_joint_to_cur(1,FL_hip_cur) 106 | cheetah_control_cur.move_joint_to_cur(2,FL_thigh_cur) 107 | cheetah_control_cur.move_joint_to_cur(3,FL_calf_cur) 108 | 109 | cheetah_control_cur.move_joint_to_cur(4,FR_hip_cur) 110 | cheetah_control_cur.move_joint_to_cur(5,FR_thigh_cur) 111 | cheetah_control_cur.move_joint_to_cur(6,FR_calf_cur) 112 | 113 | cheetah_control_cur.move_joint_to_cur(7,BL_hip_cur) 114 | cheetah_control_cur.move_joint_to_cur(8,BL_thigh_cur) 115 | cheetah_control_cur.move_joint_to_cur(9,BL_calf_cur) 116 | 117 | cheetah_control_cur.move_joint_to_cur(10,BR_hip_cur) 118 | cheetah_control_cur.move_joint_to_cur(11,BR_thigh_cur) 119 | cheetah_control_cur.move_joint_to_cur(12,BR_calf_cur) 120 | cheetah_control_cur.rate.sleep() -------------------------------------------------------------------------------- /reconfigure/scripts/pos_pub.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # license removed for brevity 3 | import rospy 4 | from std_msgs.msg import Float64 5 | import math 6 | import random 7 | import time 8 | import numpy as np 9 | from dynamic_reconfigure.msg import Config # dynamics reconfigure 10 | 11 | config = Config() # dynamics reconfigure 12 | 13 | def reconfigure_cb(data): # dynamics reconfigure callback 14 | global config 15 | config = data 16 | 17 | class cheetah_control(): 18 | def __init__(self, type_of_control = 'position', time_pause_before_control = 5, rate_value = 50): 19 | rospy.init_node('rotate', anonymous=True) 20 | 21 | self.type_of_control = type_of_control 22 | self.time_pause_before_control = time_pause_before_control 23 | 24 | time.sleep(self.time_pause_before_control) 25 | 26 | self.joints = {1: 'FL_hip_position_controller', 2: 'FL_thigh_position_controller', 3: 'FL_calf_position_controller', 27 | 28 | 4: 'FR_hip_position_controller', 5: 'FR_thigh_position_controller', 6: 'FR_calf_position_controller', 29 | 30 | 7: 'RL_hip_position_controller', 8: 'RL_thigh_position_controller', 9: 'RL_calf_position_controller', 31 | 32 | 10: 'RR_hip_position_controller', 11: 'RR_thigh_position_controller', 12: 'RR_calf_position_controller'} 33 | self.pub = {} 34 | self.joints_number = len(self.joints) 35 | 36 | for i in range(1,self.joints_number+1): 37 | self.pub[i]=rospy.Publisher(self.joint_name(self.joints[i]), Float64, queue_size=10) 38 | 39 | self.rate = rospy.Rate(rate_value) 40 | 41 | def move_joint_to_pos(self,i, pos): 42 | """ 43 | 44 | i - number of joint: 45 | 1: 'FL_hip_position_controller', 46 | 2: 'FL_thigh_position_controller', 47 | 3: 'FL_calf_position_controller', 48 | 4: 'FR_hip_position_controller', 49 | 5: 'FR_thigh_position_controller', 50 | 6: 'FR_calf_position_controller', 51 | 7: 'RL_hip_position_controller', 52 | 8: 'RL_thigh_position_controller', 53 | 9: 'RL_calf_position_controller', 54 | 10: 'RR_hip_position_controller', 55 | 11: 'RR_thigh_position_controller', 56 | 12: 'RR_calf_position_controller' 57 | 58 | 59 | pos - angle in rad 60 | """ 61 | self.pub[i].publish(pos) 62 | 63 | def joint_name(self, joint): 64 | joint_name = '/mini_chee/'+joint+'/command' 65 | return joint_name 66 | 67 | 68 | if __name__ == '__main__': 69 | 70 | reconfigure_sub = rospy.Subscriber('/cheetah_pos_reconfigure/parameter_updates', Config, reconfigure_cb) # dynamics reconfigure subscriber 71 | 72 | cheetah_control_pos = cheetah_control() 73 | 74 | while not rospy.is_shutdown(): 75 | 76 | for i in range(len(config.doubles)): 77 | if config.doubles[i].name == 'FR_hip_pos': 78 | FR_hip_pos = config.doubles[i].value 79 | if config.doubles[i].name == 'FR_thigh_pos': 80 | FR_thigh_pos = config.doubles[i].value 81 | if config.doubles[i].name == 'FR_calf_pos': 82 | FR_calf_pos = config.doubles[i].value 83 | 84 | if config.doubles[i].name == 'FL_hip_pos': 85 | FL_hip_pos = config.doubles[i].value 86 | if config.doubles[i].name == 'FL_thigh_pos': 87 | FL_thigh_pos = config.doubles[i].value 88 | if config.doubles[i].name == 'FL_calf_pos': 89 | FL_calf_pos = config.doubles[i].value 90 | 91 | if config.doubles[i].name == 'BR_hip_pos': 92 | BR_hip_pos = config.doubles[i].value 93 | if config.doubles[i].name == 'BR_thigh_pos': 94 | BR_thigh_pos = config.doubles[i].value 95 | if config.doubles[i].name == 'BR_calf_pos': 96 | BR_calf_pos = config.doubles[i].value 97 | 98 | if config.doubles[i].name == 'BL_hip_pos': 99 | BL_hip_pos = config.doubles[i].value 100 | if config.doubles[i].name == 'BL_thigh_pos': 101 | BL_thigh_pos = config.doubles[i].value 102 | if config.doubles[i].name == 'BL_calf_pos': 103 | BL_calf_pos = config.doubles[i].value 104 | 105 | cheetah_control_pos.move_joint_to_pos(1,FL_hip_pos) 106 | cheetah_control_pos.move_joint_to_pos(2,FL_thigh_pos) 107 | cheetah_control_pos.move_joint_to_pos(3,FL_calf_pos) 108 | 109 | cheetah_control_pos.move_joint_to_pos(4,FR_hip_pos) 110 | cheetah_control_pos.move_joint_to_pos(5,FR_thigh_pos) 111 | cheetah_control_pos.move_joint_to_pos(6,FR_calf_pos) 112 | 113 | cheetah_control_pos.move_joint_to_pos(7,BL_hip_pos) 114 | cheetah_control_pos.move_joint_to_pos(8,BL_thigh_pos) 115 | cheetah_control_pos.move_joint_to_pos(9,BL_calf_pos) 116 | 117 | cheetah_control_pos.move_joint_to_pos(10,BR_hip_pos) 118 | cheetah_control_pos.move_joint_to_pos(11,BR_thigh_pos) 119 | cheetah_control_pos.move_joint_to_pos(12,BR_calf_pos) 120 | cheetah_control_pos.rate.sleep() -------------------------------------------------------------------------------- /cheetah_description/xacro/mini_cheetah_control.urdf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | transmission_interface/SimpleTransmission 6 | 7 | hardware_interface/EffortJointInterface 8 | 9 | 10 | hardware_interface/EffortJointInterface 11 | 12 | 1 13 | 14 | 15 | 16 | transmission_interface/SimpleTransmission 17 | 18 | hardware_interface/EffortJointInterface 19 | 20 | 21 | hardware_interface/EffortJointInterface 22 | 23 | 1 24 | 25 | 26 | 27 | transmission_interface/SimpleTransmission 28 | 29 | hardware_interface/EffortJointInterface 30 | 31 | 32 | hardware_interface/EffortJointInterface 33 | 34 | 1 35 | 36 | 37 | 38 | transmission_interface/SimpleTransmission 39 | 40 | hardware_interface/EffortJointInterface 41 | 42 | 43 | hardware_interface/EffortJointInterface 44 | 45 | 1 46 | 47 | 48 | 49 | transmission_interface/SimpleTransmission 50 | 51 | hardware_interface/EffortJointInterface 52 | 53 | 54 | hardware_interface/EffortJointInterface 55 | 56 | 1 57 | 58 | 59 | 60 | transmission_interface/SimpleTransmission 61 | 62 | hardware_interface/EffortJointInterface 63 | 64 | 65 | hardware_interface/EffortJointInterface 66 | 67 | 1 68 | 69 | 70 | 71 | transmission_interface/SimpleTransmission 72 | 73 | hardware_interface/EffortJointInterface 74 | 75 | 76 | hardware_interface/EffortJointInterface 77 | 78 | 1 79 | 80 | 81 | 82 | transmission_interface/SimpleTransmission 83 | 84 | hardware_interface/EffortJointInterface 85 | 86 | 87 | hardware_interface/EffortJointInterface 88 | 89 | 1 90 | 91 | 92 | 93 | transmission_interface/SimpleTransmission 94 | 95 | hardware_interface/EffortJointInterface 96 | 97 | 98 | hardware_interface/EffortJointInterface 99 | 100 | 1 101 | 102 | 103 | 104 | transmission_interface/SimpleTransmission 105 | 106 | hardware_interface/EffortJointInterface 107 | 108 | 109 | hardware_interface/EffortJointInterface 110 | 111 | 1 112 | 113 | 114 | 115 | transmission_interface/SimpleTransmission 116 | 117 | hardware_interface/EffortJointInterface 118 | 119 | 120 | hardware_interface/EffortJointInterface 121 | 122 | 1 123 | 124 | 125 | 126 | transmission_interface/SimpleTransmission 127 | 128 | hardware_interface/EffortJointInterface 129 | 130 | 131 | hardware_interface/EffortJointInterface 132 | 133 | 1 134 | 135 | 136 | 137 | Gazebo/DarkGrey 138 | 139 | 142 | 143 | Gazebo/DarkGrey 144 | 145 | 148 | 149 | 150 | /mini_chee 151 | 152 | 153 | 154 | 155 | -------------------------------------------------------------------------------- /cheetah_show/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 2.8.3) 2 | project(cheetah_show) 3 | 4 | ## Compile as C++11, supported in ROS Kinetic and newer 5 | # add_compile_options(-std=c++11) 6 | 7 | ## Find catkin macros and libraries 8 | ## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) 9 | ## is used, also find other catkin packages 10 | find_package(catkin REQUIRED) 11 | 12 | ## System dependencies are found with CMake's conventions 13 | # find_package(Boost REQUIRED COMPONENTS system) 14 | 15 | 16 | ## Uncomment this if the package has a setup.py. This macro ensures 17 | ## modules and global scripts declared therein get installed 18 | ## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html 19 | # catkin_python_setup() 20 | 21 | ################################################ 22 | ## Declare ROS messages, services and actions ## 23 | ################################################ 24 | 25 | ## To declare and build messages, services or actions from within this 26 | ## package, follow these steps: 27 | ## * Let MSG_DEP_SET be the set of packages whose message types you use in 28 | ## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). 29 | ## * In the file package.xml: 30 | ## * add a build_depend tag for "message_generation" 31 | ## * add a build_depend and a exec_depend tag for each package in MSG_DEP_SET 32 | ## * If MSG_DEP_SET isn't empty the following dependency has been pulled in 33 | ## but can be declared for certainty nonetheless: 34 | ## * add a exec_depend tag for "message_runtime" 35 | ## * In this file (CMakeLists.txt): 36 | ## * add "message_generation" and every package in MSG_DEP_SET to 37 | ## find_package(catkin REQUIRED COMPONENTS ...) 38 | ## * add "message_runtime" and every package in MSG_DEP_SET to 39 | ## catkin_package(CATKIN_DEPENDS ...) 40 | ## * uncomment the add_*_files sections below as needed 41 | ## and list every .msg/.srv/.action file to be processed 42 | ## * uncomment the generate_messages entry below 43 | ## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) 44 | 45 | ## Generate messages in the 'msg' folder 46 | # add_message_files( 47 | # FILES 48 | # Message1.msg 49 | # Message2.msg 50 | # ) 51 | 52 | ## Generate services in the 'srv' folder 53 | # add_service_files( 54 | # FILES 55 | # Service1.srv 56 | # Service2.srv 57 | # ) 58 | 59 | ## Generate actions in the 'action' folder 60 | # add_action_files( 61 | # FILES 62 | # Action1.action 63 | # Action2.action 64 | # ) 65 | 66 | ## Generate added messages and services with any dependencies listed here 67 | # generate_messages( 68 | # DEPENDENCIES 69 | # std_msgs # Or other packages containing msgs 70 | # ) 71 | 72 | ################################################ 73 | ## Declare ROS dynamic reconfigure parameters ## 74 | ################################################ 75 | 76 | ## To declare and build dynamic reconfigure parameters within this 77 | ## package, follow these steps: 78 | ## * In the file package.xml: 79 | ## * add a build_depend and a exec_depend tag for "dynamic_reconfigure" 80 | ## * In this file (CMakeLists.txt): 81 | ## * add "dynamic_reconfigure" to 82 | ## find_package(catkin REQUIRED COMPONENTS ...) 83 | ## * uncomment the "generate_dynamic_reconfigure_options" section below 84 | ## and list every .cfg file to be processed 85 | 86 | ## Generate dynamic reconfigure parameters in the 'cfg' folder 87 | # generate_dynamic_reconfigure_options( 88 | # cfg/DynReconf1.cfg 89 | # cfg/DynReconf2.cfg 90 | # ) 91 | 92 | ################################### 93 | ## catkin specific configuration ## 94 | ################################### 95 | ## The catkin_package macro generates cmake config files for your package 96 | ## Declare things to be passed to dependent projects 97 | ## INCLUDE_DIRS: uncomment this if your package contains header files 98 | ## LIBRARIES: libraries you create in this project that dependent projects also need 99 | ## CATKIN_DEPENDS: catkin_packages dependent projects also need 100 | ## DEPENDS: system dependencies of this project that dependent projects also need 101 | catkin_package( 102 | # INCLUDE_DIRS include 103 | # LIBRARIES cheetah_show 104 | # CATKIN_DEPENDS other_catkin_pkg 105 | # DEPENDS system_lib 106 | ) 107 | 108 | ########### 109 | ## Build ## 110 | ########### 111 | 112 | ## Specify additional locations of header files 113 | ## Your package locations should be listed before other locations 114 | include_directories( 115 | # include 116 | # ${catkin_INCLUDE_DIRS} 117 | ) 118 | 119 | ## Declare a C++ library 120 | # add_library(${PROJECT_NAME} 121 | # src/${PROJECT_NAME}/cheetah_show.cpp 122 | # ) 123 | 124 | ## Add cmake target dependencies of the library 125 | ## as an example, code may need to be generated before libraries 126 | ## either from message generation or dynamic reconfigure 127 | # add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) 128 | 129 | ## Declare a C++ executable 130 | ## With catkin_make all packages are built within a single CMake context 131 | ## The recommended prefix ensures that target names across packages don't collide 132 | # add_executable(${PROJECT_NAME}_node src/cheetah_show_node.cpp) 133 | 134 | ## Rename C++ executable without prefix 135 | ## The above recommended prefix causes long target names, the following renames the 136 | ## target back to the shorter version for ease of user use 137 | ## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node" 138 | # set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "") 139 | 140 | ## Add cmake target dependencies of the executable 141 | ## same as for the library above 142 | # add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) 143 | 144 | ## Specify libraries to link a library or executable target against 145 | # target_link_libraries(${PROJECT_NAME}_node 146 | # ${catkin_LIBRARIES} 147 | # ) 148 | 149 | ############# 150 | ## Install ## 151 | ############# 152 | 153 | # all install targets should use catkin DESTINATION variables 154 | # See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html 155 | 156 | ## Mark executable scripts (Python etc.) for installation 157 | ## in contrast to setup.py, you can choose the destination 158 | # catkin_install_python(PROGRAMS 159 | # scripts/my_python_script 160 | # DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 161 | # ) 162 | 163 | ## Mark executables for installation 164 | ## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_executables.html 165 | # install(TARGETS ${PROJECT_NAME}_node 166 | # RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 167 | # ) 168 | 169 | ## Mark libraries for installation 170 | ## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_libraries.html 171 | # install(TARGETS ${PROJECT_NAME} 172 | # ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 173 | # LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 174 | # RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION} 175 | # ) 176 | 177 | ## Mark cpp header files for installation 178 | # install(DIRECTORY include/${PROJECT_NAME}/ 179 | # DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} 180 | # FILES_MATCHING PATTERN "*.h" 181 | # PATTERN ".svn" EXCLUDE 182 | # ) 183 | 184 | ## Mark other files for installation (e.g. launch and bag files, etc.) 185 | # install(FILES 186 | # # myfile1 187 | # # myfile2 188 | # DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} 189 | # ) 190 | 191 | ############# 192 | ## Testing ## 193 | ############# 194 | 195 | ## Add gtest based cpp test target and link libraries 196 | # catkin_add_gtest(${PROJECT_NAME}-test test/test_cheetah_show.cpp) 197 | # if(TARGET ${PROJECT_NAME}-test) 198 | # target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) 199 | # endif() 200 | 201 | ## Add folders to be run by python nosetests 202 | # catkin_add_nosetests(test) 203 | -------------------------------------------------------------------------------- /cheetah_control/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 2.8.3) 2 | project(cheetah_control) 3 | 4 | ## Compile as C++11, supported in ROS Kinetic and newer 5 | # add_compile_options(-std=c++11) 6 | 7 | ## Find catkin macros and libraries 8 | ## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) 9 | ## is used, also find other catkin packages 10 | find_package(catkin REQUIRED) 11 | 12 | ## System dependencies are found with CMake's conventions 13 | # find_package(Boost REQUIRED COMPONENTS system) 14 | 15 | 16 | ## Uncomment this if the package has a setup.py. This macro ensures 17 | ## modules and global scripts declared therein get installed 18 | ## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html 19 | # catkin_python_setup() 20 | 21 | ################################################ 22 | ## Declare ROS messages, services and actions ## 23 | ################################################ 24 | 25 | ## To declare and build messages, services or actions from within this 26 | ## package, follow these steps: 27 | ## * Let MSG_DEP_SET be the set of packages whose message types you use in 28 | ## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). 29 | ## * In the file package.xml: 30 | ## * add a build_depend tag for "message_generation" 31 | ## * add a build_depend and a exec_depend tag for each package in MSG_DEP_SET 32 | ## * If MSG_DEP_SET isn't empty the following dependency has been pulled in 33 | ## but can be declared for certainty nonetheless: 34 | ## * add a exec_depend tag for "message_runtime" 35 | ## * In this file (CMakeLists.txt): 36 | ## * add "message_generation" and every package in MSG_DEP_SET to 37 | ## find_package(catkin REQUIRED COMPONENTS ...) 38 | ## * add "message_runtime" and every package in MSG_DEP_SET to 39 | ## catkin_package(CATKIN_DEPENDS ...) 40 | ## * uncomment the add_*_files sections below as needed 41 | ## and list every .msg/.srv/.action file to be processed 42 | ## * uncomment the generate_messages entry below 43 | ## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) 44 | 45 | ## Generate messages in the 'msg' folder 46 | # add_message_files( 47 | # FILES 48 | # Message1.msg 49 | # Message2.msg 50 | # ) 51 | 52 | ## Generate services in the 'srv' folder 53 | # add_service_files( 54 | # FILES 55 | # Service1.srv 56 | # Service2.srv 57 | # ) 58 | 59 | ## Generate actions in the 'action' folder 60 | # add_action_files( 61 | # FILES 62 | # Action1.action 63 | # Action2.action 64 | # ) 65 | 66 | ## Generate added messages and services with any dependencies listed here 67 | # generate_messages( 68 | # DEPENDENCIES 69 | # std_msgs # Or other packages containing msgs 70 | # ) 71 | 72 | ################################################ 73 | ## Declare ROS dynamic reconfigure parameters ## 74 | ################################################ 75 | 76 | ## To declare and build dynamic reconfigure parameters within this 77 | ## package, follow these steps: 78 | ## * In the file package.xml: 79 | ## * add a build_depend and a exec_depend tag for "dynamic_reconfigure" 80 | ## * In this file (CMakeLists.txt): 81 | ## * add "dynamic_reconfigure" to 82 | ## find_package(catkin REQUIRED COMPONENTS ...) 83 | ## * uncomment the "generate_dynamic_reconfigure_options" section below 84 | ## and list every .cfg file to be processed 85 | 86 | ## Generate dynamic reconfigure parameters in the 'cfg' folder 87 | # generate_dynamic_reconfigure_options( 88 | # cfg/DynReconf1.cfg 89 | # cfg/DynReconf2.cfg 90 | # ) 91 | 92 | ################################### 93 | ## catkin specific configuration ## 94 | ################################### 95 | ## The catkin_package macro generates cmake config files for your package 96 | ## Declare things to be passed to dependent projects 97 | ## INCLUDE_DIRS: uncomment this if your package contains header files 98 | ## LIBRARIES: libraries you create in this project that dependent projects also need 99 | ## CATKIN_DEPENDS: catkin_packages dependent projects also need 100 | ## DEPENDS: system dependencies of this project that dependent projects also need 101 | catkin_package( 102 | # INCLUDE_DIRS include 103 | # LIBRARIES cheetah_control 104 | # CATKIN_DEPENDS other_catkin_pkg 105 | # DEPENDS system_lib 106 | ) 107 | 108 | ########### 109 | ## Build ## 110 | ########### 111 | 112 | ## Specify additional locations of header files 113 | ## Your package locations should be listed before other locations 114 | include_directories( 115 | # include 116 | # ${catkin_INCLUDE_DIRS} 117 | ) 118 | 119 | ## Declare a C++ library 120 | # add_library(${PROJECT_NAME} 121 | # src/${PROJECT_NAME}/cheetah_control.cpp 122 | # ) 123 | 124 | ## Add cmake target dependencies of the library 125 | ## as an example, code may need to be generated before libraries 126 | ## either from message generation or dynamic reconfigure 127 | # add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) 128 | 129 | ## Declare a C++ executable 130 | ## With catkin_make all packages are built within a single CMake context 131 | ## The recommended prefix ensures that target names across packages don't collide 132 | # add_executable(${PROJECT_NAME}_node src/cheetah_control_node.cpp) 133 | 134 | ## Rename C++ executable without prefix 135 | ## The above recommended prefix causes long target names, the following renames the 136 | ## target back to the shorter version for ease of user use 137 | ## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node" 138 | # set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "") 139 | 140 | ## Add cmake target dependencies of the executable 141 | ## same as for the library above 142 | # add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) 143 | 144 | ## Specify libraries to link a library or executable target against 145 | # target_link_libraries(${PROJECT_NAME}_node 146 | # ${catkin_LIBRARIES} 147 | # ) 148 | 149 | ############# 150 | ## Install ## 151 | ############# 152 | 153 | # all install targets should use catkin DESTINATION variables 154 | # See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html 155 | 156 | ## Mark executable scripts (Python etc.) for installation 157 | ## in contrast to setup.py, you can choose the destination 158 | # catkin_install_python(PROGRAMS 159 | # scripts/my_python_script 160 | # DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 161 | # ) 162 | 163 | ## Mark executables for installation 164 | ## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_executables.html 165 | # install(TARGETS ${PROJECT_NAME}_node 166 | # RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 167 | # ) 168 | 169 | ## Mark libraries for installation 170 | ## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_libraries.html 171 | # install(TARGETS ${PROJECT_NAME} 172 | # ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 173 | # LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 174 | # RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION} 175 | # ) 176 | 177 | ## Mark cpp header files for installation 178 | # install(DIRECTORY include/${PROJECT_NAME}/ 179 | # DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} 180 | # FILES_MATCHING PATTERN "*.h" 181 | # PATTERN ".svn" EXCLUDE 182 | # ) 183 | 184 | ## Mark other files for installation (e.g. launch and bag files, etc.) 185 | # install(FILES 186 | # # myfile1 187 | # # myfile2 188 | # DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} 189 | # ) 190 | 191 | ############# 192 | ## Testing ## 193 | ############# 194 | 195 | ## Add gtest based cpp test target and link libraries 196 | # catkin_add_gtest(${PROJECT_NAME}-test test/test_cheetah_control.cpp) 197 | # if(TARGET ${PROJECT_NAME}-test) 198 | # target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) 199 | # endif() 200 | 201 | ## Add folders to be run by python nosetests 202 | # catkin_add_nosetests(test) 203 | -------------------------------------------------------------------------------- /cheetah_description/xacro/mini_cheetah.urdf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | Gazebo/Green 62 | false 63 | 64 | 65 | 0.9 66 | 0.9 67 | 68 | 69 | 70 | 71 | 0.9 72 | 0.9 73 | Gazebo/White 74 | 75 | 76 | 0.9 77 | 0.9 78 | Gazebo/Red 79 | 80 | 81 | 82 | 0.9 83 | 0.9 84 | 85 | 86 | 87 | 0.9 88 | 0.9 89 | 1 90 | Gazebo/White 91 | 92 | 93 | 94 | 95 | 0.9 96 | 0.9 97 | 1 98 | 99 | 100 | 0.9 101 | 0.9 102 | 1 103 | Gazebo/DarkGrey 104 | 105 | 106 | 107 | 108 | 109 | 0.9 110 | 0.9 111 | 112 | 113 | 114 | 0.9 115 | 0.9 116 | 1 117 | Gazebo/White 118 | 119 | 120 | 121 | 122 | 0.9 123 | 0.9 124 | 1 125 | 126 | 127 | 0.9 128 | 0.9 129 | 1 130 | Gazebo/DarkGrey 131 | 132 | 133 | 134 | 135 | 136 | 0.9 137 | 0.9 138 | 139 | 140 | 141 | 0.9 142 | 0.9 143 | 1 144 | Gazebo/White 145 | 146 | 147 | 148 | 149 | 0.9 150 | 0.9 151 | 1 152 | 153 | 154 | 0.9 155 | 0.9 156 | 1 157 | Gazebo/DarkGrey 158 | 159 | 160 | 161 | 162 | 163 | 0.9 164 | 0.9 165 | 166 | 167 | 168 | 0.9 169 | 0.9 170 | 1 171 | Gazebo/White 172 | 173 | 174 | 175 | 176 | 0.9 177 | 0.9 178 | 1 179 | 180 | 181 | 0.9 182 | 0.9 183 | 1 184 | Gazebo/DarkGrey 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | 429 | 430 | 431 | 432 | 433 | 434 | 435 | 436 | 437 | 438 | 439 | 440 | 441 | 442 | 443 | 444 | 445 | 446 | 447 | 448 | 449 | 450 | 451 | 452 | 453 | 454 | 455 | 456 | 457 | 458 | 459 | 460 | 461 | 462 | 463 | 464 | 465 | 466 | 467 | 468 | 469 | 470 | 471 | 472 | 473 | 474 | 475 | 476 | 477 | 478 | 479 | 480 | 481 | 482 | 483 | 484 | 485 | 486 | 487 | 488 | 489 | 490 | 491 | 492 | 493 | 494 | 495 | 496 | 497 | 498 | 499 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 509 | 510 | 511 | 512 | 513 | 514 | 515 | 516 | 517 | 518 | 519 | 520 | 521 | 522 | 523 | 524 | 525 | 531 | 532 | 533 | 534 | 535 | 536 | 537 | 538 | 539 | 540 | 541 | 542 | 543 | 544 | 545 | 546 | 547 | 548 | 549 | 550 | 551 | 552 | 553 | 554 | 555 | 556 | 557 | 558 | 559 | 560 | 561 | 562 | 563 | 564 | 565 | 566 | 567 | 568 | 569 | 570 | 571 | 572 | 573 | 574 | 575 | 576 | 577 | 578 | 579 | 580 | 581 | 582 | 583 | 584 | 585 | 586 | 587 | 588 | 589 | 590 | 591 | 592 | 593 | 594 | 595 | 596 | 597 | 598 | 599 | 600 | 601 | 602 | 603 | 604 | 605 | 606 | 607 | 608 | 609 | 610 | 611 | 612 | 613 | 614 | 615 | 616 | 617 | 618 | 619 | 620 | 621 | 622 | 623 | 624 | 625 | 626 | 627 | 628 | 629 | 630 | 631 | 632 | 633 | 634 | 635 | 636 | 637 | 638 | 639 | 640 | 641 | 642 | 643 | 644 | 645 | 646 | 647 | 648 | 649 | 650 | 651 | 652 | 653 | 654 | 655 | 656 | 657 | 658 | 659 | 660 | 661 | 662 | 663 | 664 | 665 | 666 | 667 | 668 | 669 | 670 | 671 | 672 | 673 | 674 | 675 | 676 | 677 | 678 | 679 | 680 | 681 | 682 | 683 | 684 | 685 | 686 | 687 | 688 | 689 | 690 | 691 | 692 | 693 | 694 | 695 | 696 | 697 | 698 | 699 | 700 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 708 | 709 | 710 | 711 | 712 | 713 | 714 | 715 | 716 | 717 | 718 | 719 | 720 | 721 | 722 | 723 | 724 | 725 | 726 | 727 | 728 | --------------------------------------------------------------------------------