Skip to content

Commit a57cf4a

Browse files
author
Bernd Gassmann
committed
Rework ROS2 support
DataTypes: Introduced geom::AngularVelocity, geom::Velocity,geom::Acceleration, geom::Quaternion to make the Unreal -> Carla -> ROS2 data conversion more clear. Also in preparation of the Carla -> ROS2 data conversion afterwards. Added some Math functions for Quaternions. BUGFIX: Fixed geom::Rotation::RotateVector() rotation directions of pitch and roll! Added RightHandedVector3D.h (temporary internal class) Commented TransformationMatrix access out by ifdef to prevent from erroneous misuse RPC: Extended Control types by timestamp. Client: Applied geom::AngularVelocity, geom::Velocity, geom::Acceleration to Actor functions Added Vehicle::GetAckermanControl() detail/Episode,Simulator: Fixed compiler warnings on std::move Actor: Moved Blueprint handling sources to carla/actor from carla/client to be able to make use of that functionalilty within server when ROS2 is activated. Streaming: Moved streaming/detail/tcp/Message.h -> streaming/detail/Message.h to be deployed for non-tcp communication streams like ROS2. Moved general (tcp-independent parts) from tcp/ServerSession to streaming/detail/Session.h to be used for ROS2 streams. Had to rename a Write() function to WriteMessage because of virtual function overloaded with template function not possible. Make Dispatcher a shared_pointer to be able to access from ROS2. Removed EnableForROS calls, as the decision to use ROS or not is done via configuration. The topics are always crecated whenever the sensors are spawned and data-stream sessions are opened/attached on demanded; i.e. a ROS2 participant is subscribing to the topic. Serializer: Provide GetHeaderOffset() functions where missing. Add sensor_relative_transform (Location and Quaternion parts) to SensorHeader to support relative TF. Keep it in the header also when not compiled with ROS2 to keep ROS enabled server builds compatible with non-ROS enabled client builds as it's not that much of an overhead. Add SerializerVectorAllocator to provide the SharedBufferView data 'under the hood' as vector without data copy. Remove move semantic from Deserialize on server builds to allow multiple sinks (i.e. TCP-Server and ROS2 to deserialize the data without destoying it). Added VehicleAckermannControl to ActorDynamicState in form of a union with VehicleControl to save space Extract sensor/data/Array.h into a ArrayConst.h base class to be used for const data acess on ROS2 Deserialization of RawEpisodeState. UE4: Updated accordingly. ROS2: Filled the most of the ROS2 interfaces. Removed some compiler warnings TODO: Testing of control interfaces; Testing of sensor data values; Find out why the services are not visible in ROS2
1 parent e3ad358 commit a57cf4a

File tree

543 files changed

+41432
-11324
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

543 files changed

+41432
-11324
lines changed

.clang-format

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
---
2+
Language: Cpp
3+
# BasedOnStyle: Google
4+
AccessModifierOffset: -2
5+
AlignAfterOpenBracket: Align
6+
AlignConsecutiveAssignments: false
7+
AlignConsecutiveDeclarations: false
8+
AlignEscapedNewlinesLeft: true
9+
AlignOperands: true
10+
AlignTrailingComments: true
11+
AllowAllParametersOfDeclarationOnNextLine: true
12+
AllowShortBlocksOnASingleLine: false
13+
AllowShortCaseLabelsOnASingleLine: false
14+
AllowShortFunctionsOnASingleLine: Empty
15+
AllowShortIfStatementsOnASingleLine: true
16+
AllowShortLoopsOnASingleLine: true
17+
AlwaysBreakAfterDefinitionReturnType: None
18+
AlwaysBreakAfterReturnType: None
19+
AlwaysBreakBeforeMultilineStrings: true
20+
AlwaysBreakTemplateDeclarations: true
21+
BinPackArguments: true
22+
BinPackParameters: true
23+
BraceWrapping:
24+
AfterClass: false
25+
AfterControlStatement: false
26+
AfterEnum: false
27+
AfterFunction: false
28+
AfterNamespace: false
29+
AfterObjCDeclaration: false
30+
AfterStruct: false
31+
AfterUnion: false
32+
BeforeCatch: false
33+
BeforeElse: false
34+
IndentBraces: false
35+
BreakBeforeBinaryOperators: None
36+
BreakBeforeBraces: Attach
37+
BreakBeforeTernaryOperators: true
38+
BreakConstructorInitializersBeforeComma: false
39+
BreakAfterJavaFieldAnnotations: false
40+
BreakStringLiterals: true
41+
ColumnLimit: 120
42+
CommentPragmas: '^ IWYU pragma:'
43+
ConstructorInitializerAllOnOneLineOrOnePerLine: true
44+
ConstructorInitializerIndentWidth: 2
45+
ContinuationIndentWidth: 4
46+
Cpp11BracedListStyle: true
47+
DerivePointerAlignment: true
48+
DisableFormat: false
49+
ExperimentalAutoDetectBinPacking: false
50+
ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ]
51+
IncludeCategories:
52+
- Regex: '^<.*\.h>'
53+
Priority: 1
54+
- Regex: '^<.*'
55+
Priority: 2
56+
- Regex: '.*'
57+
Priority: 3
58+
IncludeIsMainRegex: '([-_](test|unittest))?$'
59+
IndentCaseLabels: true
60+
IndentWidth: 2
61+
IndentWrappedFunctionNames: false
62+
JavaScriptQuotes: Leave
63+
JavaScriptWrapImports: true
64+
KeepEmptyLinesAtTheStartOfBlocks: false
65+
MacroBlockBegin: ''
66+
MacroBlockEnd: ''
67+
MaxEmptyLinesToKeep: 1
68+
NamespaceIndentation: None
69+
ObjCBlockIndentWidth: 2
70+
ObjCSpaceAfterProperty: false
71+
ObjCSpaceBeforeProtocolList: false
72+
PenaltyBreakBeforeFirstCallParameter: 1
73+
PenaltyBreakComment: 300
74+
PenaltyBreakFirstLessLess: 120
75+
PenaltyBreakString: 1000
76+
PenaltyExcessCharacter: 1000000
77+
PenaltyReturnTypeOnItsOwnLine: 200
78+
PointerAlignment: Left
79+
ReflowComments: true
80+
SortIncludes: true
81+
SpaceAfterCStyleCast: false
82+
SpaceBeforeAssignmentOperators: true
83+
SpaceBeforeParens: ControlStatements
84+
SpaceInEmptyParentheses: false
85+
SpacesBeforeTrailingComments: 2
86+
SpacesInAngles: false
87+
SpacesInContainerLiterals: true
88+
SpacesInCStyleCastParentheses: false
89+
SpacesInParentheses: false
90+
SpacesInSquareBrackets: false
91+
Standard: Auto
92+
TabWidth: 8
93+
UseTab: Never
94+
...
95+

.gitmodules

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[submodule "LibCarla/source/carla/ros2/carla_msgs"]
2+
path = LibCarla/source/carla/ros2/carla_msgs
3+
url = https://github.com/berndgassmann/ros-carla-msgs

LibCarla/cmake/client/CMakeLists.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,12 @@ file(GLOB libcarla_carla_sources
9898
set(libcarla_sources "${libcarla_sources};${libcarla_carla_sources}")
9999
install(FILES ${libcarla_carla_sources} DESTINATION include/carla)
100100

101+
file(GLOB libcarla_carla_actor_sources
102+
"${libcarla_source_path}/carla/actor/*.cpp"
103+
"${libcarla_source_path}/carla/actor/*.h")
104+
set(libcarla_sources "${libcarla_sources};${libcarla_carla_actor_sources}")
105+
install(FILES ${libcarla_carla_actor_sources} DESTINATION include/carla/actor)
106+
101107
file(GLOB libcarla_carla_client_sources
102108
"${libcarla_source_path}/carla/client/*.cpp"
103109
"${libcarla_source_path}/carla/client/*.h")

LibCarla/cmake/server/CMakeLists.txt

Lines changed: 90 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -3,70 +3,40 @@ project(libcarla-server)
33

44
install(DIRECTORY "${libcarla_source_path}/compiler" DESTINATION include)
55

6-
file(GLOB libcarla_carla_headers "${libcarla_source_path}/carla/*.h")
7-
install(FILES ${libcarla_carla_headers} DESTINATION include/carla)
6+
foreach(dir ""
7+
"actor/"
8+
"geom/"
9+
"opendrive/" "opendrive/parser/"
10+
"profiler/"
11+
"road/" "road/element/" "road/general/" "road/object/" "road/signal/"
12+
"rpc/"
13+
"sensor/" "sensor/data/" "sensor/s11n/"
14+
"streaming/" "streaming/detail/" "streaming/detail/tcp/" "streaming/low_level/"
15+
"multigpu/")
816

9-
file(GLOB libcarla_carla_geom_headers "${libcarla_source_path}/carla/geom/*.h")
10-
install(FILES ${libcarla_carla_geom_headers} DESTINATION include/carla/geom)
17+
file(GLOB headers "${libcarla_source_path}/carla/${dir}*.h")
18+
install(FILES ${headers} DESTINATION include/carla/${dir})
1119

12-
file(GLOB libcarla_carla_opendrive "${libcarla_source_path}/carla/opendrive/*.h")
13-
install(FILES ${libcarla_carla_opendrive} DESTINATION include/carla/opendrive)
20+
endforeach()
1421

15-
file(GLOB libcarla_carla_opendrive_parser "${libcarla_source_path}/carla/opendrive/parser/*.h")
16-
install(FILES ${libcarla_carla_opendrive_parser} DESTINATION include/carla/opendrive/parser)
17-
18-
file(GLOB libcarla_carla_profiler_headers "${libcarla_source_path}/carla/profiler/*.h")
19-
install(FILES ${libcarla_carla_profiler_headers} DESTINATION include/carla/profiler)
20-
21-
file(GLOB libcarla_carla_road_headers "${libcarla_source_path}/carla/road/*.h")
22-
install(FILES ${libcarla_carla_road_headers} DESTINATION include/carla/road)
23-
24-
file(GLOB libcarla_carla_road_element_headers "${libcarla_source_path}/carla/road/element/*.h")
25-
install(FILES ${libcarla_carla_road_element_headers} DESTINATION include/carla/road/element)
26-
27-
file(GLOB libcarla_carla_road_general_headers "${libcarla_source_path}/carla/road/general/*.h")
28-
install(FILES ${libcarla_carla_road_general_headers} DESTINATION include/carla/road/general)
29-
30-
file(GLOB libcarla_carla_road_object_headers "${libcarla_source_path}/carla/road/object/*.h")
31-
install(FILES ${libcarla_carla_road_object_headers} DESTINATION include/carla/road/object)
32-
33-
file(GLOB libcarla_carla_road_signal_headers "${libcarla_source_path}/carla/road/signal/*.h")
34-
install(FILES ${libcarla_carla_road_signal_headers} DESTINATION include/carla/road/signal)
35-
36-
file(GLOB libcarla_carla_rpc_headers "${libcarla_source_path}/carla/rpc/*.h")
37-
install(FILES ${libcarla_carla_rpc_headers} DESTINATION include/carla/rpc)
38-
39-
file(GLOB libcarla_carla_sensor_headers "${libcarla_source_path}/carla/sensor/*.h")
40-
install(FILES ${libcarla_carla_sensor_headers} DESTINATION include/carla/sensor)
41-
42-
file(GLOB libcarla_carla_sensor_data_headers "${libcarla_source_path}/carla/sensor/data/*.h")
43-
install(FILES ${libcarla_carla_sensor_data_headers} DESTINATION include/carla/sensor/data)
44-
45-
file(GLOB libcarla_carla_sensor_s11n_headers "${libcarla_source_path}/carla/sensor/s11n/*.h")
46-
install(FILES ${libcarla_carla_sensor_s11n_headers} DESTINATION include/carla/sensor/s11n)
47-
48-
file(GLOB libcarla_carla_streaming_headers "${libcarla_source_path}/carla/streaming/*.h")
49-
install(FILES ${libcarla_carla_streaming_headers} DESTINATION include/carla/streaming)
50-
51-
file(GLOB libcarla_carla_streaming_detail_headers "${libcarla_source_path}/carla/streaming/detail/*.h")
52-
install(FILES ${libcarla_carla_streaming_detail_headers} DESTINATION include/carla/streaming/detail)
53-
54-
file(GLOB libcarla_carla_streaming_detail_tcp_headers "${libcarla_source_path}/carla/streaming/detail/tcp/*.h")
55-
install(FILES ${libcarla_carla_streaming_detail_tcp_headers} DESTINATION include/carla/streaming/detail/tcp)
56-
57-
file(GLOB libcarla_carla_streaming_low_level_headers "${libcarla_source_path}/carla/streaming/low_level/*.h")
58-
install(FILES ${libcarla_carla_streaming_low_level_headers} DESTINATION include/carla/streaming/low_level)
59-
60-
file(GLOB libcarla_carla_multigpu_headers "${libcarla_source_path}/carla/multigpu/*.h")
61-
install(FILES ${libcarla_carla_multigpu_headers} DESTINATION include/carla/multigpu)
6222

6323
if (LIBCARLA_USE_ROS)
6424
# only install the required public interface headers
65-
foreach(dir "/" "/types/" )
66-
file(GLOB libcarla_carla_ros2_public_headers
67-
"${libcarla_source_path}/carla/ros2${dir}*.h"
25+
foreach(dir "" "types/" )
26+
file(GLOB libcarla_carla_ros2_public_headers
27+
"${libcarla_source_path}/carla/ros2/${dir}*.h"
6828
)
69-
install(FILES ${libcarla_carla_ros2_public_headers} DESTINATION include/carla/ros2${dir})
29+
install(FILES ${libcarla_carla_ros2_public_headers} DESTINATION include/carla/ros2/${dir})
30+
endforeach()
31+
32+
file(GLOB subdirs RELATIVE "${libcarla_source_path}/carla/ros2/ros_types" "${libcarla_source_path}/carla/ros2/ros_types/*")
33+
foreach(dir ${subdirs})
34+
if(IS_DIRECTORY "${libcarla_source_path}/carla/ros2/ros_types/${dir}")
35+
file(GLOB libcarla_carla_ros2_types_${dir}_headers
36+
"${libcarla_source_path}/carla/ros2/ros_types/${dir}/msg/*.h"
37+
)
38+
install(FILES ${libcarla_carla_ros2_types_${dir}_headers} DESTINATION include/carla/ros2/ros_types/${dir}/msg/)
39+
endif()
7040
endforeach()
7141

7242
if(NOT WIN32)
@@ -85,55 +55,60 @@ if(WIN32)
8555
endif()
8656

8757
# carla_server library.
58+
# first the sources which are picked from some directories
59+
set(libcarla_server_sources
60+
"${libcarla_source_path}/carla/Buffer.cpp"
61+
"${libcarla_source_path}/carla/Exception.cpp"
62+
"${libcarla_source_path}/carla/StringUtil.cpp"
63+
# other cpp files only define Deserialize used in client
64+
"${libcarla_source_path}/carla/sensor/s11n/SensorHeaderSerializer.cpp"
65+
)
66+
# then the globs on the folders to add as a whole
67+
foreach(dir
68+
"actor"
69+
"geom"
70+
"opendrive" "opendrive/parser"
71+
"profiler"
72+
"road" "road/element" "road/general" "road/object" "road/signal"
73+
"rpc"
74+
"sensor" "sensor/data"
75+
"streaming" "streaming/detail" "streaming/detail/tcp" "streaming/low_level"
76+
"multigpu")
77+
78+
file(GLOB sources "${libcarla_source_path}/carla/${dir}/*.cpp")
79+
list(APPEND libcarla_server_sources ${sources})
80+
81+
endforeach()
82+
83+
foreach(thirdparty_dir
84+
"odrSpiral"
85+
"moodycamel"
86+
"pugixml")
87+
88+
file(GLOB sources "${libcarla_source_thirdparty_path}/${thirdparty_dir}/*.cpp")
89+
list(APPEND libcarla_server_sources ${sources})
90+
91+
endforeach()
8892

89-
file(GLOB libcarla_server_sources
90-
"${libcarla_source_path}/carla/*.h"
91-
"${libcarla_source_path}/carla/Buffer.cpp"
92-
"${libcarla_source_path}/carla/Exception.cpp"
93-
"${libcarla_source_path}/carla/geom/*.cpp"
94-
"${libcarla_source_path}/carla/geom/*.h"
95-
"${libcarla_source_path}/carla/opendrive/*.cpp"
96-
"${libcarla_source_path}/carla/opendrive/*.h"
97-
"${libcarla_source_path}/carla/opendrive/parser/*.cpp"
98-
"${libcarla_source_path}/carla/opendrive/parser/*.h"
99-
"${libcarla_source_path}/carla/road/*.cpp"
100-
"${libcarla_source_path}/carla/road/*.h"
101-
"${libcarla_source_path}/carla/road/element/*.cpp"
102-
"${libcarla_source_path}/carla/road/element/*.h"
103-
"${libcarla_source_path}/carla/road/general/*.cpp"
104-
"${libcarla_source_path}/carla/road/general/*.h"
105-
"${libcarla_source_path}/carla/road/object/*.cpp"
106-
"${libcarla_source_path}/carla/road/object/*.h"
107-
"${libcarla_source_path}/carla/road/signal/*.cpp"
108-
"${libcarla_source_path}/carla/road/signal/*.h"
109-
"${libcarla_source_path}/carla/rpc/*.cpp"
110-
"${libcarla_source_path}/carla/rpc/*.h"
111-
"${libcarla_source_path}/carla/sensor/*.h"
112-
"${libcarla_source_path}/carla/sensor/s11n/*.h"
113-
"${libcarla_source_path}/carla/sensor/s11n/SensorHeaderSerializer.cpp"
114-
"${libcarla_source_path}/carla/streaming/*.h"
115-
"${libcarla_source_path}/carla/streaming/detail/*.cpp"
116-
"${libcarla_source_path}/carla/streaming/detail/*.h"
117-
"${libcarla_source_path}/carla/streaming/detail/tcp/*.cpp"
118-
"${libcarla_source_path}/carla/streaming/low_level/*.h"
119-
"${libcarla_source_path}/carla/multigpu/*.h"
120-
"${libcarla_source_path}/carla/multigpu/*.cpp"
121-
"${libcarla_source_thirdparty_path}/odrSpiral/*.cpp"
122-
"${libcarla_source_thirdparty_path}/odrSpiral/*.h"
123-
"${libcarla_source_thirdparty_path}/moodycamel/*.cpp"
124-
"${libcarla_source_thirdparty_path}/moodycamel/*.h"
125-
"${libcarla_source_thirdparty_path}/pugixml/*.cpp"
126-
"${libcarla_source_thirdparty_path}/pugixml/*.hpp")
127-
128-
129-
set(libcarla_ros_sources "")
13093
if (LIBCARLA_USE_ROS)
131-
file(GLOB libcarla_ros_sources
132-
"${libcarla_source_path}/carla/ros2/*.cpp"
133-
"${libcarla_source_path}/carla/ros2/listeners/*.cpp"
134-
"${libcarla_source_path}/carla/ros2/publishers/*.cpp"
135-
"${libcarla_source_path}/carla/ros2/subscribers/*.cpp"
136-
"${libcarla_source_path}/carla/ros2/types/*.cpp")
94+
foreach(ros2_dir
95+
"/"
96+
"impl/fastdds/"
97+
"publishers/"
98+
"services/"
99+
"subscribers/"
100+
"types/")
101+
102+
file(GLOB sources "${libcarla_source_path}/carla/ros2/${ros2_dir}*.cpp")
103+
list(APPEND libcarla_server_sources ${sources})
104+
endforeach()
105+
106+
file(GLOB sources "${libcarla_source_path}/carla/ros2/ros_types/*/msg/*.cxx")
107+
list(APPEND libcarla_server_sources ${sources})
108+
109+
file(GLOB sources "${libcarla_source_path}/carla/ros2/ros_types/*/srv/*.cxx")
110+
list(APPEND libcarla_server_sources ${sources})
111+
137112
endif()
138113

139114
# ==============================================================================
@@ -142,10 +117,10 @@ endif()
142117

143118
if (LIBCARLA_BUILD_RELEASE)
144119

145-
add_library(carla_server STATIC
120+
add_library(carla_server STATIC
146121
${libcarla_server_sources}
147-
${libcarla_ros_sources}
148122
)
123+
target_compile_definitions(carla_server PUBLIC -DCARLA_SERVER_BUILD)
149124

150125
target_include_directories(carla_server SYSTEM PRIVATE
151126
"${BOOST_INCLUDE_PATH}"
@@ -157,18 +132,20 @@ if (LIBCARLA_BUILD_RELEASE)
157132

158133
if (LIBCARLA_USE_ROS)
159134
target_include_directories(carla_server SYSTEM PRIVATE
160-
"${FASTDDS_INCLUDE_PATH}")
135+
"${FASTDDS_INCLUDE_PATH}"
136+
"${libcarla_source_path}/carla/ros2/ros_types")
161137
target_link_directories(carla_server PRIVATE ${FASTDDS_LIB_PATH})
162138
target_link_libraries(carla_server fastrtps fastcdr)
139+
target_compile_definitions(carla_server PUBLIC -DWITH_ROS2)
163140
endif()
164141
endif()
165142

166143
if (LIBCARLA_BUILD_DEBUG)
167144

168-
add_library(carla_server_debug STATIC
145+
add_library(carla_server_debug STATIC
169146
${libcarla_server_sources}
170-
${libcarla_ros_sources}
171147
)
148+
target_compile_definitions(carla_server_debug PUBLIC -DCARLA_SERVER_BUILD)
172149

173150
target_include_directories(carla_server_debug SYSTEM PRIVATE
174151
"${BOOST_INCLUDE_PATH}"
@@ -181,8 +158,10 @@ if (LIBCARLA_BUILD_DEBUG)
181158

182159
if (LIBCARLA_USE_ROS)
183160
target_include_directories(carla_server_debug SYSTEM PRIVATE
184-
"${FASTDDS_INCLUDE_PATH}")
161+
"${FASTDDS_INCLUDE_PATH}"
162+
"${libcarla_source_path}/carla/ros2/ros_types")
185163
target_link_directories(carla_server_debug PRIVATE ${FASTDDS_LIB_PATH})
186164
target_link_libraries(carla_server_debug fastrtps fastcdr)
187-
endif()
165+
target_compile_definitions(carla_server_debug PUBLIC -DWITH_ROS2)
166+
endif()
188167
endif()

LibCarla/source/carla/client/ActorAttribute.cpp renamed to LibCarla/source/carla/actor/ActorAttribute.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44
// This work is licensed under the terms of the MIT license.
55
// For a copy, see <https://opensource.org/licenses/MIT>.
66

7-
#include "carla/client/ActorAttribute.h"
7+
#include "carla/actor/ActorAttribute.h"
88

99
#include "carla/Exception.h"
1010
#include "carla/Logging.h"
1111
#include "carla/StringUtil.h"
1212

1313
namespace carla {
14-
namespace client {
14+
namespace actor {
1515

1616
#define LIBCARLA_THROW_INVALID_VALUE(message) throw_exception(InvalidAttributeValue(GetId() + ": " + message));
1717
#define LIBCARLA_THROW_BAD_VALUE_CAST(type) \
@@ -103,5 +103,5 @@ namespace client {
103103
#undef LIBCARLA_THROW_BAD_VALUE_CAST
104104
#undef LIBCARLA_THROW_INVALID_VALUE
105105

106-
} // namespace client
106+
} // namespace actor
107107
} // namespace carla

0 commit comments

Comments
 (0)