Skip to content

Commit aaef24f

Browse files
committed
add lab4
1 parent a871b2b commit aaef24f

20 files changed

+1421
-1
lines changed

ROS_Core/src/Labs/Lab4/CMakeLists.txt

+123
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
cmake_minimum_required(VERSION 3.0.2)
2+
project(racecar_learning)
3+
4+
5+
## Find catkin macros and libraries
6+
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
7+
## is used, also find other catkin packages
8+
find_package(catkin REQUIRED COMPONENTS
9+
dynamic_reconfigure
10+
rospy
11+
std_msgs
12+
nav_msgs
13+
racecar_msgs
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/controller.cfg
89+
)
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+
CATKIN_DEPENDS
103+
rospy
104+
std_msgs
105+
racecar_msgs
106+
nav_msgs
107+
dynamic_reconfigure
108+
)
109+
110+
#############
111+
## Install ##
112+
#############
113+
114+
# all install targets should use catkin DESTINATION variables
115+
# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html
116+
117+
## Mark executable scripts (Python etc.) for installation
118+
## in contrast to setup.py, you can choose the destination
119+
install(PROGRAMS
120+
scripts/imitation_learning_node.py
121+
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
122+
)
123+

ROS_Core/src/Labs/Lab4/README.md

-1
This file was deleted.

ROS_Core/src/Labs/Lab4/asset/loop.png

60.9 KB
Loading
150 KB
Loading
+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#!/usr/bin/env python
2+
PACKAGE = "racecar_learning"
3+
4+
from dynamic_reconfigure.parameter_generator_catkin import *
5+
6+
gen = ParameterGenerator()
7+
8+
gen.add("latency", double_t, 0, "Latency compensation for control", 0.2, -1, 1)
9+
gen.add("ref_speed", double_t, 0, "Reference speed for control", 1, 0, 1.5)
10+
11+
exit(gen.generate("racecar_learning", "racecar_learning", "controller"))
163 KB
Binary file not shown.
+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<launch>
2+
<arg name="output" default="screen" doc="display output to screen or log file"/>
3+
<arg name="odom_topic" default="/SLAM/Pose" doc="ROS topic for the pose"/>
4+
<arg name="control_topic" default="/Control" doc="ROS topic for control input"/>
5+
<arg name="path_topic" default="/Routing/Path" doc="ROS topic for reference path"/>
6+
<arg name='model_path' default="" doc='path to the model file'/>
7+
<arg name='lr' default="0.01" doc='learning rate'/>
8+
9+
10+
<node pkg="racecar_learning" type="learning_node.py" name="imitation_learning" output="$(arg output)">
11+
<param name="odom_topic" value="$(arg odom_topic)" />
12+
<param name="control_topic" value="$(arg control_topic)" />
13+
<param name="path_topic" value="$(arg path_topic)" />
14+
<param name="package_path" value="$(find racecar_learning)" />
15+
<param name="simulation" value="False" />
16+
<param name="PWM_model" value="$(find racecar_learning)/models/pwm.sav" />
17+
<param name="model_path" value="$(arg model_path)" />
18+
<param name="lr" value="$(arg lr)" />
19+
</node>
20+
21+
</launch>
79.6 KB
Binary file not shown.

ROS_Core/src/Labs/Lab4/models/pwm.sav

70.1 KB
Binary file not shown.

ROS_Core/src/Labs/Lab4/package.xml

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?xml version="1.0"?>
2+
<package format="2">
3+
<name>racecar_learning</name>
4+
<version>0.1.0</version>
5+
<description>The traj_tracking_ros package</description>
6+
7+
<maintainer email="[email protected]">Zixu Zhang</maintainer>
8+
<license>BSD</license>
9+
10+
<author >Zixu Zhang</author>
11+
12+
13+
<buildtool_depend>catkin</buildtool_depend>
14+
15+
<depend>rospy</depend>
16+
<depend>std_msgs</depend>
17+
<depend>racecar_msgs</depend>
18+
<depend>dynamic_reconfigure</depend>
19+
<depend>nav_msgs</depend>
20+
</package>

ROS_Core/src/Labs/Lab4/readme.md

+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
# Lab 4: Behavior Cloning
2+
In this lab, we will use a basic behavior cloning algorithm to train a model to drive the truck.
3+
4+
5+
**Make sure that your repo is up-to-dated**
6+
# Setup Environment
7+
## 1. Open a new terminal and SSH into your robot
8+
```
9+
ssh nvidia@<IP OF YOUR ROBOT>
10+
```
11+
## 2. Activate *ros_base* environment on your robot
12+
```
13+
conda activate ros_base
14+
```
15+
## 3. Install Pytorch
16+
```
17+
pip3 install torch
18+
```
19+
20+
# Launch Learning Node
21+
## Open **three** new terminals and let's call them *T1*, *T2*, and *T3*
22+
### 1. In *T1*, SSH into your robot and launch SLAM
23+
```
24+
ssh nvidia@<IP OF YOUR ROBOT>
25+
cd ~/StartUp
26+
./start_ros.sh <IP OF YOUR ROBOT>
27+
```
28+
### 2. In *T2*, navigate to the repo on your PC
29+
```
30+
cd <REPO ON YOUR PC>/ROS_Core
31+
conda activate ros_base
32+
catkin_make
33+
source devel/setup.bash
34+
source network_ros_client.sh <IP OF YOUR ROBOT> <IP OF YOUR PC>
35+
roslaunch racecar_interface visualization.launch enable_routing:=false
36+
```
37+
### 3. Start the SLAM from RQT
38+
![](./asset/rqt_truck.png)
39+
### 4. In *T3*, SSH into your robot and start learning node
40+
```
41+
ssh nvidia@<IP OF YOUR ROBOT>
42+
cd <REPO ON YOUR ROBOT>/ROS_Core
43+
conda activate ros_base
44+
catkin_make
45+
source devel/setup.bash
46+
source network_ros_host.sh <IP OF YOUR ROBOT>
47+
roslaunch racecar_learning lab4.launch
48+
```
49+
50+
# Start Training Online
51+
## 1. In the RQT, call the service *"learning/start_learn"* from RQT to start training.
52+
## 2. In the RVIZ, use the *"2D Nav Goal"* to set a reference path for the robot
53+
A loop will be generated automatically as your robot's reference path, use your controller to drive the robot along the path.
54+
![](./asset/loop.png)
55+
## 3. In *T3*, you will see the loss be printed out.
56+
You can drive your robot along the reference path for a few loops, then simply let the robot stop on the track and wait the loss to converge.
57+
## 4. Once the loss converges, call the service *"learning/eval"* from RQT to pause the training and evalute the model.
58+
Hit the down button on your controller to start the evaluation. The robot will drive along the reference path.
59+
## 5. If the robot drives well, call the service *"learning/save_model"* from RQT to save the model and call the service *"learning/save_data"* to stop the training.
60+
Your model will be saved in folder ["ROS_Core/Labs/Lab4/models"](./models) on your robot, and the training data will be saved in folder ["ROS_Core/Labs/Lab4/data"](./data) on your robot.
61+
## 6. If you do not like your model, call the service *"learning/start_learn"* again from RQT to resume training again.
62+
63+
# Traning Offline
64+
With data collected from the previous step, we can train the model offline using provided [iPython notebook](./scripts/offline_train.ipynb). You can train this on your own PC, which should be significantly faster than the computer on the robot.
65+
66+
# Test the Model
67+
You can evaluate the model trained offline by using additional parameter during the launch of the learning node. In *T3*, relaunch the node using
68+
```
69+
roslaunch racecar_learning lab4.launch model_path:=<PATH TO YOUR MODEL>
70+
```
71+
72+
# Task: Train your own behavior cloning policy, test it on the robot and show it to your AIs
73+

0 commit comments

Comments
 (0)