Skip to content

Commit fd6e5d0

Browse files
committed
WIP ROS1 / ROS2 refactorization
1 parent 87df7cc commit fd6e5d0

10 files changed

Lines changed: 479 additions & 133 deletions

File tree

CMakeLists.txt

Lines changed: 60 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,22 @@
11
PROJECT(ut_automata)
2-
CMAKE_MINIMUM_REQUIRED(VERSION 3.1.0)
2+
CMAKE_MINIMUM_REQUIRED(VERSION 3.6)
3+
4+
if(DEFINED ENV{ROS_VERSION})
5+
set(ROS_VERSION $ENV{ROS_VERSION})
6+
else()
7+
message(FATAL_ERROR "ROS_VERSION is not defined")
8+
endif()
39

410
MESSAGE(STATUS "Compilers found: ${CMAKE_CXX_COMPILER_LIST}")
511
MESSAGE(STATUS "Using compiler: ${CMAKE_CXX_COMPILER}")
612
MESSAGE(STATUS "Build Type: ${CMAKE_BUILD_TYPE}")
713
MESSAGE(STATUS "Build Mode: ${CMAKE_BUILD_MODE}")
814
MESSAGE(STATUS "Arch: ${CMAKE_SYSTEM_PROCESSOR}")
15+
MESSAGE(STATUS "ROS_VERSION: ${ROS_VERSION}")
916

10-
SET(CMAKE_AUTOMOC ON)
11-
SET(CMAKE_AUTORCC ON)
12-
SET(CMAKE_AUTOUIC ON)
17+
# SET(CMAKE_AUTOMOC ON)
18+
# SET(CMAKE_AUTORCC ON)
19+
# SET(CMAKE_AUTOUIC ON)
1320

1421
IF(CMAKE_VERSION VERSION_LESS "3.7.0")
1522
SET(CMAKE_INCLUDE_CURRENT_DIR ON)
@@ -23,20 +30,37 @@ IF(${CMAKE_BUILD_TYPE} MATCHES "Release")
2330
ELSEIF(${CMAKE_BUILD_TYPE} MATCHES "Debug")
2431
MESSAGE(STATUS "Additional Flags for Debug mode")
2532
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
26-
SET(BUILD_SPECIFIC_LIBRARIES "")
2733
ENDIF()
2834

29-
INCLUDE($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake)
30-
ROSBUILD_INIT()
31-
SET(ROS_BUILD_STATIC_LIBS true)
32-
SET(ROS_BUILD_SHARED_LIBS false)
35+
if(${ROS_VERSION} EQUAL "1")
36+
INCLUDE($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake)
37+
ROSBUILD_INIT()
38+
SET(ROS_BUILD_STATIC_LIBS true)
39+
SET(ROS_BUILD_SHARED_LIBS false)
40+
ROSBUILD_GENMSG()
41+
SET(libs roslib roscpp glog gflags amrl_shared_lib rosbag X11 lua5.1 boost_system)
42+
elseif(${ROS_VERSION} EQUAL "2")
43+
find_package(ament_cmake REQUIRED)
44+
find_package(geometry_msgs REQUIRED)
45+
find_package(nav_msgs REQUIRED)
46+
find_package(std_msgs REQUIRED)
47+
find_package(rclcpp REQUIRED)
48+
find_package(amrl_msgs REQUIRED)
49+
find_package(rosidl_default_generators REQUIRED)
50+
rosidl_generate_interfaces(${PROJECT_NAME}
51+
"msg/CarStatusMsg.msg"
52+
"msg/VescState.msg"
53+
"msg/VescStateStamped.msg"
54+
DEPENDENCIES std_msgs
55+
)
56+
SET(libs glog gflags amrl_shared_lib X11 lua5.1)
57+
endif()
3358

3459
FIND_PACKAGE(Qt5 COMPONENTS Core Widgets Gui WebSockets OpenGL REQUIRED)
3560
SET(CMAKE_INCLUDE_CURRENT_DIR ON)
3661

3762
MESSAGE(STATUS "ROS-Overrride Build Type: ${CMAKE_BUILD_TYPE}")
3863
MESSAGE(STATUS "CXX Flags: ${CMAKE_CXX_FLAGS}")
39-
MESSAGE(STATUS "Build-Specific Libraries: ${BUILD_SPECIFIC_LIBRARIES}")
4064

4165
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
4266
SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
@@ -48,16 +72,10 @@ INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/src)
4872
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include)
4973
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/submodules/config_reader/include)
5074

51-
ROSBUILD_GENMSG()
52-
5375
ADD_SUBDIRECTORY(src/shared)
5476
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/src/shared)
5577

56-
SET(libs roslib roscpp glog gflags amrl_shared_lib
57-
${BUILD_SPECIFIC_LIBRARIES} rosbag X11 lua5.1 boost_system)
58-
59-
IF(${CMAKE_BUILD_MODE} MATCHES "Hardware")
60-
MESSAGE(STATUS "Building hardware drivers")
78+
if(${ROS_VERSION} EQUAL "1")
6179
rosbuild_add_executable(vesc_driver
6280
src/vesc_driver/serial.cc
6381
src/vesc_driver/vesc_driver_node.cpp
@@ -83,29 +101,29 @@ IF(${CMAKE_BUILD_MODE} MATCHES "Hardware")
83101
src/joystick/joystick.cc
84102
src/joystick/joystick_driver.cc)
85103
TARGET_LINK_LIBRARIES(joystick ${libs})
86-
ENDIF()
87104

88-
MESSAGE(STATUS "Building simulator")
89-
90-
ROSBUILD_ADD_EXECUTABLE(simulator
91-
src/simulator/simulator.cc
92-
src/simulator/vector_map.cc
93-
src/simulator/simulator_main.cc)
94-
TARGET_LINK_LIBRARIES(simulator ${libs})
95-
96-
ROSBUILD_ADD_EXECUTABLE(step_simulator
97-
src/simulator/simulator.cc
98-
src/simulator/vector_map.cc
99-
src/simulator/step_simulator_main.cc)
100-
TARGET_LINK_LIBRARIES(step_simulator ${libs})
101-
102-
ROSBUILD_ADD_EXECUTABLE(websocket
103-
src/websocket/websocket_main.cc
104-
src/websocket/websocket.cc
105-
)
106-
TARGET_LINK_LIBRARIES(websocket
107-
Qt5::Core
108-
Qt5::Gui
109-
Qt5::Widgets
110-
Qt5::WebSockets
111-
${libs})
105+
ROSBUILD_ADD_EXECUTABLE(simulator
106+
src/simulator/simulator.cc
107+
src/simulator/vector_map.cc
108+
src/simulator/simulator_main.cc)
109+
TARGET_LINK_LIBRARIES(simulator ${libs})
110+
111+
ROSBUILD_ADD_EXECUTABLE(step_simulator
112+
src/simulator/simulator.cc
113+
src/simulator/vector_map.cc
114+
src/simulator/step_simulator_main.cc)
115+
TARGET_LINK_LIBRARIES(step_simulator ${libs})
116+
117+
ROSBUILD_ADD_EXECUTABLE(websocket
118+
src/websocket/websocket_main_ros1.cc
119+
src/websocket/websocket.cc
120+
)
121+
TARGET_LINK_LIBRARIES(websocket
122+
Qt5::Core
123+
Qt5::Gui
124+
Qt5::Widgets
125+
Qt5::WebSockets
126+
${libs})
127+
elseif(${ROS_VERSION} EQUAL "2")
128+
ament_package()
129+
endif()

config/simulator.lua

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ function DegToRad(d)
1111
end
1212

1313
-- map_name = "GDC1";
14-
map_name = "ICRA2022_F1Tenth_Track";
14+
map_name = "GDC3";
15+
-- map_name = "ICRA2022_F1Tenth_Track";
1516

1617
-- Simulator starting location.
1718
start_x = 1.461

manifest.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<package>
2-
<description brief="ut_automata">UT Automata Course Infrastructure</description>
2+
<description brief="ut_automata">UT Automata Infrastructure</description>
33
<author>Maintained by Joydeep Biswas</author>
44
<license>LGPLv3.0</license>
55
<review status="unreviewed" notes=""/>

msg/VescStateStamped.msg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# Timestamped VESC open source motor controller state (telemetry)
22

3-
Header header
3+
std_msgs/Header header
44
VescState state

package.xml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?xml version="1.0"?>
2+
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
3+
<package format="3">
4+
<name>ut_automata</name>
5+
<version>1.0.0</version>
6+
<description>UT Automata Infrastructure</description>
7+
<maintainer email="joydeepb@cs.utexas.edu">joydeepb</maintainer>
8+
<license>LGPLv3.0</license>
9+
10+
<buildtool_depend>ament_cmake</buildtool_depend>
11+
12+
<depend>geometry_msgs</depend>
13+
<depend>std_msgs</depend>
14+
<depend>nav_msgs</depend>
15+
<depend>rclcpp</depend>
16+
17+
<build_depend>rosidl_default_generators</build_depend>
18+
19+
<exec_depend>rosidl_default_runtime</exec_depend>
20+
21+
<member_of_group>rosidl_interface_packages</member_of_group>
22+
23+
<test_depend>ament_lint_auto</test_depend>
24+
<test_depend>ament_lint_common</test_depend>
25+
26+
<export>
27+
<build_type>ament_cmake</build_type>
28+
</export>
29+
</package>

scripts/keyboard_teleop.py

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
roslib.load_manifest('ut_automata')
44
import rospy
55
from amrl_msgs.msg import AckermannCurvatureDriveMsg
6+
from sensor_msgs.msg import Joy
67

78
import sys, select, termios, tty
89

@@ -14,6 +15,17 @@
1415
CTRL-C to quit
1516
"""
1617

18+
joystick_msg = Joy()
19+
joystick_msg.header.seq = 0
20+
joystick_msg.header.frame_id = "base_link"
21+
joystick_msg.axes = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
22+
joystick_msg.buttons = [0, 0, 0, 0, 0, 0, 0, 0]
23+
kThrottleAxis = 4
24+
kSteeringAxis = 0
25+
kManualButton = 4
26+
kAutoButton = 5
27+
kPersistentAutoButton = 7
28+
1729
keyBindings = {
1830
'w':(1,0),
1931
'd':(1,-1),
@@ -40,6 +52,7 @@ def vels(speed,turn):
4052
pub = rospy.Publisher('ackermann_curvature_drive',
4153
AckermannCurvatureDriveMsg,
4254
queue_size=5)
55+
joypub = rospy.Publisher('joystick', Joy, queue_size=5)
4356
rospy.init_node('keyop')
4457

4558
x = 0
@@ -48,23 +61,36 @@ def vels(speed,turn):
4861

4962
try:
5063
while(1):
64+
joystick_msg.axes = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
65+
joystick_msg.buttons = [0, 0, 0, 0, 0, 0, 0, 0]
5166
key = getKey()
5267
if key in keyBindings.keys():
5368
x = keyBindings[key][0]
5469
th = keyBindings[key][1]
70+
joystick_msg.buttons[kManualButton] = 1
5571
else:
5672
x = 0
5773
th = 0
5874
if (key == '\x03'):
5975
break
76+
if key == ' ':
77+
print('Persistent auto')
78+
joystick_msg.buttons[kPersistentAutoButton] = 1
79+
elif key == '.':
80+
print('Auto')
81+
joystick_msg.buttons[kAutoButton] = 1
82+
6083
msg = AckermannCurvatureDriveMsg()
6184
msg.header.stamp = rospy.Time.now()
6285
msg.header.frame_id = "base_link"
63-
6486
msg.velocity = x*speed
6587
msg.curvature = th*turn
6688

67-
pub.publish(msg)
89+
joystick_msg.axes[kThrottleAxis] = x
90+
joystick_msg.axes[kSteeringAxis] = th
91+
joystick_msg.header.stamp = rospy.Time.now()
92+
joypub.publish(joystick_msg)
93+
# pub.publish(msg)
6894

6995
except:
7096
print('error')

src/websocket/websocket.cc

Lines changed: 1 addition & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//========================================================================
1+
//========================================================================
22
// This software is free: you can redistribute it and/or modify
33
// it under the terms of the GNU Lesser General Public License Version 3,
44
// as published by the Free Software Foundation.
@@ -186,78 +186,6 @@ QByteArray DataMessage::ToByteArray() const {
186186
return data;
187187
}
188188

189-
DataMessage DataMessage::FromRosMessages(
190-
const LaserScan& laser_msg,
191-
const VisualizationMsg& local_msg,
192-
const VisualizationMsg& global_msg,
193-
const Localization2DMsg& localization_msg) {
194-
static const bool kDebug = false;
195-
DataMessage msg;
196-
for (size_t i = 0; i < sizeof(msg.header.map); ++i) {
197-
msg.header.map[i] = 0;
198-
}
199-
msg.header.loc_x = localization_msg.pose.x;
200-
msg.header.loc_y = localization_msg.pose.y;
201-
msg.header.loc_r = localization_msg.pose.theta;
202-
strncpy(msg.header.map,
203-
localization_msg.map.data(),
204-
std::min(sizeof(msg.header.map) - 1, localization_msg.map.size()));
205-
msg.header.laser_min_angle = laser_msg.angle_min;
206-
msg.header.laser_max_angle = laser_msg.angle_max;
207-
msg.header.num_laser_rays = laser_msg.ranges.size();
208-
msg.laser_scan.resize(laser_msg.ranges.size());
209-
for (size_t i = 0; i < laser_msg.ranges.size(); ++i) {
210-
if (laser_msg.ranges[i] <= laser_msg.range_min ||
211-
laser_msg.ranges[i] >= laser_msg.range_max) {
212-
msg.laser_scan[i] = 0;
213-
} else {
214-
msg.laser_scan[i] = static_cast<uint32_t>(laser_msg.ranges[i] * 1000.0);
215-
}
216-
}
217-
218-
msg.points = local_msg.points;
219-
msg.header.num_local_points = local_msg.points.size();
220-
msg.points.insert(msg.points.end(),
221-
global_msg.points.begin(),
222-
global_msg.points.end());
223-
224-
msg.lines = local_msg.lines;
225-
msg.header.num_local_lines = local_msg.lines.size();
226-
msg.lines.insert(msg.lines.end(),
227-
global_msg.lines.begin(),
228-
global_msg.lines.end());
229-
230-
msg.arcs = local_msg.arcs;
231-
msg.header.num_local_arcs = local_msg.arcs.size();
232-
msg.arcs.insert(msg.arcs.end(),
233-
global_msg.arcs.begin(),
234-
global_msg.arcs.end());
235-
236-
msg.header.num_points = msg.points.size();
237-
msg.header.num_lines = msg.lines.size();
238-
msg.header.num_arcs = msg.arcs.size();
239-
240-
if (kDebug) {
241-
printf("nonce: %d "
242-
"num_points: %d "
243-
"num_lines: %d "
244-
"num_arcs: %d "
245-
"num_laser_rays: %d "
246-
"num_local_points: %d "
247-
"num_local_lines: %d "
248-
"num_local_arcs: %d\n",
249-
msg.header.nonce,
250-
msg.header.num_points,
251-
msg.header.num_lines,
252-
msg.header.num_arcs,
253-
msg.header.num_laser_rays,
254-
msg.header.num_local_points,
255-
msg.header.num_local_lines,
256-
msg.header.num_local_arcs);
257-
}
258-
return msg;
259-
}
260-
261189
void RobotWebSocket::SendError(const QString& error_val) {
262190
for (auto c: clients_) {
263191
CHECK_NOTNULL(c);

0 commit comments

Comments
 (0)