Compare commits

...

10 Commits

Author SHA1 Message Date
sfalexrog
c589235984 Merge remote-tracking branch 'origin/master' into nti2019 2019-04-08 23:30:51 +03:00
Oleg Kalachev
8bb3f751ca Set correct camera frame by default for nti 2019-04-08 20:34:58 +03:00
Oleg Kalachev
d4ab87ad9e docs: small fix for markdownlint 2019-04-08 20:34:54 +03:00
Oleg Kalachev
f90c1a6329 Change some default for NTI 2019 2019-04-08 17:23:52 +03:00
Oleg Kalachev
c63e4265d6 aruco_map: add nti_novgorod map 2019-04-08 17:22:14 +03:00
Oleg Kalachev
60c97d2318 Merge branch 'master' into nti2019 2019-04-08 17:21:11 +03:00
sfalexrog
8dec500702 builder: Add ros_ws281x package 2019-04-07 17:50:31 +03:00
sfalexrog
09a8f702a7 docs: Add note about LED strip 2019-04-06 23:57:21 +03:00
sfalexrog
bcefb03f04 builder: Install paho-mqtt system-wide 2019-04-06 23:23:04 +03:00
sfalexrog
bc1ceb2fa0 Add annotated MQTT sample 2019-04-06 23:20:35 +03:00
11 changed files with 95 additions and 12 deletions

View File

@@ -0,0 +1,6 @@
34 0.33 0 0 0 0 0 0
37 0.33 0.74 0 0 0 0 0
25 0.33 0 0.54 0 0 0 0
28 0.33 0.74 0.54 0 0 0 0
32 0.33 2.79 -0.15 1.20 0 0 0
29 0.33 2.46 0.65 1.20 0 0 0

View File

@@ -0,0 +1,14 @@
[Unit]
Description=ROS ws281x support
Requires=roscore.service
After=roscore.service
[Service]
EnvironmentFile=/lib/systemd/system/roscore.env
ExecStart=/opt/ros/kinetic/bin/roslaunch ros_ws281x clever4.launch --wait --screen
Restart=on-failure
RestartSec=3
TimeoutSec=infinity
[Install]
WantedBy=multi-user.target

View File

@@ -112,6 +112,7 @@ ${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/ros_pyt
# ${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/kinetic-ros-clever.rosinstall' '/home/pi/ros_catkin_ws/'
# Add PX4 udev rules
${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/99-px4fmu.rules' '/lib/udev/rules.d/'
${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/rosled.service' '/lib/systemd/system/'
# Add rename script
${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/clever_rename' '/usr/local/bin/clever_rename'
${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} exec ${SCRIPTS_DIR}'/image-ros.sh' ${REPO_URL} ${IMAGE_VERSION} false false ${NUMBER_THREADS}

View File

@@ -137,6 +137,10 @@ fi
export ROS_IP='127.0.0.1' # needed for running tests
echo_stamp "Adding ros_ws281x ROS package"
cd /home/pi/catkin_ws/src
git clone https://github.com/sfalexrog/ros_ws281x
echo_stamp "Installing CLEVER" \
&& cd /home/pi/catkin_ws/src/clever \
&& git status \
@@ -145,7 +149,7 @@ echo_stamp "Installing CLEVER" \
&& my_travis_retry pip install wheel \
&& my_travis_retry pip install -r /home/pi/catkin_ws/src/clever/clever/requirements.txt \
&& source /opt/ros/kinetic/setup.bash \
&& catkin_make -j2 -DCMAKE_BUILD_TYPE=Release \
&& catkin_make -j2 -DCMAKE_BUILD_TYPE=Release -DROS_WS2811_REAL_LIB=ON \
&& catkin_make run_tests \
&& catkin_test_results \
&& systemctl enable roscore \
@@ -153,6 +157,9 @@ echo_stamp "Installing CLEVER" \
&& echo_stamp "All CLEVER was installed!" "SUCCESS" \
|| (echo_stamp "CLEVER installation was failed!" "ERROR"; exit 1)
echo_stamp "Enabling ROS LED service"
systemctl enable rosled
echo_stamp "Build CLEVER documentation"
cd /home/pi/catkin_ws/src/clever
NPM_CONFIG_UNSAFE_PERM=true npm install gitbook-cli -g

View File

@@ -139,6 +139,9 @@ mv /etc/monkey/sites/default /etc/monkey/sites/default.orig
mv /root/monkey /etc/monkey/sites/default
systemctl enable monkey.service
echo_stamp "Install paho-mqtt"
my_travis_retry pip install paho-mqtt
echo_stamp "Install Node.js"
cd /home/pi
wget https://nodejs.org/dist/v10.15.0/node-v10.15.0-linux-armv6l.tar.gz

View File

@@ -46,3 +46,4 @@ rosversion rosserial
rosversion usb_cam
rosversion cv_camera
rosversion web_video_server
rosversion ros_ws281x

View File

@@ -1,7 +1,7 @@
<launch>
<arg name="aruco_detect" default="true"/>
<arg name="aruco_map" default="false"/>
<arg name="aruco_vpe" default="false"/>
<arg name="aruco_map" default="true"/>
<arg name="aruco_vpe" default="true"/>
<!-- For additional help go to https://clever.copterexpress.com/aruco.html -->

View File

@@ -5,10 +5,10 @@
<arg name="web_video_server" default="true"/>
<arg name="rosbridge" default="true"/>
<arg name="main_camera" default="true"/>
<arg name="optical_flow" default="false"/>
<arg name="aruco" default="false"/>
<arg name="rc" default="true"/>
<arg name="rangefinder_vl53l1x" default="false"/>
<arg name="optical_flow" default="true"/>
<arg name="aruco" default="true"/>
<arg name="rc" default="false"/>
<arg name="rangefinder_vl53l1x" default="true"/>
<arg name="arduino" default="false"/>
<!-- mavros -->

View File

@@ -5,10 +5,10 @@
<!-- article about camera setup: https://clever.copterexpress.com/camera_frame.html -->
<!-- camera is oriented downward, camera cable goes backward [option 1] -->
<node pkg="tf2_ros" type="static_transform_publisher" name="main_camera_frame" args="0.05 0 -0.07 -1.5707963 0 3.1415926 base_link main_camera_optical"/>
<!-- <node pkg="tf2_ros" type="static_transform_publisher" name="main_camera_frame" args="0.05 0 -0.07 -1.5707963 0 3.1415926 base_link main_camera_optical"/> -->
<!-- camera is oriented downward, camera cable goes forward [option 2] -->
<!--<node pkg="tf2_ros" type="static_transform_publisher" name="main_camera_frame" args="0.05 0 -0.07 1.5707963 0 3.1415926 base_link main_camera_optical"/>-->
<node pkg="tf2_ros" type="static_transform_publisher" name="main_camera_frame" args="-0.04 0 -0.08 1.5707963 0 3.1415926 base_link main_camera_optical"/>
<!-- camera is oriented upward, camera cable goes backward [option 3] -->
<!--<node pkg="tf2_ros" type="static_transform_publisher" name="main_camera_frame" args="0.05 0 0.07 1.5707963 0 0 base_link main_camera_optical"/>-->

View File

@@ -55,6 +55,47 @@ hbmqtt_pub --url mqtt://192.168.0.1:1883 -t /copters/copter1 -m 'сообщен
Где `192.168.0.1` IP-адрес MQTT-брокера, `сообщение` – сообщение для публикации, `/copters/copter1` необходимый топик для публикации.
### Работа с MQTT
В образе Клевера предустановлена библиотека `paho-mqtt` для Python. Пример работы с этой библиотекой описан ниже:
```python
import paho.mqtt.client as mqtt # Импортирование библиотеки mqtt
# Callback, вызываемый при получении от сервера подтверждения о подключении
def on_connect(client, userdata, flags, rc):
print ("Connected with result code "+str(rc))
# Если подписываться на топик в on_connect, то при обрыве соединения
# и повторном подключении произойдёт автоматическое переподписание
client.subscribe("/copters/copter1")
# Callback, вызываемый при появлении сообщения в одном из топиков, на который
# подписан клиент
def on_message(client, userdata, msg):
# В объекте msg хранится топик, в который пришло сообщение (в поле topic)
# и само сообщение (в поле payload)
print (msg.topic+" "+str(msg.payload))
# Инициализация клиента MQTT
client = mqtt.Client()
# Здесь указываются callback'и, вызываемые при подключении и получении сообщения
client.on_connect = on_connect
client.on_message = on_message
# Подключение к MQTT-брокеру. Первый параметр - имя или адрес брокера, второй - порт
# (по умолчанию 1883), третий - максимальное время между сообщениями в секундах
# (по умолчанию 60).
client.connect("192.168.11.162", 1883, 60)
# Метод loop_start создаёт поток, в котором будет производиться опрос сервера и
# вызов callback'ов.
client.loop_start()
# Далее продолжается ваша программа
```
Более подробная документация доступна на [странице библиотеки в PyPI](https://pypi.org/project/paho-mqtt/).
## Работа с Клевером
Для выполнения команд на Клевере:
@@ -97,6 +138,8 @@ rospy.sleep(5)
land()
```
Для более подробной информации и описания других команд смотрите [API simple_offboard](simple_offboard.md) и [примеры кода](snippets.md).
Пример взлета на высоту 1 метр из командной строки:
```bash
@@ -104,3 +147,11 @@ rosservice call /navigate "{x: 0.0, y: 0.0, z: 2, yaw: 0.0, yaw_rate: 0.0, speed
```
Для более подробной информации и описания других команд смотрите [API simple_offboard](simple_offboard.md) и [примеры кода](snippets.md).
### Работа со светодиодной лентой
В используемой версии Клевера LED-лента подключена напрямую к Raspberry Pi. При включении всех светодиодов ленты на полную мощность возможно повреждение цепей питания микрокомпьютера.
Сигнальный провод ленты подключен к GPIO-пину 18.
Подробнее про работу с LED-лентой можно прочитать [в соответствующей статье](leds.md)

View File

@@ -784,21 +784,21 @@
### Теория FPV полетов
**1. Какой стик является основным для позиционирования при FPV полетах? **
**1. Какой стик является основным для позиционирования при FPV полетах?**
1. Roll
2. Pitch
3. Yaw
4. Throttle
**2. Каким стиком удерживается высота? **
**2. Каким стиком удерживается высота?**
1. Roll
2. Pitch
3. Yaw
4. Throttle
**3. Что такое FPV пилотирование? **
**3. Что такое FPV пилотирование?**
1. Полеты с ориентацией “от первого лица”
2. Полеты с грузом