-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- imported from internal Virtual Vehicle Research GmbH repository
- Loading branch information
0 parents
commit 7c45bac
Showing
6,486 changed files
with
479,134 additions
and
0 deletions.
The diff you're trying to view is too large. We only load the first 3000 changed files.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
cmake-build-debug/ | ||
.idea | ||
/cmake-build-debug/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
cmake_minimum_required(VERSION 3.5.1) | ||
project(v2x_gw) | ||
|
||
# Default to C99 | ||
if(NOT CMAKE_C_STANDARD) | ||
set(CMAKE_C_STANDARD 99) | ||
endif() | ||
|
||
# Default to C++14 | ||
if(NOT CMAKE_CXX_STANDARD) | ||
set(CMAKE_CXX_STANDARD 14) | ||
endif() | ||
|
||
# compile options | ||
# - activation will lead to a shitload of warnings of unused variables in autogenerated vcits lib | ||
#if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") | ||
# add_compile_options(-Wall -Wextra -Wpedantic) | ||
#endif() | ||
|
||
# ZeroMQ configuration | ||
# - activate relative paths for libraries (use that for deployment; WARNING: don't use with --symlink-install -> lib won't be found by file) | ||
# - set lib location for building and linking | ||
# - copy the lib files | ||
#set(CMAKE_INSTALL_RPATH "$ORIGIN") | ||
#set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) | ||
set(ZEROMQ_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ext/libzmq/include") | ||
set(ZEROMQ_LIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/ext/libzmq/libzmq.so") | ||
install(FILES | ||
"${CMAKE_CURRENT_SOURCE_DIR}/ext/libzmq/libzmq.so" | ||
"${CMAKE_CURRENT_SOURCE_DIR}/ext/libzmq/libzmq.so.5" | ||
"${CMAKE_CURRENT_SOURCE_DIR}/ext/libzmq/libzmq.so.5.2.4" | ||
DESTINATION lib/${PROJECT_NAME}/ | ||
) | ||
|
||
# find dependencies | ||
find_package(ament_cmake REQUIRED) | ||
find_package(ament_cmake_auto REQUIRED) | ||
find_package(ament_index_cpp REQUIRED) | ||
find_package(rclcpp REQUIRED) | ||
find_package(eigen3_cmake_module) | ||
find_package(geometry_msgs REQUIRED) | ||
find_package(nav_msgs REQUIRED) | ||
find_package(visualization_msgs REQUIRED) | ||
find_package(diagnostic_msgs REQUIRED) | ||
find_package(tf2 REQUIRED) | ||
find_package(tf2_ros REQUIRED) | ||
find_package(std_msgs REQUIRED) | ||
find_package(dbw_ford_msgs REQUIRED) | ||
find_package(v2x_msgs REQUIRED) | ||
|
||
#pkg_check_modules(vcits REQUIRED) | ||
add_subdirectory(vcits) | ||
|
||
# add executable and sources | ||
ament_auto_add_executable(v2x_gw src/V2XGateway.cpp | ||
src/server/V2XServer.cpp | ||
src/server/V2XZMQServer.cpp | ||
src/handler/V2XMHandler.cpp | ||
src/handler/CAMHandler.cpp | ||
src/handler/CPMHandler.cpp | ||
src/handler/DENMHandler.cpp | ||
src/handler/ExampleMHandler.cpp | ||
) | ||
|
||
# reference headers | ||
target_include_directories(v2x_gw PUBLIC ${CMAKE_INSTALL_PREFIX}/include/ | ||
include | ||
include/server | ||
include/handler | ||
${ZEROMQ_INCLUDE_DIR} | ||
vcits/asn1c | ||
. | ||
) | ||
|
||
# link libraries | ||
ament_target_dependencies(v2x_gw rclcpp std_msgs geometry_msgs nav_msgs visualization_msgs diagnostic_msgs dbw_ford_msgs v2x_msgs tf2 tf2_ros) | ||
|
||
target_link_libraries(v2x_gw | ||
${ZEROMQ_LIBRARIES} | ||
vcits) | ||
|
||
# install ros package dependencies | ||
ament_auto_package( | ||
INSTALL_TO_SHARE | ||
launch | ||
config | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
# ZeroMQ.cmake from http://lists.gforge.inria.fr/pipermail/simgrid-devel/2012-July/001513.html | ||
|
||
SET (ZEROMQ_FIND_QUIETLY TRUE) | ||
SET (ZEROMQ_FIND_REQUIRED FALSE) | ||
|
||
IF (NOT ZEROMQ_FOUND) | ||
# Search user environment for headers, then default paths | ||
FIND_PATH (ZEROMQ_INCLUDE_DIR zmq.hpp | ||
PATHS ${ZEROMQROOT}/include $ENV{ZEROMQROOT}/include /usr/local/include | ||
NO_DEFAULT_PATH) | ||
FIND_PATH (ZEROMQ_INCLUDE_DIR zmq.hpp) | ||
GET_FILENAME_COMPONENT (ZEROMQROOT ${ZEROMQ_INCLUDE_DIR} PATH) | ||
|
||
# Search user environment for libraries, then default paths | ||
FIND_LIBRARY (ZEROMQ_LIBRARIES zmq | ||
PATHS ${ZEROMQROOT}/lib $ENV{ZEROMQROOT}/lib /usr/local/lib | ||
NO_DEFAULT_PATH) | ||
FIND_LIBRARY (ZEROMQ_LIBRARIES zmq) | ||
|
||
# Set ZEROMQ_FOUND and error out if zmq is not found | ||
INCLUDE (FindPackageHandleStandardArgs) | ||
FIND_PACKAGE_HANDLE_STANDARD_ARGS (ZEROMQ | ||
DEFAULT_MSG ZEROMQ_LIBRARIES ZEROMQ_INCLUDE_DIR) | ||
|
||
IF (ZEROMQ_FOUND) | ||
MESSAGE (STATUS "ZeroMQ found: zmq library and zmq.hpp ") | ||
MESSAGE (STATUS " * includes: ${ZEROMQ_INCLUDE_DIR}") | ||
MESSAGE (STATUS " * libs: ${ZEROMQ_LIBRARIES}") | ||
ELSE (ZEROMQ_FOUND) | ||
IF(${ZEROMQ_LIBRARIES} STREQUAL "ZEROMQ_LIBRARIES-NOTFOUND") | ||
MESSAGE (STATUS "ZeroMQ library does not exist") | ||
ELSEIF(${ZEROMQ_INCLUDE_DIR} STREQUAL "ZEROMQ_INCLUDE_DIR-NOTFOUND") | ||
MESSAGE (STATUS "ZeroMQ has a problem: zmq.hpp does not exist, try to download it from https://github.com/zeromq/cppzmq/blob/master/zmq.hpp") | ||
ENDIF() | ||
ENDIF (ZEROMQ_FOUND) | ||
ENDIF (NOT ZEROMQ_FOUND) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
BSD 3-Clause License | ||
|
||
Copyright (c) 2022, Virtual Vehicle | ||
All rights reserved. | ||
|
||
Redistribution and use in source and binary forms, with or without | ||
modification, are permitted provided that the following conditions are met: | ||
|
||
1. Redistributions of source code must retain the above copyright notice, this | ||
list of conditions and the following disclaimer. | ||
|
||
2. Redistributions in binary form must reproduce the above copyright notice, | ||
this list of conditions and the following disclaimer in the documentation | ||
and/or other materials provided with the distribution. | ||
|
||
3. Neither the name of the copyright holder nor the names of its | ||
contributors may be used to endorse or promote products derived from | ||
this software without specific prior written permission. | ||
|
||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | ||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | ||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | ||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | ||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
# V2X Gateway | ||
The *v2x_gw* is part of the [vehicleCAPTAIN](https://github.com/virtual-vehicle/vehicle_captain) toolbox. | ||
|
||
The *v2x_gw* is a central ROS2 node that (i) connects to the vehicleCAPTAIN routing core (ii) converts V2X messages to ROS messages (iii) converts ROS messages to V2X messages. | ||
|
||
The vehicleCAPTAIN routing core may be replaced by your implementation for rx/tx of V2X messages. | ||
|
||
Version Support: | ||
* v1.x | ||
* v2x_msgs v1.1.0 | ||
* vcits 1.0 | ||
|
||
## Copyright | ||
Please cite the [vehicleCAPTAIN paper](https://TODO_link_to_paper_when_it_is_published) if you used any part of this library for your work. | ||
|
||
## Contribution Guidelines | ||
Feel free to add fixes and new features! | ||
|
||
## Authors | ||
Main Author: [Christoph Pilz](https://github.com/MrMushroom) | ||
|
||
## Acknowledgement | ||
The majority of this work is part of my ([Christoph Pilz](https://www.researchgate.net/profile/Christoph-Pilz)) PhD studies at [Graz University of Technology](https://www.tugraz.at/home) in cooperation with the [Virtual Vehicle Research GmbH](https://www.v2c2.at/). | ||
|
||
Features are also integrated across various funded projects (see [vehicleCAPTAIN](https://github.com/virtual-vehicle/vehicle_captain)). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
# Usage Guide | ||
Check out the Requirements below! | ||
|
||
Afterwards simply check out the repo and integrate it into your ROS2 environment. | ||
|
||
## Requirements | ||
This node requires the [v2x_msgs](https://github.com/virtual-vehicle/v2x_msgs) library from the [vehicleCAPTAIN](https://github.com/virtual-vehicle/vehicle_captain) toolbox. | ||
|
||
This node is designed for the [v2x_routing_core](https://github.com/virtual-vehicle/vehicle_captain_routing_core) from the [vehicleCAPTAIN](https://github.com/virtual-vehicle/vehicle_captain) toolbox. | ||
However, you may introduce your own V2XServer connection. | ||
|
||
Also, check out the ROS2 dependencies (package.xml)! | ||
|
||
## In case you want to install ZMQ locally | ||
|
||
You may use zmq_setup.sh for setup | ||
|
||
In top level "CMakeLists.txt" replace setting of ZMQ libs with "FindZeroMQ.cmake" | ||
|
||
### LibZMQ v4.3.4 | ||
```shell | ||
cd /opt | ||
git clone https://github.com/zeromq/libzmq.git | ||
cd /opt/libzmq | ||
git checkout v4.3.4 | ||
|
||
apt-get update -qq | ||
apt-get install -qq --yes --no-install-recommends \ | ||
libkrb5-dev \ | ||
libsodium23 | ||
|
||
./autogen.sh | ||
./configure --prefix=/usr/local --with-libgssapi_krb5 | ||
make | ||
make check | ||
make install | ||
|
||
ldconfig && ldconfig -p | grep libzmq | ||
``` | ||
|
||
### CPPZMQ v4.8.0 | ||
WARNING: v4.8.0 recommended, but Ubuntu 18.04 has wrong cmake version! | ||
WARNING: also for that reason, the -DCPPZMQ_BUILD_TESTS=OFF is required | ||
```shell | ||
cd /opt | ||
git clone https://github.com/zeromq/cppzmq.git | ||
cd /opt/cppzmq | ||
git checkout v4.7.1 | ||
|
||
mkdir build | ||
cd /opt/cppzmq/build | ||
|
||
cmake -DCPPZMQ_BUILD_TESTS=OFF .. | ||
make install | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
# config/v2x_gw.param.yaml | ||
--- | ||
|
||
# Node-specific parameters | ||
/**: | ||
ros__parameters: | ||
server: | ||
type: "zmq" # type of the V2X server (supported: "zmq") | ||
address: "vcaptain001.local" # hostname or ipv4 of the vehicleCAPTAIN routing core | ||
receive_port: 5556 # 5556 is default for receiving from the vehicleCAPTAIN routing core | ||
send_port: 5555 # 5555 is default for sending to the vehicleCAPTAIN routing core | ||
topic_filter: "v2x." # supported: "v2x." ... get v2x messages (see vehicleCAPTAIN routing core docs) | ||
cycle_time_ms: 1 # cycle time leads to communication update interval | ||
|
||
header: | ||
station_id: 1337 # this value is pseudonymized and should be unique in a GN communication | ||
|
||
cam: | ||
active: true # activate processing of CAM module | ||
handler_debug_msg_throttle_ms: 5000 # throttle for debug msgs in milliseconds (throttles <=WARN) | ||
|
||
cpm: | ||
active: true # activate processing of CPM module | ||
handler_debug_msg_throttle_ms: 5000 # throttle for debug msgs in milliseconds (throttles <=WARN) | ||
|
||
denm: | ||
active: true # activate processing of DENM module | ||
handler_debug_msg_throttle_ms: 5000 # throttle for debug msgs in milliseconds (throttles <=WARN) | ||
|
||
examplem: | ||
active: false # activate processing of ExampleM module | ||
handler_debug_msg_throttle_ms: 5000 # throttle for debug msgs in milliseconds (throttles <=WARN) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
<mxfile host="Electron" modified="2022-02-09T08:57:03.421Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/16.5.1 Chrome/96.0.4664.110 Electron/16.0.7 Safari/537.36" etag="Zjf9qel-bqP_ra-4kzGx" version="16.5.1" type="device" pages="2"><diagram id="icEgXLWXjd7jY7iUPej3" name="HLA">7VrZcqM6EP0aV819mJRBQJxHL1lmKluZ1CyPAmSsiYxcIGI7X38lkABb2HFdL8S+4zwEtYSQzulWt1pqgf5kfhvD6fiBBoi0zHYwb4FByzQNYLf5PyFZ5JLOZScXhDEOZKNS4OJ3JIXyvTDFAUqWGjJKCcPTZaFPowj5bEkG45jOlpuNKFn+6hSGSBO4PiS69CcO2DiXmgA4ZcUdwuFYfdqxrbxmAlVrOZVkDAM6q4jAdQv0Y0pZ/jSZ9xER6Clg8vdu1tQWI4tRxLZ5YXBjPty8Mdd9fjHd7/7L0Ex+fJW9vEGSyhn/MH9xwS1kaAYX/OmRc8r/fRk+uf/IibCFgofPaSoeBa4oboHeiEbMlfUGLzPoKdwMp50LCrxMKXimCWaYRlxE0IjX9MZsQmQPHk2jAAX3nhIQ6CHyLbpDMPtkJuP0M4ijSpkQOE2wlw1EfCZGfhon+A0NUZJrmZCOMCF9SmicTQcEEHVGPpcnLKavqFLj+B3kjXiNjrqCEMUMzSsiycItohPEYgGlrAVKIxZKZ2R5VmqYrWTjinJZlhRCqdVh0XfJO3+Q1NerQa83v/R/vtt3g/k7DOevnj24+2oBjVoUcEOQRRqzMQ1pBMl1Ke3FOTMSyrLNPaVTycMfxNhCWjVMGV2mNmEwZl1hpVwQ0Qgp2Q0Ww8+6zcclBrNW7TcpdkLT2EcbZi7tmH81RGxDOwPUcxojAhlXq+WVZ9/8OJqZDpGPxGdXaStJEQjPxpghdwozCGZ8iV4mYEX9R6OR6deqf+B4ju0UdGi6vi0ha21ixSQs3SIMs8YinEMZhGFriLsoCs4UblCzAh0Xb8v8vy5ABth2BbJ3XIGyV/lsM7euGkwpjlhS6flZCKrOyl5WlU57hey8x5L6Ymg7aENbsz5NPULO/nStfch4EHqqeXsvdlO4auW6FToVwwGgxnCKgHb/KxWoC+Ee7mAUEBQnGm4CLMwD3C7BoYi4mLCVHpQlGX8lfA3DUfiS2VGnFNxn1QOzlAzlHI1MJsNBP/UyU8rtzhBmFGAegckgj9uEAGspWLQ2L5W2+JOvVOT5rzZgy37bLqEbtFDXhea4BrpX6ncV1RrTio0JDdJsvawnWXHarrTwOTJZPL+qLRMcBFlf+4e13jXZW3om+2CY67HX4PrxvEEvEG4O9Utd05/PDPRVZ9K8qndq3K5DBILCpfDnUDyfNwvN635NTgaNsU9EGqbffX7pfntci/1WiRjz0ydikBHY6LLOr185lwBu7dc3R3PWCvM1uyCzXcO8cbhtkEb9kMdK3Gi48CEzhRmfncb+Z9iFrlfl09n0OxqyR9iEtj7eYG69l5Tx4Yd7Sauel+Mks4zOicNsbYmy0yjKV9pacgMjXwxg+OSKGpelo9G5e5Ji57h+h7huT7kHD2MY7Y99jHHcXL+pxxdPAZ3s5lR2cBFXJ+UjVCaqGp3hJOWB7DvMFP4kYNw6yD0cjnraqsvX7Dy8aT95f5DP9OTVpwSziBGbA1OPGy8uLk4EvU7j6OlZtZNBr/mTG/NKQ+oI0RzHMF78ku9nhd+icGGr4mBerRwsZGnpxMcnMEmwv3Los+dg0ZTR7ofR4rpQ4jjhokpk/6VxVxrNRmk0mqDxM9PR6L0NYP61qv3Q2GjGAjRyPeocadz1DsNuoYp+vpGnQvIzDi9WJxyDgasRXpxtLwjmvMbg4yBQy3N40H8NM714ShnvRqVU1EG5fbj07OY8xdXKIQioOYuqy1J0DhVVWlbjfuy/3wfa+9WfXHH3bza8WN4/zi/vlNe4wfW/</diagram><diagram id="KFOsoBYfOsZBqLjiIT8Q" name="Class Diagram">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</diagram></mxfile> |
Oops, something went wrong.