Browse Source

add rc error disable mode change

master
zbr3550 5 years ago
parent
commit
5c60e148b5
  1. 5
      ArduCopter/Copter.h
  2. 30
      ArduCopter/UserCode.cpp
  3. 9
      ArduCopter/mode.cpp
  4. 393
      libraries/AP_HAL_ChibiOS/hwdef/zr-v4/README.md
  5. 4
      libraries/AP_HAL_ChibiOS/hwdef/zr-v4/defaults.parm
  6. 4
      libraries/AP_HAL_ChibiOS/hwdef/zr-v4/hwdef-bl.dat
  7. 11
      libraries/AP_HAL_ChibiOS/hwdef/zr-v4/hwdef.dat
  8. BIN
      libraries/AP_HAL_ChibiOS/hwdef/zr-v4/pixhawk4-pinout.jpg
  9. 12
      libraries/RC_Channel/RC_Channel.h
  10. 0
      version_zr.txt
  11. 2
      zr-v4.sh

5
ArduCopter/Copter.h

@ -1004,6 +1004,7 @@ private: @@ -1004,6 +1004,7 @@ private:
// mode.cpp
Mode *mode_from_mode_num(const Mode::Number mode);
void exit_mode(Mode *&old_flightmode, Mode *&new_flightmode);
bool disable_rc_in;// modify by @Brown
public:
void mavlink_delay_cb(); // GCS_Mavlink.cpp
@ -1012,6 +1013,10 @@ public: @@ -1012,6 +1013,10 @@ public:
const char* get_sysid_board_id(void); // modify by @Brown
const char* get_sysid_board_name_and_id(void); // modify by @Binsir
const char* parse_sysid_board_name(void); // modify by @Binsir
bool get_disable_rc_in() const { // modify by @Brown
return disable_rc_in;
}
};
extern Copter copter;

30
ArduCopter/UserCode.cpp

@ -83,18 +83,35 @@ void Copter::userhook_SuperSlowLoop() @@ -83,18 +83,35 @@ void Copter::userhook_SuperSlowLoop()
{
// put your 1Hz code here
static bool before_fly = true;
static bool last_disable_ch = false;
if(motors->armed()){
before_fly = false;
relay.on(3);
// if (control_mode == Mode::Number::AUTO || control_mode == Mode::Number::RTL || control_mode == Mode::Number::LAND){
// rc().set_disable_ch();
// }else{
// rc().set_enable_ch();
// }
if (control_mode == Mode::Number::AUTO || control_mode == Mode::Number::RTL || control_mode == Mode::Number::LAND){
if(abs(channel_roll->get_control_in())>750 || \
abs(channel_pitch->get_control_in())>750 || \
abs(channel_yaw->get_control_in())>750 || \
channel_throttle->get_control_in()<380 || \
channel_throttle->get_control_in()>590 ){
// rc().set_disable_ch();
disable_rc_in = true;
if(last_disable_ch != disable_rc_in){
gcs().send_text(MAV_SEVERITY_INFO,"NOTICE: 注意遥控通道是否在中位");
}
}else{
disable_rc_in = false;
// rc().set_enable_ch();
}
}else{
// rc().set_enable_ch();
disable_rc_in = false;
}
}else{
relay.off(3);
// rc().set_enable_ch();
disable_rc_in = false;
updownStatus =UpDown_TakeOffStart;
mavlink_zr_flying_status_t zr_flying_status_t;
zr_flying_status_t.updown_status = updownStatus;
@ -112,6 +129,9 @@ void Copter::userhook_SuperSlowLoop() @@ -112,6 +129,9 @@ void Copter::userhook_SuperSlowLoop()
}
cacl_volt_pst = 100 - cnt;
battery.reset_remaining(1, cacl_volt_pst);
}
if(last_disable_ch != disable_rc_in){
last_disable_ch = disable_rc_in;
}
}

9
ArduCopter/mode.cpp

@ -192,6 +192,15 @@ bool Copter::set_mode(Mode::Number mode, ModeReason reason) @@ -192,6 +192,15 @@ bool Copter::set_mode(Mode::Number mode, ModeReason reason)
return true;
}
if(get_disable_rc_in() && \
reason == ModeReason::RC_COMMAND ){
if(mode != Mode::Number::RTL){
gcs().send_text(MAV_SEVERITY_WARNING,"切换模式失败,遥控器通道错误");
AP::logger().Write_Error(LogErrorSubsystem::FLIGHT_MODE, LogErrorCode(mode));
return false;
}
}
Mode *new_flightmode = mode_from_mode_num((Mode::Number)mode);
if (new_flightmode == nullptr) {
gcs().send_text(MAV_SEVERITY_WARNING,"没有这个模式");//No such mode

393
libraries/AP_HAL_ChibiOS/hwdef/zr-v4/README.md

@ -0,0 +1,393 @@ @@ -0,0 +1,393 @@
# Pixhawk4 Flight Controller
The Pixhawk4 flight controller is sold by [Holybro](http://www.holybro.com/product/pixhawk-4)
## Features
- STM32F765 microcontroller
- Two IMUs: ICM20689 and BMI055
- MS5611 SPI barometer
- builtin I2C IST8310 magnetometer
- microSD card slot
- 6 UARTs plus USB
- 14 PWM outputs
- Four I2C and two CAN ports
- External Buzzer
- external safety Switch
- voltage monitoring for servo rail and Vcc
- two dedicated power input ports for external power bricks
## Pinout
![Pixhawk4 Board](pixhawk4-pinout.jpg "Pixhawk4")
## UART Mapping
- SERIAL0 -> USB
- SERIAL1 -> UART2 (Telem1)
- SERIAL2 -> UART3 (Telem2)
- SERIAL3 -> UART1 (GPS)
- SERIAL4 -> UART4 (GPS2)
- SERIAL5 -> UART6 (spare)
- SERIAL6 -> UART7 (spare, debug)
The Telem1 and Telem2 ports have RTS/CTS pins, the other UARTs do not
have RTS/CTS.
The UART7 connector is labelled debug, but is available as a general
purpose UART with ArduPilot.
### TELEM1, TELEM2 ports
<table border="1" class="docutils">
<tbody>
<tr>
<th>Pin </th>
<th>Signal </th>
<th>Volt </th>
</tr>
<tr>
<td>1 (red)</td>
<td>VCC</td>
<td>+5V</td>
</tr>
<tr>
<td>2 (blk)</td>
<td>TX (OUT)</td>
<td>+3.3V</td>
</tr>
<tr>
<td>3 (blk)</td>
<td>RX (IN)</td>
<td>+3.3V</td>
</tr>
<tr>
<td>4 (blk)</td>
<td>CTS</td>
<td>+3.3V</td>
</tr>
<tr>
<td>5 (blk)</td>
<td>RTS</td>
<td>+3.3V</td>
</tr>
<tr>
<td>6 (blk)</td>
<td>GND</td>
<td>GND</td>
</tr>
</tbody>
</table>
### GPS port
<table border="1" class="docutils">
<tbody>
<tr>
<th>Pin </th>
<th>Signal </th>
<th>Volt </th>
</tr>
<tr>
<td>1 (red)</td>
<td>VCC</td>
<td>+5V</td>
</tr>
<tr>
<td>2 (blk)</td>
<td>SERIAL3 TX (OUT)</td>
<td>+3.3V</td>
</tr>
<tr>
<td>3 (blk)</td>
<td>SERIAL3 RX (IN)</td>
<td>+3.3V</td>
</tr>
<tr>
<td>4 (blk)</td>
<td>SCL</td>
<td>+3.3 (pullups)</td>
</tr>
<tr>
<td>5 (blk)</td>
<td>SDA</td>
<td>+3.3 (pullups)</td>
</tr>
<tr>
<td>6 (blk)</td>
<td>SafetyButton</td>
<td>+3.3V</td>
</tr>
<tr>
<td>7 (blk)</td>
<td>SafetyLED</td>
<td>+3.3V</td>
</tr>
<tr>
<td>8 (blk)</td>
<td>VDD 3.3 (OUT)</td>
<td>+3.3V</td>
</tr>
<tr>
<td>9 (blk)</td>
<td>Buzzer</td>
<td>+3.3V</td>
</tr>
<tr>
<td>10 (blk)</td>
<td>GND</td>
<td>GND</td>
</tr>
</tbody>
</table>
## RC Input
RC input is configured on the port marked DSM/SBUS RC. This connector
supports all RC protocols. Two cables are available for this port. To
use software binding of Spektrum satellite receivers you need to use
the Spektrum satellite cable.
## PWM Output
The Pixhawk4 supports up to 16 PWM outputs. First first 8 outputs (labelled
"MAIN") are controlled by a dedicated STM32F100 IO controller. These 8
outputs support all PWM output formats, but not DShot.
The remaining 8 outputs (labelled AUX1 to AUX8) are the "auxillary"
outputs. These are directly attached to the STM32F765 and support all
PWM protocols. The first 6 of the auxillary PWM outputs support DShot.
The 8 main PWM outputs are in 3 groups:
- PWM 1 and 2 in group1
- PWM 3 and 4 in group2
- PWM 5, 6, 7 and 8 in group3
The 8 auxillary PWM outputs are in 2 groups:
- PWM 1, 2, 3 and 4 in group1
- PWM 5 and 6 in group2
- PWM 7 and 8 in group3
Channels within the same group need to use the same output rate. If
any channel in a group uses DShot then all channels in the group need
to use DShot.
## Battery Monitoring
The board has two dedicated power monitor ports on 6 pin
connectors. The correct battery setting parameters are dependent on
the type of power brick which is connected.
## Compass
The Pixhawk4 has a builtin IST8310 compass. Due to potential
interference the board is usually used with an external I2C compass as
part of a GPS/Compass combination.
## GPIOs
The 6 PWM ports can be used as GPIOs (relays, buttons, RPM etc). To
use them you need to limit the number of these pins that is used for
PWM by setting the BRD_PWM_COUNT to a number less than 6. For example
if you set BRD_PWM_COUNT to 4 then PWM5 and PWM6 will be available for
use as GPIOs.
The numbering of the GPIOs for PIN variables in ArduPilot is:
- AUX1 50
- AUX2 51
- AUX3 52
- AUX4 53
- AUX5 54
- AUX6 55
## Analog inputs
The Pixhawk4 has 7 analog inputs
- ADC Pin0 -> Battery Voltage
- ADC Pin1 -> Battery Current Sensor
- ADC Pin2 -> Battery Voltage 2
- ADC Pin3 -> Battery Current Sensor 2
- ADC Pin4 -> ADC port pin 2
- ADC Pin14 -> ADC port pin 3
- ADC Pin10 -> ADC 5V Sense
- ADC Pin11 -> ADC 3.3V Sense
- ADC Pin103 -> RSSI voltage monitoring
## I2C Buses
- the internal I2C port is bus 0 in ArduPilot (I2C3 in hardware)
- the port labelled I2CA is bus 3 in ArduPilot (I2C4 in hardware)
- the port labelled I2CB is bus 2 in ArduPilot (I2c2 in hardware)
- the port labelled GPS is bus 1 in ArduPilot (I2c1 in hardware)
### Pinout for I2CA
<table border="1" class="docutils">
<tbody>
<tr>
<th>Pin</th>
<th>Signal</th>
<th>Volt</th>
</tr>
<tr>
<td>1 (red)</td>
<td>VCC</td>
<td>+5V</td>
</tr>
<tr>
<td>2 (blk)</td>
<td>SCL</td>
<td>+3.3 (pullups)</td>
</tr>
<tr>
<td>3 (blk)</td>
<td>SDA</td>
<td>+3.3 (pullups)</td>
</tr>
<tr>
<td>4 (blk)</td>
<td>GND</td>
<td>GND</td>
</tr>
</tbody>
</table>
### Pinout for I2CB+UART
<table border="1" class="docutils">
<tbody>
<tr>
<th>Pin</th>
<th>Signal</th>
<th>Volt</th>
</tr>
<tr>
<td>1 (red)</td>
<td>VCC</td>
<td>+5V</td>
</tr>
<tr>
<td>2 (blk)</td>
<td>SERIAL4 TX (OUT)</td>
<td>+3.3V</td>
</tr>
<tr>
<td>3 (blk)</td>
<td>SERIAL4 RX (IN)</td>
<td>+3.3V</td>
</tr>
<tr>
<td>4 (blk)</td>
<td>SCL</td>
<td>+3.3 (pullups)</td>
</tr>
<tr>
<td>5 (blk)</td>
<td>SDA</td>
<td>+3.3 (pullups)</td>
</tr>
<tr>
<td>6 (blk)</td>
<td>GND</td>
<td>GND</td>
</tr>
</tbody>
</table>
## CAN
The Pixhawk4 has two independent CAN buses, with the following pinouts.
### CAN1&2
<table border="1" class="docutils">
<tbody>
<tr>
<th>Pin</th>
<th>Signal</th>
<th>Volt</th>
</tr>
<tr>
<td>1 (red)</td>
<td>VCC</td>
<td>+5V</td>
</tr>
<tr>
<td>2 (blk)</td>
<td>CAN_H</td>
<td>+12V</td>
</tr>
<tr>
<td>3 (blk)</td>
<td>CAN_L</td>
<td>+12V</td>
</tr>
<tr>
<td>4 (blk)</td>
<td>GND</td>
<td>GND</td>
</tr>
</tbody>
</table>
## Debug
The Pixhawk4 supports SWD debugging on the debug port
<table border="1" class="docutils">
<tbody>
<tr>
<th>Pin </th>
<th>Signal </th>
<th>Volt </th>
</tr>
<tr>
<td>1 (red)</td>
<td>FMU VDD 3.3</td>
<td>+3.3V</td>
</tr>
<tr>
<td>2 (blk)</td>
<td>UART TX Debug (OUT)</td>
<td>+3.3V</td>
</tr>
<tr>
<td>3 (blk)</td>
<td>UART RX Debug (IN)</td>
<td>+3.3V</td>
</tr>
<tr>
<td>4 (blk)</td>
<td>SWDIO</td>
<td>+3.3V</td>
</tr>
<tr>
<td>5 (blk)</td>
<td>SWCLK</td>
<td>+3.3V</td>
</tr>
<tr>
<td>6 (blk)</td>
<td>GND</td>
<td>GND</td>
</tr>
</tbody>
</table>
## Loading Firmware
The board comes pre-installed with an ArduPilot compatible bootloader,
allowing the loading of *.apj firmware files with any ArduPilot
compatible ground station.
## Acknowledgements
Thanks to
[PX4](https://docs.px4.io/en/flight_controller/pixhawk4.html) for
images used under the [CC-BY 4.0 license](https://creativecommons.org/licenses/by/4.0/)

4
libraries/AP_HAL_ChibiOS/hwdef/zr-v4/defaults.parm

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
# Pixhawk4 does not have hw flow control on radios
BRD_SER1_RTSCTS 0
BRD_SER2_RTSCTS 0

4
libraries/AP_HAL_ChibiOS/hwdef/zr-v4/hwdef-bl.dat

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
# hw definition file for processing by chibios_hwdef.py
# for Pixhawk4 bootloader
include ../fmuv5/hwdef-bl.dat

11
libraries/AP_HAL_ChibiOS/hwdef/zr-v4/hwdef.dat

@ -0,0 +1,11 @@ @@ -0,0 +1,11 @@
# hw definition file for processing by chibios_hwdef.py
# for Holybro Pixhawk4 hardware.
include ../fmuv5/hwdef.dat
# setup for supplied power brick
undef HAL_BATT_VOLT_SCALE
define HAL_BATT_VOLT_SCALE 18.182
undef HAL_BATT_CURR_SCALE
define HAL_BATT_CURR_SCALE 36.364

BIN
libraries/AP_HAL_ChibiOS/hwdef/zr-v4/pixhawk4-pinout.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 358 KiB

12
libraries/RC_Channel/RC_Channel.h

@ -347,12 +347,12 @@ public: @@ -347,12 +347,12 @@ public:
return (_enable_ch == (num+1) );
}
// void set_disable_ch() {
// _options = uint32_t(Option::IGNORE_CTRLCHAN);
// }
// void set_enable_ch() {
// _options = 0;
// }
void set_disable_ch() {
_options = uint32_t(Option::IGNORE_CTRLCHAN);
}
void set_enable_ch() {
_options = 0;
}
float override_timeout_ms() const {
return _override_timeout.get() * 1e3f;

0
zr_version → version_zr.txt

2
zr-v4.sh

@ -0,0 +1,2 @@ @@ -0,0 +1,2 @@
./waf configure --board zr-v4
./waf --targets bin/arducopter --upload
Loading…
Cancel
Save