├── .gitignore
├── description
├── rhea.blend
├── rhea.urdf.xacro
├── urdf
│ └── rhea.urdf
└── rhea.ros2_control.xacro
├── images
└── rhea_render.jpg
├── README.md
├── package.xml
├── CMakeLists.txt
├── LICENSE
└── launch
└── view_robot.launch.py
/.gitignore:
--------------------------------------------------------------------------------
1 | **/.DS_Store
2 | build
3 | description/rhea.blend1
4 |
--------------------------------------------------------------------------------
/description/rhea.blend:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/G-Levine/rhea_description/HEAD/description/rhea.blend
--------------------------------------------------------------------------------
/images/rhea_render.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/G-Levine/rhea_description/HEAD/images/rhea_render.jpg
--------------------------------------------------------------------------------
/description/rhea.urdf.xacro:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Rhea wheeled biped robot
2 |
3 |
4 |
5 | URDF model for the Rhea wheeled biped.
6 |
7 | If this is used with ROS2 Control on the physical robot, [pi3hat_hardware_interface](https://github.com/G-Levine/pi3hat_hardware_interface) is required.
8 |
9 | The source for the meshes/URDF is contained in `urdf/rhea.blend`. This can be edited and re-exported using the [Phobos Blender plugin](https://github.com/dfki-ric/phobos).
--------------------------------------------------------------------------------
/package.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | rhea_description
5 | 0.0.0
6 | Description package for the Rhea wheeled biped robot
7 | Gabrael Levine
8 | TODO: License declaration
9 |
10 | ament_cmake
11 |
12 | ament_lint_auto
13 | ament_lint_common
14 |
15 |
16 | ament_cmake
17 |
18 |
19 |
--------------------------------------------------------------------------------
/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 3.8)
2 | project(rhea_description)
3 |
4 | if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
5 | add_compile_options(-Wall -Wextra -Wpedantic)
6 | endif()
7 |
8 | # find dependencies
9 | find_package(ament_cmake REQUIRED)
10 | # uncomment the following section in order to fill in
11 | # further dependencies manually.
12 | # find_package( REQUIRED)
13 |
14 | install(
15 | DIRECTORY description launch
16 | DESTINATION share/${PROJECT_NAME}
17 | )
18 |
19 | if(BUILD_TESTING)
20 | find_package(ament_lint_auto REQUIRED)
21 | # the following line skips the linter which checks for copyrights
22 | # comment the line when a copyright and license is added to all source files
23 | set(ament_cmake_copyright_FOUND TRUE)
24 | # the following line skips cpplint (only works in a git repo)
25 | # comment the line when this package is in a git repo and when
26 | # a copyright and license is added to all source files
27 | set(ament_cmake_cpplint_FOUND TRUE)
28 | ament_lint_auto_find_test_dependencies()
29 | endif()
30 |
31 | ament_package()
32 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2024 Gabrael Levine
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/launch/view_robot.launch.py:
--------------------------------------------------------------------------------
1 | import os
2 | from launch import LaunchDescription
3 | from launch.actions import DeclareLaunchArgument
4 | from launch.conditions import IfCondition, UnlessCondition
5 | from launch.substitutions import Command, LaunchConfiguration
6 | from launch_ros.actions import Node
7 | from launch_ros.substitutions import FindPackageShare
8 |
9 | def generate_launch_description():
10 |
11 | # Set the path to this package.
12 | pkg_share = FindPackageShare(package='rhea_description').find('rhea_description')
13 |
14 | # Set the path to the RViz configuration settings
15 | default_rviz_config_path = os.path.join(pkg_share, 'rviz/rviz_basic_settings.rviz')
16 |
17 | # Set the path to the URDF file
18 | default_urdf_model_path = os.path.join(pkg_share, 'description/rhea.urdf.xacro')
19 |
20 | ########### YOU DO NOT NEED TO CHANGE ANYTHING BELOW THIS LINE ##############
21 | # Launch configuration variables specific to simulation
22 | gui = LaunchConfiguration('gui')
23 | urdf_model = LaunchConfiguration('urdf_model')
24 | rviz_config_file = LaunchConfiguration('rviz_config_file')
25 | use_robot_state_pub = LaunchConfiguration('use_robot_state_pub')
26 | use_rviz = LaunchConfiguration('use_rviz')
27 | use_sim_time = LaunchConfiguration('use_sim_time')
28 |
29 | # Declare the launch arguments
30 | declare_urdf_model_path_cmd = DeclareLaunchArgument(
31 | name='urdf_model',
32 | default_value=default_urdf_model_path,
33 | description='Absolute path to robot urdf file')
34 |
35 | declare_rviz_config_file_cmd = DeclareLaunchArgument(
36 | name='rviz_config_file',
37 | default_value=default_rviz_config_path,
38 | description='Full path to the RVIZ config file to use')
39 |
40 | declare_use_joint_state_publisher_cmd = DeclareLaunchArgument(
41 | name='gui',
42 | default_value='True',
43 | description='Flag to enable joint_state_publisher_gui')
44 |
45 | declare_use_robot_state_pub_cmd = DeclareLaunchArgument(
46 | name='use_robot_state_pub',
47 | default_value='True',
48 | description='Whether to start the robot state publisher')
49 |
50 | declare_use_rviz_cmd = DeclareLaunchArgument(
51 | name='use_rviz',
52 | default_value='True',
53 | description='Whether to start RVIZ')
54 |
55 | declare_use_sim_time_cmd = DeclareLaunchArgument(
56 | name='use_sim_time',
57 | default_value='True',
58 | description='Use simulation (Gazebo) clock if true')
59 |
60 | # Specify the actions
61 |
62 | # # Publish the joint state values for the non-fixed joints in the URDF file.
63 | start_joint_state_publisher_cmd = Node(
64 | condition=UnlessCondition(gui),
65 | package='joint_state_publisher',
66 | executable='joint_state_publisher',
67 | name='joint_state_publisher')
68 |
69 | # # A GUI to manipulate the joint state values
70 | start_joint_state_publisher_gui_node = Node(
71 | condition=IfCondition(gui),
72 | package='joint_state_publisher_gui',
73 | executable='joint_state_publisher_gui',
74 | name='joint_state_publisher_gui')
75 |
76 | # Subscribe to the joint states of the robot, and publish the 3D pose of each link.
77 | start_robot_state_publisher_cmd = Node(
78 | condition=IfCondition(use_robot_state_pub),
79 | package='robot_state_publisher',
80 | executable='robot_state_publisher',
81 | parameters=[{'use_sim_time': use_sim_time,
82 | 'robot_description': Command(['xacro ', urdf_model])}],
83 | arguments=[default_urdf_model_path])
84 |
85 | # Launch RViz
86 | start_rviz_cmd = Node(
87 | condition=IfCondition(use_rviz),
88 | package='rviz2',
89 | executable='rviz2',
90 | name='rviz2',
91 | output='screen',
92 | arguments=['-d', rviz_config_file])
93 |
94 |
95 | # Create the launch description and populate
96 | ld = LaunchDescription()
97 |
98 | # Declare the launch options
99 | ld.add_action(declare_urdf_model_path_cmd)
100 | ld.add_action(declare_rviz_config_file_cmd)
101 | ld.add_action(declare_use_joint_state_publisher_cmd)
102 | ld.add_action(declare_use_robot_state_pub_cmd)
103 | ld.add_action(declare_use_rviz_cmd)
104 | ld.add_action(declare_use_sim_time_cmd)
105 |
106 | # Add any actions
107 | ld.add_action(start_joint_state_publisher_cmd)
108 | ld.add_action(start_joint_state_publisher_gui_node)
109 | ld.add_action(start_robot_state_publisher_cmd)
110 | ld.add_action(start_rviz_cmd)
111 |
112 | return ld
113 |
--------------------------------------------------------------------------------
/description/urdf/rhea.urdf:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
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 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
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 |
--------------------------------------------------------------------------------
/description/rhea.ros2_control.xacro:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | pi3hat_hardware_interface/Pi3HatHardwareInterface
8 | -90.0
9 | 0.0
10 | 90.0
11 |
12 |
13 |
14 | 3
15 | 1
16 | cheetah
17 |
18 | 95.5
19 | 30.0
20 | 18.0
21 | 500.0
22 | 5.0
23 | -1
24 | -2.46091
25 |
26 | -2.46091
27 | 0.68068
28 | 10.0
29 | 10.0
30 | 100.0
31 | 10.0
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 | 1
46 | 2
47 | cheetah
48 |
49 | 95.5
50 | 30.0
51 | 18.0
52 | 500.0
53 | 5.0
54 | -1
55 | 2.75762
56 |
57 | 0.66323
58 | 2.75762
59 | 10.0
60 | 10.0
61 | 100.0
62 | 10.0
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 | 1
77 | 3
78 | cheetah
79 |
80 | 12.5
81 | 200.0
82 | 18.0
83 | 500.0
84 | 5.0
85 | 1
86 | 0.0
87 |
88 | -1.0
89 | 1.0
90 | 30.0
91 | 10.0
92 | 100.0
93 | 2.0
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 | 3
108 | 4
109 | cheetah
110 |
111 | 95.5
112 | 30.0
113 | 18.0
114 | 500.0
115 | 5.0
116 | -1
117 | 2.46091
118 |
119 | -0.68068
120 | 2.46091
121 | 10.0
122 | 10.0
123 | 100.0
124 | 10.0
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 | 2
139 | 5
140 | cheetah
141 |
142 | 95.5
143 | 30.0
144 | 18.0
145 | 500.0
146 | 5.0
147 | -1
148 | -2.75762
149 |
150 | -2.75762
151 | -0.66323
152 | 10.0
153 | 10.0
154 | 100.0
155 | 10.0
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 | 2
170 | 6
171 | cheetah
172 |
173 | 12.5
174 | 200.0
175 | 18.0
176 | 500.0
177 | 5.0
178 | 1
179 | 0.0
180 |
181 | -1.0
182 | 1.0
183 | 30.0
184 | 2.0
185 | 100.0
186 | 10.0
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 |
--------------------------------------------------------------------------------