diff --git a/Makefile b/Makefile index d9b3f6b80182108c56abec3b04ff47a2178cdcf3..27eb42e9a8a85d06be51c525ae374d9915b5ac6a 100644 --- a/Makefile +++ b/Makefile @@ -205,6 +205,9 @@ posix_rpi2_default: posix_rpi2_release: $(call cmake-build,$@) +posix_bebop_default: + $(call cmake-build,$@) + posix: posix_sitl_default broadcast: posix_sitl_broadcast diff --git a/Tools/adb_upload_to_bebop.sh b/Tools/adb_upload_to_bebop.sh new file mode 100755 index 0000000000000000000000000000000000000000..64e87b6712c577846a3e8574558aeda8e152b064 --- /dev/null +++ b/Tools/adb_upload_to_bebop.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +ip=192.168.42.1 +port=9050 + +echo "Connecting to bebop: $ip:$port" + +# adb returns also 0 as exit status if the connection fails +adb_return=$(adb connect $ip:$port) +adb_status=$(echo $adb_return | cut -f 1 -d " ") + +if [[ $adb_status == "unable" ]]; then + + echo "" + echo "Connection with Parrot Bebop could not be established:" + echo " Make sure you are connected with the Bebop's WiFi and" + echo " enable access to the board by pressing the power button 4 times." + echo "" + exit 50 + +fi + +echo "Connection successfully established" + +sleep 1 + +adb shell mount -o remount,rw / + +../Tools/adb_upload.sh $@ + +echo "Disconnecting from bebop" +adb disconnect diff --git a/cmake/common/px4_base.cmake b/cmake/common/px4_base.cmake index 210dcbcdf86b9eb66961f93d22c70cdd40e1e3c9..1b721b14010e3a8a2e9cd442d612c79bb210347e 100644 --- a/cmake/common/px4_base.cmake +++ b/cmake/common/px4_base.cmake @@ -528,6 +528,24 @@ function(px4_add_adb_push) ) endfunction() +function(px4_add_adb_push_to_bebop) + px4_parse_function_args( + NAME px4_add_upload_to_bebop + ONE_VALUE OS BOARD OUT DEST + MULTI_VALUE FILES DEPENDS + REQUIRED OS BOARD OUT FILES DEPENDS DEST + ARGN ${ARGN}) + + add_custom_target(${OUT} + COMMAND ${CMAKE_SOURCE_DIR}/Tools/adb_upload_to_bebop.sh ${FILES} ${DEST} + DEPENDS ${DEPENDS} + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMENT "uploading ${BUNDLE}" + VERBATIM + USES_TERMINAL + ) +endfunction() + function(px4_add_scp_push) px4_parse_function_args( NAME px4_add_upload diff --git a/cmake/configs/posix_bebop_default.cmake b/cmake/configs/posix_bebop_default.cmake new file mode 100644 index 0000000000000000000000000000000000000000..fdb1d3eb8ca4910631f8dc1be8ccc2904e45bf14 --- /dev/null +++ b/cmake/configs/posix_bebop_default.cmake @@ -0,0 +1,96 @@ +include(posix/px4_impl_posix) + +set(CMAKE_TOOLCHAIN_FILE ${CMAKE_SOURCE_DIR}/cmake/toolchains/Toolchain-arm-linux-gnueabihf-raspbian.cmake) + +add_definitions( + -D__PX4_POSIX_BEBOP + ) + +set(CMAKE_PROGRAM_PATH + "${RPI_TOOLCHAIN_DIR}/gcc-linaro-arm-linux-gnueabihf-raspbian/bin" + ${CMAKE_PROGRAM_PATH} + ) + +set(config_module_list + + examples/px4_simple_app + + # + # Board support modules + # + drivers/device + modules/sensors + + # + # System commands + # + systemcmds/param + systemcmds/mixer + systemcmds/ver + systemcmds/esc_calib + systemcmds/topic_listener + systemcmds/perf + + # + # Estimation modules (EKF/ SO3 / other filters) + # + #modules/attitude_estimator_ekf + modules/ekf_att_pos_estimator + modules/attitude_estimator_q + modules/position_estimator_inav + modules/local_position_estimator + modules/ekf2 + + # + # Vehicle Control + # + modules/mc_att_control + modules/mc_pos_control + modules/fw_att_control + modules/fw_pos_control_l1 + modules/vtol_att_control + + # + # Library modules + # + modules/sdlog2 + modules/logger + modules/commander + modules/load_mon + modules/param + modules/systemlib + modules/systemlib/mixer + modules/uORB + modules/dataman + modules/land_detector + modules/navigator + modules/mavlink + + # + # PX4 drivers + # + + # + # Libraries + # + lib/controllib + lib/mathlib + lib/mathlib/math/filter + lib/geo + lib/ecl + lib/geo_lookup + lib/launchdetection + lib/external_lgpl + lib/conversion + lib/terrain_estimation + lib/runway_takeoff + lib/tailsitter_recovery + lib/DriverFramework/framework + + # + # POSIX + # + platforms/common + platforms/posix/px4_layer + platforms/posix/work_queue +) diff --git a/cmake/posix/px4_impl_posix.cmake b/cmake/posix/px4_impl_posix.cmake index 51afab20de2b135f305584c03adad69b0a2529ce..d661bfa5ebe69050a00f3bb4390cbc8777c0c2a5 100644 --- a/cmake/posix/px4_impl_posix.cmake +++ b/cmake/posix/px4_impl_posix.cmake @@ -166,6 +166,15 @@ function(px4_os_add_flags) mavlink/include/mavlink ) +# Use the pthread instead of lpthread if the firmware is build for the parrot +# bebop. This resolves some linker errors in DriverFramework, when building a +# static target. +if ("${BOARD}" STREQUAL "bebop") + set(PX4_PTHREAD_BUILD "-pthread") +else() + set(PX4_PTHREAD_BUILD "-lpthread") +endif() + if(UNIX AND APPLE) set(added_definitions -D__PX4_POSIX @@ -177,7 +186,7 @@ if(UNIX AND APPLE) ) set(added_exe_linker_flags - -lpthread + ${PX4_PTHREAD_BUILD} ) else() @@ -192,7 +201,7 @@ else() ) set(added_exe_linker_flags - -lpthread -lrt + ${PX4_PTHREAD_BUILD} -lrt ) endif() diff --git a/posix-configs/bebop/mainapp.config b/posix-configs/bebop/mainapp.config new file mode 100644 index 0000000000000000000000000000000000000000..bd0cbbf4b760edda16569e85f5a07a2075258e9a --- /dev/null +++ b/posix-configs/bebop/mainapp.config @@ -0,0 +1,15 @@ +uorb start +param set SYS_AUTOSTART 4001 +sleep 1 +param set MAV_TYPE 2 +sensors start +commander start +ekf2 start +land_detector start multicopter +mc_pos_control start +mc_att_control start +mavlink start -u 14556 -r 1000000 +sleep 1 +mavlink stream -u 14556 -s HIGHRES_IMU -r 50 +mavlink stream -u 14556 -s ATTITUDE -r 50 +mavlink boot_complete diff --git a/src/firmware/posix/CMakeLists.txt b/src/firmware/posix/CMakeLists.txt index 7a28919ed84bca4f83ec6224db6b21d0fb18295e..0da29d151f73881a218c2b8b0c5a4ee3acbe4e47 100644 --- a/src/firmware/posix/CMakeLists.txt +++ b/src/firmware/posix/CMakeLists.txt @@ -61,7 +61,42 @@ elseif ("${BOARD}" STREQUAL "rpi2") DEPENDS mainapp DEST /home/pi) +elseif ("${BOARD}" STREQUAL "bebop") + + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -static") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static") + + add_executable(mainapp + ${CMAKE_SOURCE_DIR}/src/platforms/posix/main.cpp + apps.h + ) + + if (NOT APPLE) + target_link_libraries(mainapp + -Wl,--start-group + ${module_libraries} + ${df_driver_libs} + pthread m rt + -Wl,--end-group + ) + else() + target_link_libraries(mainapp + ${module_libraries} + ${df_driver_libs} + pthread m + ) + endif() + + px4_add_adb_push_to_bebop(OUT upload + OS ${OS} + BOARD ${BOARD} + FILES ${CMAKE_CURRENT_BINARY_DIR}/mainapp + ${CMAKE_SOURCE_DIR}/posix-configs/bebop/mainapp.config + DEPENDS mainapp + DEST /usr/bin) + else() + add_executable(mainapp ${CMAKE_SOURCE_DIR}/src/platforms/posix/main.cpp apps.h diff --git a/src/lib/version/version.h b/src/lib/version/version.h index 6767f1b453394241271cae171f02048beed66ab7..4a529f2751694739fd322f275eb3ab8322bc8831 100644 --- a/src/lib/version/version.h +++ b/src/lib/version/version.h @@ -61,6 +61,8 @@ __END_DECLS # define HW_ARCH "LINUXTEST" #elif defined(CONFIG_ARCH_BOARD_RPI2) # define HW_ARCH "LINUXTEST" +#elif defined(CONFIG_ARCH_BOARD_BEBOP) +# define HW_ARCH "LINUXTEST" #else #define HW_ARCH (board_name()) #endif