-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFourWheelSteering.html
208 lines (191 loc) · 9.58 KB
/
FourWheelSteering.html
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
<!DOCTYPE HTML>
<!--
Massively by HTML5 UP
html5up.net | @ajlkn
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
-->
<html>
<head>
<title>Kai Wang's Personal Website</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
<link rel="stylesheet" href="assets/css/main.css" />
<noscript>
<link rel="stylesheet" href="assets/css/noscript.css" />
</noscript>
</head>
<body class="is-preload">
<!-- Wrapper -->
<div id="wrapper">
<!-- Header -->
<header id="header">
<a href="index.html" class="logo">Portfolio</a>
</header>
<!-- Nav -->
<nav id="nav">
<ul class="links">
<li><a href="index.html">HOME</a></li>
<li><a href="DroidChallenge.html">Project 1</a></li>
<li><a href="QuadRacer.html">Project 2</a></li>
<li><a href="LiftingSystem.html">Project 3</a></li>
<li><a href="PondAerator.html">Project 4</a></li>
<li><a href="RoboMaster.html">Project 5</a></li>
<li><a href="SolarSystem.html">Project 6</a></li>
<li><a href="DifferentialDrive.html">Project 7</a></li>
<li class="active"><a href="FourWheelSteering.html">Project 8</a></li>
</ul>
<ul class="icons">
<li><a href="https://www.linkedin.com/in/kai-wang-7806044268/" class="icon brands fa-linkedin"><span
class="label">LinkedIn</span></a></li>
<li><a href="https://github.com/Kaiser-Wang" class="icon brands fa-github"><span
class="label">GitHub</span></a></li>
</ul>
</nav>
<!-- Main -->
<div id="main">
<!-- Post -->
<section class="post">
<header class="major">
<h1>Four Wheel Steering Robot</h1>
<p>This four wheel steering robot project simulated a Ranger Mini robot and another four wheel
steering robot in Gazebo for teleoperation, SLAM, Navigation and other functions. Some functions
were also tested on a real four wheel steering robot. A four wheel steering robot usually has
four steering motors with encoders, four driving motors with encoders, motor controllers with
ROS drivers, four separately driven andsteered wheels, a battery, a camera, a lidar, an IMU, a
microncontroller and a computer. A four wheel steering robot has three motion modes: opposite
phase mode, in phase mode and pivot turn mode. Each mode requires a specific combination of four
steering angles and four driving speeds and directions. This project involved software
development in ROS using Python and C++ on Ubuntu Linux and hardware devleopment for sensors,
actuators, and controllers. The concepts and methods used in this project can also be applied to
other four wheel steering robots.</p>
</header>
<div class="image main">
<p style="text-align:center; margin-bottom:0px;"><img src="images/FourWheelSteering/ranger.png"
alt=""
style="margin-top:0px; margin-bottom:0px; display:inline-block; width: 50%; height: 50%">
</p>
</div>
<h2>Description of Project</h2>
<p style="margin-bottom:0px;">In this project, I accomplished the following tasks:
<li>Understood four wheel steering kinematics and three motion modes.</li>
<p style="text-align:center; margin-bottom:0px;"><img src="images/FourWheelSteering/kinematics.png"
alt=""
style="margin-top:10px; margin-bottom:0px; display:inline-block; width: 100%; height: 100%"></p>
<li>Used SolidWorks to URDF Exporter to export the CAD model of a four wheel steering robot into a
URDF file.</li>
<li>Simulated a Ranger Mini robot and another four wheel steering robot in Gazebo using open source
ROS packages. Built URDF models for four wheel steering robots and SDF models for Gazebo worlds.
Used URDF transmission for motor joints and ros control, and used Gazebo plugins for IMU, lidar,
camera, ros control, etc. Used controller manager to load joint state controller and four wheel
steering controller.
</li>
<p style="text-align:center; margin-bottom:0px;"><img
src="images/FourWheelSteering/Gazebo_ros_transmission.png" alt=""
style="margin-top:0px; margin-bottom:0px; display:inline-block; width: 100%; height: 100%"></p>
<li>Tuned and tested SLAM (gmapping, rtabmap), Navigation (move_base, navigation stack), and local
planner (dwa, teb) on four wheel steering robots in Gazebo simulation environment.</li>
<li>Setup and configured four steering servo motors, four driving BLDC motors, encoders, and motor
controllers.</li>
<li>Tuned PID parameters for closed loop speed control of driving motors and closed loop position
control of steering motors.</li>
<li>Developed a serial motor driver in C++ and created a node to subscribe motor command and publish
encoder speed in ROS.</li>
<li>Developed a CAN bus motor driver in Arduino based on CAN bus protocol and used rosserial to
communicate with ROS. Used CAN bus analyzer and module for development.</li>
<li>Developed the hardware interface between motors and ros controller (four wheel steering
controller and joint state controller).</li>
<p style="text-align:center; margin-bottom:0px;"><img
src="images/FourWheelSteering/gazebo_ros_control.png" alt=""
style="margin-top:0px; margin-bottom:0px; display:inline-block; width: 100%; height: 100%"></p>
<li>Modified four wheel steering controller for three motion modes.</li>
<li>Published /cmd_vel ROS topic in terminal to control four wheel steering robots in simulation and
in real world.</li>
<p style="text-align:center; margin-bottom:0px;"><img src="images/FourWheelSteering/teleop.gif" alt=""
style="margin-top:0px; margin-bottom:0px; display:inline-block; width: 100%; height: 100%"></p>
<li>Developed and tested teleoperation of four wheel steering robots in ROS with a remote joystick
controller.</li>
<li>Setup a NVIDIA Jetson and developed ROS in ARM64 architectures environment with the help of SSH
and remote desktop.</li>
<li>Setup and tested 3D lidar, fisheye camera, ZED camera, PTZ camera, IP camera, etc. in ROS
through Ethernet.</li>
<li>Wired and soldered different types of sensors and actuators, and programmed Arduino to read
sensors and control actuators with relays in ROS and UI.</li>
<li>Wrote many ROS nodes for publishers and subscribers in Python and C++. Used Rviz2, rqt and
PlotJuggler tools to visualize and inspect nodes, topics and data.</li>
<li>Wrote a master launch file to bringup everything in ROS at once and wrote bash scripts to run
terminal commands.</li>
<li>Used Freedom Robotics to transfer data between ROS and Web / Front-end UI.</li>
<li>Used Bitbucket Pipeline for CI/CD. Containerized ROS packages in Docker and used AWS CodeBuild
to build images from Docker file to Bitbucket on ECR.</li>
<li>Managed tasks and projects with Atlassian toolset: Jira, Confluence, Bitbucket, etc.</li>
</p>
<h2>Conclusion</h2>
<p>In this project, a Ranger Mini robot and a four wheel steering robot were simulated for
teleoperation, SLAM, Navigation, and other tasks in Gazebo. After tuning parameters and optimizing
code, the four wheel steering robot were configured, tested and further improved in real world. The
procedures for implementing teleoperation, SLAM, Navigation, and other tasks on four wheel steering
robots in simulation and in real world are very similar since they are both done in ROS. However,
sensors, actuators, controllers and hardwares need to be setup and tested in real world, which takes
more effort and time. Moreover, there are more uncertainties and noises in real world. In general,
four wheel steering robots have lots of flexibility for motion, but they are more complex.</p>
</section>
</div>
<!-- Footer -->
<footer id="footer">
<!-- <section>
<form method="post" action="#">
<div class="fields">
<div class="field">
<label for="name">Name</label>
<input type="text" name="name" id="name" />
</div>
<div class="field">
<label for="email">Email</label>
<input type="text" name="email" id="email" />
</div>
<div class="field">
<label for="message">Message</label>
<textarea name="message" id="message" rows="3"></textarea>
</div>
</div>
<ul class="actions">
<li><input type="submit" value="Send Message" /></li>
</ul>
</form>
</section> -->
<section class="split contact">
<section class="alt">
<h3>Email</h3>
<p><a href="mailto:[email protected]">[email protected]</a></p>
</section>
<section>
<h3>Social</h3>
<ul class="icons alt">
<li><a href="https://www.linkedin.com/in/kai-wang-7806044268/"
class="icon brands alt fa-linkedin"><span class="label">LinkedIn</span></a></li>
<li><a href="https://github.com/Kaiser-Wang" class="icon brands alt fa-github"><span
class="label">GitHub</span></a></li>
</ul>
</section>
</section>
</footer>
<!-- Copyright -->
<div id="copyright">
<ul>
<!-- <li>© Untitled</li>
<li>Design: <a href="https://html5up.net">HTML5 UP</a></li> -->
<li></li>
<li></li>
</ul>
</div>
</div>
<!-- Scripts -->
<script src="assets/js/jquery.min.js"></script>
<script src="assets/js/jquery.scrollex.min.js"></script>
<script src="assets/js/jquery.scrolly.min.js"></script>
<script src="assets/js/browser.min.js"></script>
<script src="assets/js/breakpoints.min.js"></script>
<script src="assets/js/util.js"></script>
<script src="assets/js/main.js"></script>
</body>
</html>