Browse Source

first commit

Romain Vitrat 4 years ago
commit
70884fbf0b

+ 67
- 0
src/CMakeLists.txt View File

@@ -0,0 +1,67 @@
1
+# toplevel CMakeLists.txt for a catkin workspace
2
+# catkin/cmake/toplevel.cmake
3
+
4
+cmake_minimum_required(VERSION 2.8.3)
5
+
6
+set(CATKIN_TOPLEVEL TRUE)
7
+
8
+# search for catkin within the workspace
9
+set(_cmd "catkin_find_pkg" "catkin" "${CMAKE_SOURCE_DIR}")
10
+execute_process(COMMAND ${_cmd}
11
+  RESULT_VARIABLE _res
12
+  OUTPUT_VARIABLE _out
13
+  ERROR_VARIABLE _err
14
+  OUTPUT_STRIP_TRAILING_WHITESPACE
15
+  ERROR_STRIP_TRAILING_WHITESPACE
16
+)
17
+if(NOT _res EQUAL 0 AND NOT _res EQUAL 2)
18
+  # searching fot catkin resulted in an error
19
+  string(REPLACE ";" " " _cmd_str "${_cmd}")
20
+  message(FATAL_ERROR "Search for 'catkin' in workspace failed (${_cmd_str}): ${_err}")
21
+endif()
22
+
23
+# include catkin from workspace or via find_package()
24
+if(_res EQUAL 0)
25
+  set(catkin_EXTRAS_DIR "${CMAKE_SOURCE_DIR}/${_out}/cmake")
26
+  # include all.cmake without add_subdirectory to let it operate in same scope
27
+  include(${catkin_EXTRAS_DIR}/all.cmake NO_POLICY_SCOPE)
28
+  add_subdirectory("${_out}")
29
+
30
+else()
31
+  # use either CMAKE_PREFIX_PATH explicitly passed to CMake as a command line argument
32
+  # or CMAKE_PREFIX_PATH from the environment
33
+  if(NOT DEFINED CMAKE_PREFIX_PATH)
34
+    if(NOT "$ENV{CMAKE_PREFIX_PATH}" STREQUAL "")
35
+      if(NOT WIN32)
36
+        string(REPLACE ":" ";" CMAKE_PREFIX_PATH $ENV{CMAKE_PREFIX_PATH})
37
+      else()
38
+        set(CMAKE_PREFIX_PATH $ENV{CMAKE_PREFIX_PATH})
39
+      endif()
40
+    endif()
41
+  endif()
42
+
43
+  # list of catkin workspaces
44
+  set(catkin_search_path "")
45
+  foreach(path ${CMAKE_PREFIX_PATH})
46
+    if(EXISTS "${path}/.catkin")
47
+      list(FIND catkin_search_path ${path} _index)
48
+      if(_index EQUAL -1)
49
+        list(APPEND catkin_search_path ${path})
50
+      endif()
51
+    endif()
52
+  endforeach()
53
+
54
+  # search for catkin in all workspaces
55
+  set(CATKIN_TOPLEVEL_FIND_PACKAGE TRUE)
56
+  find_package(catkin QUIET
57
+    NO_POLICY_SCOPE
58
+    PATHS ${catkin_search_path}
59
+    NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
60
+  unset(CATKIN_TOPLEVEL_FIND_PACKAGE)
61
+
62
+  if(NOT catkin_FOUND)
63
+    message(FATAL_ERROR "find_package(catkin) failed. catkin was neither found in the workspace nor in the CMAKE_PREFIX_PATH. One reason may be that no ROS setup.sh was sourced before.")
64
+  endif()
65
+endif()
66
+
67
+catkin_workspace()

+ 217
- 0
src/scanerapi_sample_ros_gateway_folder/CMakeLists.txt View File

@@ -0,0 +1,217 @@
1
+cmake_minimum_required(VERSION 2.8.3)
2
+project(scanerapi_sample_ros_gateway_folder)
3
+
4
+## Compile as C++11, supported in ROS Kinetic and newer
5
+# add_compile_options(-std=c++11)
6
+
7
+## Find catkin macros and libraries
8
+## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
9
+## is used, also find other catkin packages
10
+find_package(catkin REQUIRED COMPONENTS
11
+  roscpp
12
+  std_msgs
13
+)
14
+
15
+## System dependencies are found with CMake's conventions
16
+# find_package(Boost REQUIRED COMPONENTS system)
17
+
18
+
19
+## Uncomment this if the package has a setup.py. This macro ensures
20
+## modules and global scripts declared therein get installed
21
+## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html
22
+# catkin_python_setup()
23
+
24
+################################################
25
+## Declare ROS messages, services and actions ##
26
+################################################
27
+
28
+## To declare and build messages, services or actions from within this
29
+## package, follow these steps:
30
+## * Let MSG_DEP_SET be the set of packages whose message types you use in
31
+##   your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...).
32
+## * In the file package.xml:
33
+##   * add a build_depend tag for "message_generation"
34
+##   * add a build_depend and a exec_depend tag for each package in MSG_DEP_SET
35
+##   * If MSG_DEP_SET isn't empty the following dependency has been pulled in
36
+##     but can be declared for certainty nonetheless:
37
+##     * add a exec_depend tag for "message_runtime"
38
+## * In this file (CMakeLists.txt):
39
+##   * add "message_generation" and every package in MSG_DEP_SET to
40
+##     find_package(catkin REQUIRED COMPONENTS ...)
41
+##   * add "message_runtime" and every package in MSG_DEP_SET to
42
+##     catkin_package(CATKIN_DEPENDS ...)
43
+##   * uncomment the add_*_files sections below as needed
44
+##     and list every .msg/.srv/.action file to be processed
45
+##   * uncomment the generate_messages entry below
46
+##   * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...)
47
+
48
+## Generate messages in the 'msg' folder
49
+# add_message_files(
50
+#   FILES
51
+#   Message1.msg
52
+#   Message2.msg
53
+# )
54
+
55
+## Generate services in the 'srv' folder
56
+# add_service_files(
57
+#   FILES
58
+#   Service1.srv
59
+#   Service2.srv
60
+# )
61
+
62
+## Generate actions in the 'action' folder
63
+# add_action_files(
64
+#   FILES
65
+#   Action1.action
66
+#   Action2.action
67
+# )
68
+
69
+## Generate added messages and services with any dependencies listed here
70
+# generate_messages(
71
+#   DEPENDENCIES
72
+#   std_msgs
73
+# )
74
+
75
+################################################
76
+## Declare ROS dynamic reconfigure parameters ##
77
+################################################
78
+
79
+## To declare and build dynamic reconfigure parameters within this
80
+## package, follow these steps:
81
+## * In the file package.xml:
82
+##   * add a build_depend and a exec_depend tag for "dynamic_reconfigure"
83
+## * In this file (CMakeLists.txt):
84
+##   * add "dynamic_reconfigure" to
85
+##     find_package(catkin REQUIRED COMPONENTS ...)
86
+##   * uncomment the "generate_dynamic_reconfigure_options" section below
87
+##     and list every .cfg file to be processed
88
+
89
+## Generate dynamic reconfigure parameters in the 'cfg' folder
90
+# generate_dynamic_reconfigure_options(
91
+#   cfg/DynReconf1.cfg
92
+#   cfg/DynReconf2.cfg
93
+# )
94
+
95
+###################################
96
+## catkin specific configuration ##
97
+###################################
98
+## The catkin_package macro generates cmake config files for your package
99
+## Declare things to be passed to dependent projects
100
+## INCLUDE_DIRS: uncomment this if your package contains header files
101
+## LIBRARIES: libraries you create in this project that dependent projects also need
102
+## CATKIN_DEPENDS: catkin_packages dependent projects also need
103
+## DEPENDS: system dependencies of this project that dependent projects also need
104
+catkin_package(
105
+#  INCLUDE_DIRS include
106
+#  LIBRARIES scaner_ros_gateway
107
+#  CATKIN_DEPENDS roscpp std_msgs
108
+#  DEPENDS system_lib
109
+)
110
+
111
+###########
112
+## Build ##
113
+###########
114
+
115
+## Specify additional locations of header files
116
+## Your package locations should be listed before other locations
117
+include_directories(
118
+# include
119
+../../../../../../include
120
+  ${catkin_INCLUDE_DIRS}
121
+)
122
+
123
+link_directories(
124
+../../../../../../../bin/Linux/ubuntu/16.04/lib
125
+../../../../../../../bin/Linux/ubuntu/16.04/lib/external
126
+)
127
+
128
+## Declare a C++ library
129
+# add_library(${PROJECT_NAME}
130
+#   src/${PROJECT_NAME}/scaner_ros_gateway.cpp
131
+#   src/${PROJECT_NAME}/scaner_ros_receive.cpp
132
+# )
133
+
134
+## Add cmake target dependencies of the library
135
+## as an example, code may need to be generated before libraries
136
+## either from message generation or dynamic reconfigure
137
+# add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
138
+
139
+## Declare a C++ executable
140
+## With catkin_make all packages are built within a single CMake context
141
+## The recommended prefix ensures that target names across packages don't collide
142
+add_executable(scanerapi_sample_ros_transmit_node src/scanerapi_sample_ros_transmit.cpp)
143
+add_executable(scanerapi_sample_ros_receive_node src/scanerapi_sample_ros_receive.cpp)
144
+
145
+## Rename C++ executable without prefix
146
+## The above recommended prefix causes long target names, the following renames the
147
+## target back to the shorter version for ease of user use
148
+## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node"
149
+# set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "")
150
+
151
+## Add cmake target dependencies of the executable
152
+## same as for the library above
153
+add_dependencies(scanerapi_sample_ros_transmit_node ${scanerapi_sample_ros_transmit_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
154
+add_dependencies(scanerapi_sample_ros_receive_node ${scanerapi_sample_ros_receive_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
155
+
156
+## Specify libraries to link a library or executable target against
157
+target_link_libraries(scanerapi_sample_ros_transmit_node libScanerAPI.so
158
+   ${catkin_LIBRARIES}
159
+)
160
+target_link_libraries(scanerapi_sample_ros_receive_node libScanerAPI.so
161
+   ${catkin_LIBRARIES}
162
+)
163
+
164
+#############
165
+## Install ##
166
+#############
167
+
168
+# all install targets should use catkin DESTINATION variables
169
+# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html
170
+
171
+## Mark executable scripts (Python etc.) for installation
172
+## in contrast to setup.py, you can choose the destination
173
+# install(PROGRAMS
174
+#   scripts/my_python_script
175
+#   DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
176
+# )
177
+
178
+## Mark executables for installation
179
+## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_executables.html
180
+# install(TARGETS ${PROJECT_NAME}_node
181
+#   RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
182
+# )
183
+
184
+## Mark libraries for installation
185
+## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_libraries.html
186
+# install(TARGETS ${PROJECT_NAME}
187
+#   ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
188
+#   LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
189
+#   RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
190
+# )
191
+
192
+## Mark cpp header files for installation
193
+# install(DIRECTORY include/${PROJECT_NAME}/
194
+#   DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
195
+#   FILES_MATCHING PATTERN "*.h"
196
+#   PATTERN ".svn" EXCLUDE
197
+# )
198
+
199
+## Mark other files for installation (e.g. launch and bag files, etc.)
200
+# install(FILES
201
+#   # myfile1
202
+#   # myfile2
203
+#   DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
204
+# )
205
+
206
+#############
207
+## Testing ##
208
+#############
209
+
210
+## Add gtest based cpp test target and link libraries
211
+# catkin_add_gtest(${PROJECT_NAME}-test test/test_scaner_ros_gateway.cpp)
212
+# if(TARGET ${PROJECT_NAME}-test)
213
+#   target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME})
214
+# endif()
215
+
216
+## Add folders to be run by python nosetests
217
+# catkin_add_nosetests(test)

+ 68
- 0
src/scanerapi_sample_ros_gateway_folder/package.xml View File

@@ -0,0 +1,68 @@
1
+<?xml version="1.0"?>
2
+<package format="2">
3
+  <name>scanerapi_sample_ros_gateway_folder</name>
4
+  <version>0.0.0</version>
5
+  <description>The scanerapi_sample_ros_gateway_folder package</description>
6
+
7
+  <!-- One maintainer tag required, multiple allowed, one person per tag -->
8
+  <!-- Example:  -->
9
+  <!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> -->
10
+  <maintainer email="root@todo.todo">root</maintainer>
11
+
12
+
13
+  <!-- One license tag required, multiple allowed, one license per tag -->
14
+  <!-- Commonly used license strings: -->
15
+  <!--   BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 -->
16
+  <license>TODO</license>
17
+
18
+
19
+  <!-- Url tags are optional, but multiple are allowed, one per tag -->
20
+  <!-- Optional attribute type can be: website, bugtracker, or repository -->
21
+  <!-- Example: -->
22
+  <!-- <url type="website">http://wiki.ros.org/scanerapi_sample_ros_gateway_folder</url> -->
23
+
24
+
25
+  <!-- Author tags are optional, multiple are allowed, one per tag -->
26
+  <!-- Authors do not have to be maintainers, but could be -->
27
+  <!-- Example: -->
28
+  <!-- <author email="jane.doe@example.com">Jane Doe</author> -->
29
+
30
+
31
+  <!-- The *depend tags are used to specify dependencies -->
32
+  <!-- Dependencies can be catkin packages or system dependencies -->
33
+  <!-- Examples: -->
34
+  <!-- Use depend as a shortcut for packages that are both build and exec dependencies -->
35
+  <!--   <depend>roscpp</depend> -->
36
+  <!--   Note that this is equivalent to the following: -->
37
+  <!--   <build_depend>roscpp</build_depend> -->
38
+  <!--   <exec_depend>roscpp</exec_depend> -->
39
+  <!-- Use build_depend for packages you need at compile time: -->
40
+  <!--   <build_depend>message_generation</build_depend> -->
41
+  <!-- Use build_export_depend for packages you need in order to build against this package: -->
42
+  <!--   <build_export_depend>message_generation</build_export_depend> -->
43
+  <!-- Use buildtool_depend for build tool packages: -->
44
+  <!--   <buildtool_depend>catkin</buildtool_depend> -->
45
+  <!-- Use exec_depend for packages you need at runtime: -->
46
+  <!--   <exec_depend>message_runtime</exec_depend> -->
47
+  <!-- Use test_depend for packages you need only for testing: -->
48
+  <!--   <test_depend>gtest</test_depend> -->
49
+  <!-- Use doc_depend for packages you need only for building documentation: -->
50
+  <!--   <doc_depend>doxygen</doc_depend> -->
51
+  <buildtool_depend>catkin</buildtool_depend>
52
+  <build_depend>roscpp</build_depend>
53
+  <build_depend>scanerapi_sample_ros_gateway</build_depend>
54
+  <build_depend>std_msgs</build_depend>
55
+  <build_export_depend>roscpp</build_export_depend>
56
+  <build_export_depend>scanerapi_sample_ros_gateway</build_export_depend>
57
+  <build_export_depend>std_msgs</build_export_depend>
58
+  <exec_depend>roscpp</exec_depend>
59
+  <exec_depend>scanerapi_sample_ros_gateway</exec_depend>
60
+  <exec_depend>std_msgs</exec_depend>
61
+
62
+
63
+  <!-- The export tag contains other, unspecified, tags -->
64
+  <export>
65
+    <!-- Other tools can request additional information be placed here -->
66
+
67
+  </export>
68
+</package>

+ 44
- 0
src/scanerapi_sample_ros_gateway_folder/src/scanerapi_sample_ros_receive.cpp View File

@@ -0,0 +1,44 @@
1
+#include "ros/ros.h"
2
+#include "std_msgs/String.h"
3
+#include "ScanerAPI/scanerAPI_DLL_C.h" //SCANeRTM API: C language Functions
4
+#include "ScanerAPI/ScanerAPImessagesNetwork.h" //SCANeRTM API: Network utils
5
+#include "ScanerAPI/ScanerAPImessagesShm.h"
6
+#include <sstream>
7
+
8
+
9
+
10
+int main(int argc, char **argv)
11
+{
12
+	std_msgs::String msg;
13
+	std::stringstream ss;
14
+	float speed=0.0;
15
+	ros::init(argc, argv, "scanerAPI_sample_ros_receive");
16
+	ros::NodeHandle p;
17
+	Process_Init(argc, argv); //SCANeRTM API: Process initialization
18
+	//Instantiation of  the publisher, it will send data msg to the calculator
19
+	ros::Publisher speed_pub = p.advertise<std_msgs::String>("speed_sensed", 100000);
20
+
21
+	//Definition on a vehicle interface to get any data from the vehicle 
22
+	DataInterface* vehicle_0_in = Com_declareInputData(NETWORK_IVEHICLE_VEHICLEUPDATE, 0);
23
+
24
+	while (ros::ok())
25
+	{
26
+		Process_Wait(); //SCANeRTM API: Frequency synchronization
27
+		Process_Run(); //SCANeRTM API: Run the process
28
+		if (Process_GetState() == PS_RUNNING) //SCANeRTM API: The simulation is running
29
+		{
30
+			Com_updateInputs(UT_AllData); //SCANeRTM API: Update input data (data to read)
31
+			speed=Com_getFloatData(vehicle_0_in, "speed[0]")*3.6; //SCANeRTM API: Read vehicle 0’s speed on X;//SCANeRTM API: Read vehicle 0’s speed.
32
+			ss << speed;
33
+			msg.data = ss.str();
34
+			ss.str("");
35
+			//Here we show the value on the terminal to check it first before sending it
36
+			ROS_INFO("%s", msg.data.c_str());
37
+			//Here we publish the value to the calculator node
38
+			speed_pub.publish(msg);
39
+			ros::spinOnce();
40
+		}
41
+	}
42
+	Process_Close(); //SCANeRTM API: Clean way to stop the SCANeRTM module
43
+	return 0;
44
+}

+ 53
- 0
src/scanerapi_sample_ros_gateway_folder/src/scanerapi_sample_ros_transmit.cpp View File

@@ -0,0 +1,53 @@
1
+#include "ros/ros.h"
2
+#include "std_msgs/String.h"
3
+#include "ScanerAPI/scanerAPI_DLL_C.h" //SCANeRTM API: C language Functions
4
+#include "ScanerAPI/ScanerAPImessagesNetwork.h" //SCANeRTM API: Network utils
5
+#include "ScanerAPI/ScanerAPImessagesShm.h"
6
+#include <sstream>
7
+
8
+unsigned int value_received ;
9
+
10
+//Test function and acquisition of the value computedby the calculator node
11
+void chatterCallback(const std_msgs::String::ConstPtr& msg)
12
+{
13
+	std::istringstream myStream (msg->data.c_str());
14
+	myStream >> value_received ;
15
+	//To demonstrate that the communicaiton works fine, we illustrate it by showing the value received divided by 5. 
16
+	std::cout << "The value received divided by 5 is : " << value_received/5 << std::endl ;
17
+}
18
+
19
+int main(int argc, char **argv)
20
+{
21
+	ros::init(argc, argv, "scanerAPI_sample_ros_transmit");
22
+	ros::NodeHandle n;
23
+	Process_Init(argc, argv); //SCANeRTM API: Process initialization
24
+	ros::Subscriber sub_to_calculator = n.subscribe("response", 1000, chatterCallback);
25
+	bool isOk1=false;
26
+
27
+	DataInterface* vehicle_0_model_corrective_out = Com_declareOutputData(SHM_MODELCABIN_CABTOMODELCORRECTIVE, 0);
28
+
29
+	while (ros::ok())
30
+	{
31
+		Process_Wait(); //SCANeRTM API: Frequency synchronization	
32
+		Process_Run(); //SCANeRTM API: Run the process
33
+		if (Process_GetState() == PS_RUNNING) //SCANeRTM API: The simulation is running
34
+		{
35
+
36
+			//Example of treatment after receiving a value from SCaner (In this big example it is the speed but it would be a sensor value
37
+			// in real conditions)
38
+			if(value_received>5){
39
+				Com_setDoubleData(vehicle_0_model_corrective_out,"AcceleratorAdditive",(double)value_received);
40
+				Com_setDoubleData(vehicle_0_model_corrective_out,"AcceleratorMultiplicative",0.0);
41
+				Com_setDoubleData(vehicle_0_model_corrective_out,"BrakeAdditive",50.0);
42
+				Com_setDoubleData(vehicle_0_model_corrective_out,"BrakeMultiplicative",0.0);
43
+			}
44
+			
45
+			Com_updateOutputs(UT_AllData);
46
+			//ROS_INFO("%s", msg.data.c_str());
47
+			ros::spinOnce();
48
+		}
49
+	}
50
+	Process_Close(); //SCANeRTM API: Clean way to stop the SCANeRTM module
51
+	return 0;
52
+}
53
+

Loading…
Cancel
Save