├── 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 | 
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 |
--------------------------------------------------------------------------------