Skip to content

Commit 17afdb3

Browse files
committed
Merge branch 'waypoint-handler-devel'
*add support for discrete waypoints, launch params *fix minor typo in lqg *add comments and recorder to launch file
2 parents f8bdc25 + 20e0dc1 commit 17afdb3

File tree

16 files changed

+722
-431
lines changed

16 files changed

+722
-431
lines changed

freyja_configfiles/package.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<package>
33
<name>freyja_configfiles</name>
44
<version>0.1.0</version>
5-
<description>The freyja_configfiles package</description>
5+
<description>The freyja package containing launch and config files</description>
66

77
<maintainer email="ashankar@cse.unl.edu">aj</maintainer>
88
<license>GPLv3</license>

freyja_controller.launch

Lines changed: 49 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,35 @@
11
<launch>
22
<!-- vim: set ft=xml noet : -->
3-
3+
44
<!-- Common launch file for Freyja.
5-
Supports both AscTec and Pixhawk-based vehicles. Can
6-
also do velocity-only control (ignores position refs).
5+
Supports both AscTec and Pixhawk-based vehicles. Can
6+
also do velocity-only control (ignores position refs).
77
~ aj // Nimbus Lab.
88
-->
99

10-
<!-- allowed autopilots: "asctec" or "arducopter" -->
11-
<!-- must provide vicon_topic -->
12-
<arg name="autopilot" default="arducopter"/>
13-
<arg name="vicon_topic"/>
10+
<!-- allowed autopilots: "asctec" or "arducopter" -->
11+
<arg name="autopilot" default="arducopter" />
12+
<arg name="vicon_topic" />
13+
1414
<!-- use "device:baudrate" for apm, "device" for asctec -->
15-
<arg name="comm_port" default="/dev/ttyUSB0:57600"/>
16-
<arg name="total_mass" default="0.95"/>
17-
<arg name="thrust_scaler" default="200.0"/>
18-
19-
<!-- true if providing your own trajectory source -->
20-
<arg name="use_external_trajectory" default="false"/>
21-
<arg name="use_velctrl_only" default="false"/>
22-
<arg name="bias_compensation" default="auto" />
23-
<arg name="start_rosbag" default="false"/>
24-
25-
15+
<arg name="comm_port" default="/dev/ttyUSB0:57600"/>
16+
<arg name="total_mass" default="0.95"/>
17+
<arg name="thrust_scaler" default="200.0"/>
18+
19+
<!-- launch a handler for discrete waypoints -->
20+
<arg name="use_waypoint_handler" default="false" />
21+
22+
<!-- advanced settings -->
23+
<arg name="use_velctrl_only" default="false"/>
24+
<arg name="bias_compensation" default="false" />
25+
26+
<!-- Used for examples -->
27+
<arg name="use_examples" default="false"/>
28+
<arg name="example_number" default="0" />
29+
30+
<arg name="start_rosbag" default="false" />
31+
32+
2633
<!-- state source can be: "apm", "asctec", "vicon" or "onboard_camera" -->
2734
<!-- implemented filters: "median", "gauss" and "lwma" -->
2835
<node name="state_manager" pkg="state_manager" type="state_manager_node">
@@ -31,23 +38,17 @@
3138
<param name="vicon_topic" type="string" value="$(arg vicon_topic)" />
3239
</node>
3340

34-
<!-- an example trajectory node for reference -->
35-
<node name="trajectory_provider" pkg="freyja_trajectory_provider" type="trajectory_provider_node"
36-
if="$(eval not use_external_trajectory)">
37-
<!-- "hover", "circle1", "circle2", "circle3" -->
38-
<param name="example_traj_type" type="string" value="hover"/>
39-
</node>
40-
41+
4142
<!-- control node (see velctrl flag above) -->
4243
<node name="lqg_controller" pkg="lqg_control" type="lqg_control_node"
4344
output="screen" if="$(eval not use_velctrl_only)">
44-
<param name="controller_rate" type="int" value="45" />
45-
<param name="total_mass" type="double" value="$(arg total_mass)"/>
46-
<param name="use_stricter_gains" type="bool" value="false" />
47-
<param name="estimator_rate" type="int" value="50" />
48-
<param name="bias_compensation" type="string" value="$(arg bias_compensation)" />
49-
<param name="mass_estimation" type="bool" value="true" />
50-
<param name="mass_correction" type="bool" value="false" />
45+
<param name="controller_rate" type="int" value="45" />
46+
<param name="total_mass" type="double" value="$(arg total_mass)"/>
47+
<param name="use_stricter_gains" type="bool" value="false" />
48+
<param name="estimator_rate" type="int" value="50" />
49+
<param name="bias_compensation" type="string" value="$(arg bias_compensation)" />
50+
<param name="mass_estimation" type="bool" value="true" />
51+
<param name="mass_correction" type="bool" value="false" />
5152
</node>
5253

5354
<node name="lqr_vel_controller" pkg="lqr_control" type="lqr_vel_ctrl_node"
@@ -56,9 +57,10 @@
5657
<param name="total_mass" type="double" value="$(arg total_mass)" />
5758
</node>
5859

60+
5961
<!-- autopilot communication node -->
6062
<node name="asctec_handler" pkg="asctec_handler" type="asctec_handler_node"
61-
if="$(eval autopilot=='asctec')">
63+
if="$(eval autopilot=='asctec')">
6264
<param name="serial_port" value="/dev/ttyUSB0" />
6365
</node>
6466

@@ -67,11 +69,25 @@
6769
<node name="apm_handler" pkg="apm_handler" type="apm_handler_node">
6870
<param name="thrust_scaler" type="double" value="$(arg thrust_scaler)" />
6971
</node>
72+
7073
<include file="$(find freyja_configfiles)/apm_nimbus.launch">
7174
<arg name="fcu_url" value="$(arg comm_port)"/>
7275
</include>
7376
</group>
77+
78+
79+
<!-- handler for discrete waypoints -->
80+
<node name="waypoint_manager" pkg="waypoint_manager" type="waypoint_manager_node" output="screen"
81+
if="$(eval use_waypoint_handler)">
82+
</node>
83+
84+
85+
<!-- examples -->
86+
<include file="$(find freyja_examples)/launch/example.launch" if="$(eval use_examples)" >
87+
<arg name="example_number" value="$(arg example_number)"/>
88+
</include>
7489

7590
<!-- record stuff -->
7691
<node name="recorder" pkg="rosbag" type="record" args="-a" if="$(eval start_rosbag)"/>
92+
7793
</launch>

freyja_trajectory_provider/CMakeLists.txt renamed to freyja_examples/CMakeLists.txt

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
cmake_minimum_required(VERSION 2.8.3)
2-
project(freyja_trajectory_provider)
2+
project(freyja_examples)
33
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O3" )
44

55
## Find catkin macros and libraries
@@ -31,18 +31,10 @@ include_directories(
3131
)
3232

3333
# simple trajectory provider
34-
add_executable(trajectory_provider_node src/trajectory_provider.cpp)
35-
add_dependencies(trajectory_provider_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
34+
add_executable(temporal_provider_node src/temporal_provider.cpp)
35+
add_dependencies(temporal_provider_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
3636

37-
target_link_libraries(trajectory_provider_node
37+
target_link_libraries(temporal_provider_node
3838
${catkin_LIBRARIES}
3939
)
40-
41-
42-
# vision-based guidance for approach
43-
# add_executable(trajectory_shaper_node src/trajectory_shaper.cpp)
44-
# add_dependencies(trajectory_shaper_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
45-
46-
# target_link_libraries(trajectory_shaper_node
47-
# ${catkin_LIBRARIES}
48-
# )
40+

freyja_examples/launch/example.launch

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<launch>
2+
<!-- vim: set ft=xml noet : -->
3+
4+
<arg name="example_number" default="0"/>
5+
6+
<node name="temporal_provider_node" pkg="freyja_examples" type="temporal_provider_node"
7+
if="$(eval example_number==0)" >
8+
<param name="example_traj_type" type="string" value="hover"/>
9+
</node>
10+
11+
<node name="temporal_provider_node" pkg="freyja_examples" type="temporal_provider_node"
12+
if="$(eval example_number==1)" >
13+
<param name="example_traj_type" type="string" value="circle1"/>
14+
</node>
15+
16+
<!-- Example 4/5: use_waypoint_handler:=true in freyja_controller.launch -->
17+
<node name="waypoint_provider_node" pkg="freyja_examples" type="waypoint_provider.py"
18+
if="$(eval example_number==2)" >
19+
<param name="/waypoint_mode" value="0" type="int" />
20+
</node>
21+
22+
<node name="waypoint_provider_node" pkg="freyja_examples" type="waypoint_provider.py"
23+
if="$(eval example_number==3)" >
24+
<param name="/waypoint_mode" value="1" type="int" />
25+
</node>
26+
27+
</launch>

freyja_trajectory_provider/package.xml renamed to freyja_examples/package.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<?xml version="1.0"?>
22
<package>
3-
<name>freyja_trajectory_provider</name>
3+
<name>freyja_examples</name>
44
<version>0.0.0</version>
5-
<description>The trajectory_provider package</description>
5+
<description>The examples package showing use cases</description>
66

77
<!-- One maintainer tag required, multiple allowed, one person per tag -->
88
<!-- Example: -->

freyja_trajectory_provider/src/trajectory_provider.cpp renamed to freyja_examples/src/temporal_provider.cpp

Lines changed: 0 additions & 124 deletions
Original file line numberDiff line numberDiff line change
@@ -109,129 +109,6 @@ TrajRef getDefaultReference( const ros::Duration &cur_time )
109109
return ref_state;
110110
}
111111

112-
/*
113-
Ascend at point A, hover, go to B ..
114-
hover at B, descend, ascend at B, hover ..
115-
go to A, hover, descend at A .. Repeat.
116-
117-
TrajRef getCurrentReference( const ros::Duration &cur_time )
118-
{
119-
TrajRef ref_state;
120-
float t = cur_time.toSec();
121-
float mod_t = std::fmod( t, 72.0 );
122-
float xpos, ypos, zpos, xvel, yvel, zvel;
123-
ref_state.header.stamp = ros::Time::now();
124-
if( mod_t < 5.0 )
125-
{
126-
// ascend at A
127-
xpos = -2.0;
128-
ypos = 0.0;
129-
xvel = 0.0;
130-
yvel = 0.0;
131-
zpos = -mod_t*9.0/50.0 - 0.1;
132-
zvel = -9.0/50.0;
133-
}
134-
else if( mod_t < 8.0 )
135-
{
136-
// hover at A
137-
xpos = -2.0;
138-
ypos = 0.0;
139-
xvel = 0.0;
140-
yvel = 0.0;
141-
zpos = -1.0;
142-
zvel = 0.0;
143-
}
144-
else if( mod_t < 28.0 )
145-
{
146-
// from A to B
147-
float lat_timer = mod_t - 8.0;
148-
xpos = lat_timer * 0.2 - 2.0;
149-
ypos = 0.0;
150-
xvel = 0.2;
151-
yvel = 0.0;
152-
zpos = -1.0;
153-
zvel = 0.0;
154-
}
155-
else if( mod_t < 31.0 )
156-
{
157-
// hover at B
158-
xpos = 2.0;
159-
ypos = 0.0;
160-
xvel = 0.0;
161-
yvel = 0.0;
162-
zpos = -1.0;
163-
zvel = 0.0;
164-
}
165-
else if( mod_t < 36.0 )
166-
{
167-
// descend at B
168-
float desc_timer = mod_t - 31.0;
169-
xpos = 2.0;
170-
ypos = 0.0;
171-
xvel = 0.0;
172-
yvel = 0.0;
173-
zpos = desc_timer*9.0/50.0 - 1.0;
174-
zvel = 9.0/50.0;
175-
}
176-
else if( mod_t < 41.0 )
177-
{
178-
// ascend at B
179-
float asc_timer = mod_t - 36.0;
180-
xpos = 2.0;
181-
ypos = 0.0;
182-
xvel = 0.0;
183-
yvel = 0.0;
184-
zpos = -asc_timer*9.0/50.0 - 0.1;
185-
zvel = -9.0/50.0;
186-
}
187-
else if( mod_t < 44.0 )
188-
{
189-
// hover at B
190-
xpos = 2.0; ypos = 0.0;
191-
xvel = yvel = 0.0;
192-
zpos = -1.0;
193-
zvel = 0.0;
194-
}
195-
else if( mod_t < 64.0 )
196-
{
197-
// from B to A
198-
float lat_timer = mod_t - 44.0;
199-
xpos = -lat_timer*0.2 + 2.0;
200-
ypos = 0.0;
201-
xvel = -0.2;
202-
yvel = 0.0;
203-
zpos = -1.0;
204-
zvel = 0.0;
205-
}
206-
else if( mod_t < 67.0 )
207-
{
208-
// hover at A
209-
xpos = -2.0; ypos = 0.0;
210-
xvel = 0.0; yvel = 0.0;
211-
zpos = -1.0;
212-
zvel = 0.0;
213-
}
214-
else if( mod_t < 72.0 )
215-
{
216-
// descend at B
217-
float desc_timer = mod_t - 67.0;
218-
xpos = -2.0; ypos = 0.0;
219-
xvel = 0.0; yvel = 0.0;
220-
zpos = desc_timer*9.0/50.0 - 1.0;
221-
zvel = 9.0/50.0;
222-
}
223-
224-
ref_state.pn = ypos;
225-
ref_state.pe = xpos;
226-
ref_state.pd = zpos;
227-
ref_state.vn = yvel;
228-
ref_state.ve = xvel;
229-
ref_state.vd = zvel;
230-
ref_state.yaw = 0.0;
231-
return ref_state;
232-
}
233-
*/
234-
235112
int main( int argc, char** argv )
236113
{
237114
ros::init( argc, argv, ROS_NODE_NAME );
@@ -273,4 +150,3 @@ int main( int argc, char** argv )
273150

274151
return 0;
275152
}
276-
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# TODO

0 commit comments

Comments
 (0)