Skip to content

Commit

Permalink
Merge pull request #3976 from alonfaraj/ros2-wrapper
Browse files Browse the repository at this point in the history
Add ROS2 wrapper
  • Loading branch information
zimmy87 committed Dec 6, 2021
2 parents a7c05fc + 8f5f660 commit de1c8ae
Show file tree
Hide file tree
Showing 42 changed files with 3,710 additions and 0 deletions.
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -381,6 +381,11 @@ ros/logs/
ros/.catkin_workspace
ros/src/CMakeLists.txt

# ROS2
ros2/install/
ros2/log/
ros2/src/log

# docs
docs/README.md
build_docs/
Expand Down
39 changes: 39 additions & 0 deletions ros2/src/airsim_interfaces/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
cmake_minimum_required(VERSION 3.5)

project(airsim_interfaces)

# Default to C++14
if(NOT CMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 14)
endif()
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(-Wall -Wextra -Wpedantic)
endif()

find_package(ament_cmake REQUIRED)
find_package(rosidl_default_generators REQUIRED)
find_package(std_msgs REQUIRED)
find_package(geometry_msgs REQUIRED)
find_package(geographic_msgs REQUIRED)

rosidl_generate_interfaces(${PROJECT_NAME}
"msg/GimbalAngleEulerCmd.msg"
"msg/GimbalAngleQuatCmd.msg"
"msg/GPSYaw.msg"
"msg/VelCmd.msg"
"msg/VelCmdGroup.msg"
"msg/CarControls.msg"
"msg/CarState.msg"
"msg/Altimeter.msg"
"msg/Environment.msg"
"srv/SetGPSPosition.srv"
"srv/Takeoff.srv"
"srv/TakeoffGroup.srv"
"srv/Land.srv"
"srv/LandGroup.srv"
"srv/Reset.srv"
"srv/SetLocalPosition.srv" DEPENDENCIES std_msgs geometry_msgs geographic_msgs
)

ament_export_dependencies(rosidl_default_runtime)
ament_package()
4 changes: 4 additions & 0 deletions ros2/src/airsim_interfaces/msg/Altimeter.msg
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
std_msgs/Header header
float32 altitude
float32 pressure
float32 qnh
8 changes: 8 additions & 0 deletions ros2/src/airsim_interfaces/msg/CarControls.msg
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
std_msgs/Header header
float32 throttle
float32 brake
float32 steering
bool handbrake
bool manual
int8 manual_gear
bool gear_immediate
8 changes: 8 additions & 0 deletions ros2/src/airsim_interfaces/msg/CarState.msg
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
std_msgs/Header header
geometry_msgs/PoseWithCovariance pose
geometry_msgs/TwistWithCovariance twist
float32 speed
int8 gear
float32 rpm
float32 maxrpm
bool handbrake
8 changes: 8 additions & 0 deletions ros2/src/airsim_interfaces/msg/Environment.msg
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
std_msgs/Header header
geometry_msgs/Vector3 position
geographic_msgs/GeoPoint geo_point
geometry_msgs/Vector3 gravity
float32 air_pressure
float32 temperature
float32 air_density

4 changes: 4 additions & 0 deletions ros2/src/airsim_interfaces/msg/GPSYaw.msg
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
float64 latitude
float64 longitude
float64 altitude
float64 yaw
6 changes: 6 additions & 0 deletions ros2/src/airsim_interfaces/msg/GimbalAngleEulerCmd.msg
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
std_msgs/Header header
string camera_name
string vehicle_name
float64 roll
float64 pitch
float64 yaw
4 changes: 4 additions & 0 deletions ros2/src/airsim_interfaces/msg/GimbalAngleQuatCmd.msg
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
std_msgs/Header header
string camera_name
string vehicle_name
geometry_msgs/Quaternion orientation
1 change: 1 addition & 0 deletions ros2/src/airsim_interfaces/msg/VelCmd.msg
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
geometry_msgs/Twist twist
2 changes: 2 additions & 0 deletions ros2/src/airsim_interfaces/msg/VelCmdGroup.msg
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
airsim_interfaces/VelCmd vel_cmd
string[] vehicle_names
26 changes: 26 additions & 0 deletions ros2/src/airsim_interfaces/package.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?xml version="1.0"?>
<package format="3">
<name>airsim_interfaces</name>
<version>0.1.0</version>
<description>Contains message and service definitions used by the examples.</description>
<maintainer email="a@a.com">AAA</maintainer>
<license>Apache License 2.0</license>

<author email="a@a.com">AAA</author>

<buildtool_depend>ament_cmake</buildtool_depend>

<buildtool_depend>rosidl_default_generators</buildtool_depend>

<depend>std_msgs</depend>
<depend>geometry_msgs</depend>
<depend>geographic_msgs</depend>

<exec_depend>rosidl_default_runtime</exec_depend>

<member_of_group>rosidl_interface_packages</member_of_group>

<export>
<build_type>ament_cmake</build_type>
</export>
</package>
3 changes: 3 additions & 0 deletions ros2/src/airsim_interfaces/srv/Land.srv
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
bool wait_on_last_task
---
bool success
4 changes: 4 additions & 0 deletions ros2/src/airsim_interfaces/srv/LandGroup.srv
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
string[] vehicle_names
bool wait_on_last_task
---
bool success
4 changes: 4 additions & 0 deletions ros2/src/airsim_interfaces/srv/Reset.srv
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# string vehicle_name
bool wait_on_last_task
---
bool success
8 changes: 8 additions & 0 deletions ros2/src/airsim_interfaces/srv/SetGPSPosition.srv
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
float64 latitude
float64 longitude
float64 altitude
float64 yaw
string vehicle_name
---
#Response : return success=true, (if async=false && if setpoint reached before timeout = 30sec) || (if async=true && command sent to autopilot)
bool success
11 changes: 11 additions & 0 deletions ros2/src/airsim_interfaces/srv/SetLocalPosition.srv
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#Request : expects position setpoint via x, y, z
#Request : expects yaw setpoint via yaw (send yaw_valid=true)
float64 x
float64 y
float64 z
float64 yaw
string vehicle_name
---
#Response : success=true - (if async=false && if setpoint reached before timeout = 30sec) || (if async=true)
bool success
string message
3 changes: 3 additions & 0 deletions ros2/src/airsim_interfaces/srv/Takeoff.srv
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
bool wait_on_last_task
---
bool success
4 changes: 4 additions & 0 deletions ros2/src/airsim_interfaces/srv/TakeoffGroup.srv
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
string[] vehicle_names
bool wait_on_last_task
---
bool success
136 changes: 136 additions & 0 deletions ros2/src/airsim_ros_pkgs/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
cmake_minimum_required(VERSION 3.5)
project(airsim_ros_pkgs)

find_package(rclcpp REQUIRED)
find_package(nav_msgs REQUIRED)
find_package(geographic_msgs REQUIRED)
find_package(std_srvs REQUIRED)
find_package(tf2_ros REQUIRED)
find_package(tf2_sensor_msgs REQUIRED)
find_package(rclpy REQUIRED)
find_package(tf2 REQUIRED)
find_package(image_transport REQUIRED)
find_package(geometry_msgs REQUIRED)
find_package(cv_bridge REQUIRED)
find_package(tf2_geometry_msgs REQUIRED)
find_package(sensor_msgs REQUIRED)
find_package(mavros_msgs REQUIRED)
find_package(rosidl_default_generators REQUIRED)
find_package(ament_cmake REQUIRED)
find_package(std_msgs REQUIRED)
find_package(rosidl_typesupport_cpp REQUIRED)
find_package(rosidl_default_runtime REQUIRED)
find_package(airsim_interfaces REQUIRED)
find_package(OpenCV REQUIRED)

set(AIRSIM_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../../)

add_subdirectory("${AIRSIM_ROOT}/cmake/rpclib_wrapper" rpclib_wrapper)
add_subdirectory("${AIRSIM_ROOT}/cmake/AirLib" AirLib)
add_subdirectory("${AIRSIM_ROOT}/cmake/MavLinkCom" MavLinkCom)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_FLAGS "-O3 -Wall -Wextra -Wnoexcept -Wstrict-null-sentinel")
set(CXX_EXP_LIB "-nostdinc++ -I/usr/include/c++/8 -I/usr/include/x86_64-linux-gnu/c++/8 -nodefaultlibs
-l/usr/lib/x86_64-linux-gnu/libc++.so -l/usr/lib/x86_64-linux-gnu/libc++abi.so
-lm -lc -lgcc_s -lgcc
-lstdc++fs -fmax-errors=10")
set(RPC_LIB_INCLUDES " ${AIRSIM_ROOT}/external/rpclib/rpclib-2.3.0/include")
set(RPC_LIB rpc)
message(STATUS "found RPC_LIB_INCLUDES=${RPC_LIB_INCLUDES}")

set(INCLUDE_DIRS include
${AIRSIM_ROOT}/AirLib/deps/eigen3
${AIRSIM_ROOT}/AirLib/include
${RPC_LIB_INCLUDES}
${AIRSIM_ROOT}/MavLinkCom/include
${AIRSIM_ROOT}/MavLinkCom/common_utils
${OpenCV_INCLUDE_DIRS}
)
include_directories(${INCLUDE_DIRS})

add_library(airsim_settings_parser src/airsim_settings_parser.cpp)
target_link_libraries(airsim_settings_parser AirLib)

add_library(pd_position_controller_simple src/pd_position_controller_simple.cpp)
target_link_libraries(pd_position_controller_simple AirLib)
ament_target_dependencies(pd_position_controller_simple
rclcpp
nav_msgs
geometry_msgs
airsim_interfaces
)

add_library(airsim_ros src/airsim_ros_wrapper.cpp)
target_link_libraries(airsim_ros ${OpenCV_LIBS} yaml-cpp AirLib airsim_settings_parser)
ament_target_dependencies(airsim_ros
rclcpp
sensor_msgs
geometry_msgs
nav_msgs
image_transport
tf2_ros
cv_bridge
airsim_interfaces
)

add_executable(airsim_node src/airsim_node.cpp)
target_link_libraries(airsim_node airsim_ros AirLib)
ament_target_dependencies(airsim_node
rclcpp
)

add_executable(pd_position_controller_simple_node
src/pd_position_controller_simple_node.cpp)
target_link_libraries(pd_position_controller_simple_node
pd_position_controller_simple airsim_ros AirLib)
ament_target_dependencies(pd_position_controller_simple_node
rclcpp
)

# rosidl_target_interfaces(airsim_node
# ${PROJECT_NAME} "rosidl_typesupport_cpp")

# rosidl_target_interfaces(pd_position_controller_simple_node
# ${PROJECT_NAME} "rosidl_typesupport_cpp")

install(TARGETS airsim_node pd_position_controller_simple_node
DESTINATION lib/${PROJECT_NAME})

install(TARGETS airsim_ros pd_position_controller_simple
ARCHIVE
DESTINATION lib
LIBRARY
DESTINATION lib)

install(FILES README.md DESTINATION share/${PROJECT_NAME})

install(DIRECTORY launch rviz DESTINATION share/${PROJECT_NAME})



ament_export_dependencies(rclcpp)
ament_export_dependencies(nav_msgs)
ament_export_dependencies(geographic_msgs)
ament_export_dependencies(std_srvs)
ament_export_dependencies(tf2_ros)
ament_export_dependencies(tf2_sensor_msgs)
ament_export_dependencies(rclpy)
ament_export_dependencies(tf2)
ament_export_dependencies(image_transport)
ament_export_dependencies(geometry_msgs)
ament_export_dependencies(cv_bridge)
ament_export_dependencies(tf2_geometry_msgs)
ament_export_dependencies(sensor_msgs)
ament_export_dependencies(mavros_msgs)
ament_export_dependencies(rosidl_default_generators)
ament_export_dependencies(ament_cmake)
ament_export_dependencies(std_msgs)
ament_export_dependencies(rosidl_default_runtime)
ament_export_dependencies(airsim_interfaces)

ament_export_include_directories(${INCLUDE_DIRS})
ament_export_libraries(airsim_settings_parser pd_position_controller_simple
airsim_ros)

ament_package()
3 changes: 3 additions & 0 deletions ros2/src/airsim_ros_pkgs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# airsim_ros_pkgs

This page has moved [here](https://github.com/microsoft/AirSim/blob/master/docs/airsim_ros_pkgs.md).
Loading

0 comments on commit de1c8ae

Please sign in to comment.