Open16

Mini Pupperを動かすまで

tiryohtiryoh

組み立て

https://docs.google.com/document/d/1q4jd7tjWgJCH2snnLVrLD2-E3tjsMW_k/edit

上記資料が2021年12月27日現在の最新(MiniPupperDocs[1]よりアクセス)

画像足りないところはフィードバックして追加してもらった

https://a360.co/3CL8zoQ

組み立て資料はアウトラインしかないので3Dデータ見ながらの組み立てスキルも必要

ベータユーザという立ち位置なので受け取ったのは多くのbackerに届くV2より少し古いV1

V1とV2はスピーカーの有無などメイン基板が違うのみでほかは変わらないとのこと

脚注
  1. 2021年12月22日の投稿 https://www.kickstarter.com/projects/336477435/mini-pupper-open-sourceros-robot-dog-kit/posts/3391446 ↩︎

tiryohtiryoh

OSのインストールとサーボのオフセット調整方法

OS

OSはV1基板の場合は「20211201_v1.6.1_MiniPupper_PS4_Ubuntu_20.04.2_Baseline.img.zip」

https://drive.google.com/file/d/1bkQNjKn2gHwSllTT2VaI62u_6uVW4Dzw/view?usp=sharing

V2基板の場合は「20211220_v2.1.3_MiniPupper_V2_PS4_Ubuntu_20.04.2_Baseline.img.zip」

https://drive.google.com/file/d/1DrPihNAwUZ2coHkfRvYOTOGG8gdDFITN/view?usp=sharing

サーボのオフセット調整方法

Image from Gyazo

2021年12月27日現在マニュアルがないためどの角度に合わせるのが正解なのかは不明
(2021年12月22日に確認したところ間もなく資料は公開されるもよう)

Image from Gyazo

とりあえずなんとなく上記の画像の角度に合わせている

https://www.youtube.com/watch?v=oMQS_zwIw40

上記の動画で紹介されているコマンドラインでキャリブレーションするツールは、以下のコミットでGUI版キャリブレーションツールに置き換わっている

https://github.com/mangdangroboticsclub/QuadrupedRobot/commit/d5cdfdd43a3d0f36e56f6abcd7800aef5e4f24ba

tiryohtiryoh

PWM指定用のsysfsファイルへの書き込み権限がないので修正する

sudoをつけて各種スクリプトを実行すればエラーは出ないが、sysfsファイルの権限変更だけで問題はだいたい解決

sudo groupadd gpio && sudo gpasswd -a $(whoami) gpio
sudo tee /etc/udev/rules.d/99-mini-pupper.rules << EOF > /dev/null
SUBSYSTEM=="pwm*", PROGRAM="/bin/sh -c '\
        chown -R root:gpio /sys/class/pwm && chmod -R 770 /sys/class/pwm;\
        chown -R root:gpio /sys/class/pwm/pwmchip0/pwm*/duty_cycle && chmod -R 770 /sys/class/pwm/pwmchip0/pwm*/duty_cycle'"
EOF
sudo udevadm control --reload-rules && sudo udevadm trigger
tiryohtiryoh

/boot/firmware/config.txt内にinclude usercfg.txtが記載されていることを確認しておく。
/boot/firmware/usercfg.txtに以下の内容を記載して、起動時にHDMIモニタを繋がなくてもあとからでもHDMIモニタを認識できるようにしておく。

以下は1080pに設定する例。

hdmi_force_hotplug=1
hdmi_group=0
hdmi_mode=16

パラメータについては以下のページ参照

https://www.raspberrypi.com/documentation/computers/config_txt.html#video-options

yoshi_islandyoshi_island

丁寧に解説いただきありがとうございます。
私の場合「20211220_v2.1.3_MiniPupper_V2_PS4_Ubuntu_20.04.2_Baseline.img」を使った際にwifiが認識しない状態となりました。後述いただいている「でべ(@devemin)さんの資料」に記載の以下の手順によりwifiが使えるようになりましたので、一応共有させていただきます。
----以下「でべ(@devemin)さんの資料」より引用----
●WiFi オンにするには、
/boot/firmware/syscfg.txt
内の
dtoverlay=disable-wifi
をコメントアウト
#dtoverlay=disable-wifi
して reboot

tiryohtiryoh

コメントありがとうございます!
手元のMiniPupperのデータ確認したところコメントアウトしてありましたのでZennへの書き写し忘れだと思います。

tiryohtiryoh

ROSのインストールとMini Pupper用ROSパッケージのインストール(Raspberry Pi)

基本的にはMiniPupperDocsの「SLAM環境セットアップ.docx」に従う(アニメーションGIFが埋め込んであって400MB近くあるファイルなのでダウンロードして閲覧するしかない)

https://docs.google.com/document/d/1cHeII_ApqnWUZ2dS_CEv5bU0LkWQD3wF/edit?usp=sharing&ouid=101092446771758846175&rtpof=true&sd=true

ROSパッケージ

https://drive.google.com/file/d/1gbuvy29hNnS3Ep2o_uR8qAYnFKkr7Dj4/view?usp=sharing

キャリブレーション方法動画

https://drive.google.com/file/d/1rner63iSW-zrAfypJWMRCZN9bkmjI6so/view?usp=sharing

でべ(@devemin)さんの資料

https://drive.google.com/drive/folders/1CY_78yXN4D9TNR4TUK35HWNFU98kU-o9

ROSのインストール

git clone https://github.com/Tiryoh/ros_setup_scripts_ubuntu.git
./ros_setup_scripts_ubuntu/ros-noetic-ros-base-main.sh
cat << "EOF" >> ~/.bashrc
source /opt/ros/noetic/setup.bash
source `catkin locate --shell-verbs`
export MYWLAN0IP=`ip a show $(ip a | grep -o -E ": wl.*:" | sed -e "s/://g    ") | grep -o -E "([0-9]+\.){3}[0-9]+" | head -n1`
export MYETH0IP=`ip a show $(ip a | grep -o -E ": e.*:" | sed -e "s/://g"    ) | grep -o -E "([0-9]+\.){3}[0-9]+" | head -n1`

export ROS_IP=$(echo $MYETH0IP $MYWLAN0IP 127.0.0.1 | cut -d' ' -f1)
export ROS_MASTER_URI=http://$ROS_IP:11311
EOF

ROSパッケージのインストール

touch src/minipupper_ros/champ/champ_gazebo/CATKIN_IGNORE
cd mnpp_ws
rosdep install -r -y -i --from-paths src/minipupper_ros/yocs_velocity_smoother
rosdep install -r -y -i --from-paths src/minipupper_ros/champ/champ_base
rosdep install -r -y -i --skip-keys joint_state_publisher_gui --from-paths src/minipupper_ros/champ/champ_bringup
rosdep install -r -y -i --from-paths src/minipupper_ros/champ_teleop
rosdep install -r -y -i --from-paths src/minipupper_ros/ldlidar
rosdep install -r -y -i --skip-keys gazebo --skip-keys rviz --from-paths src/minipupper_ros/mini_pupper_description
chmod +x src/minipupper_ros/servo_interface/scripts/*.py
chmod +x src/minipupper_ros/ps4_interface/scripts/*
tiryohtiryoh

ds4drvはjoystick.serviceと重複するのでコメントアウト

$ cat src/minipupper_ros/ps4_interface/launch/ps4_interface.launch 
<launch>
	
  	<!-- ds4drv -->
  	<!-- <node name="ds4drv_script_call" pkg="ps4_interface" type="run_ds4drv.sh" output="screen" /> -->

  	<!-- JOY ROS NODE -->
	<node respawn="true" pkg="joy" type="joy_node" name="ps4_joy" >
    	<param name="dev" type="string" value="/dev/input/js0" />
    	<param name="deadzone" value="0.12" />
 	</node>


	<!-- PS4 ROS NODE -->
	<node pkg="ps4_interface" type="ps4_interface.py" name="ps4_interface" output="screen"/>
        <node pkg="ps4_interface" type="pose_controller.py" name="pose_controller" output="screen"/>

</launch>
tiryohtiryoh

ROSでの制御(Raspberry Pi)

robot.serviceの無効化

DualShock4の信号を受け取ってサーボを動かし始めてROSのノードと干渉するので停止する

sudo systemctl stop robot

ps4_interface/scripts/run_ds4drv.shを呼び出さない場合はjoystick.serviceは止めなくて問題ない

ROSパッケージ用キャリブレーション

roslaunch servo_interface calibration.launch

を実行

{'rf1_initial_angle': '87', 'rf2_initial_angle': '125', 'rf3_initial_angle': '123', 'lf1_initial_angle': '96', 'lf2_initial_angle': '60', 'lf3_initial_angle': '65', 'rb1_initial_angle': '94', 'rb2_initial_angle': '130', 'rb3_initial_angle': '130', 'lb1_initial_angle': '85', 'lb2_initial_angle': '53', 'lb3_initial_angle': '55'}

calibration done!

となった。

lb1_initial_angle: '85'
lb2_initial_angle: '53'
lb3_initial_angle: '55'
lf1_initial_angle: '96'
lf2_initial_angle: '60'
lf3_initial_angle: '65'
rb1_initial_angle: '94'
rb2_initial_angle: '130'
rb3_initial_angle: '130'
rf1_initial_angle: '87'
rf2_initial_angle: '125'
rf3_initial_angle: '123'

若干傾いていたので変更

lb1_initial_angle: '85'
lb2_initial_angle: '53'
lb3_initial_angle: '58'
lf1_initial_angle: '102'
lf2_initial_angle: '60'
lf3_initial_angle: '70'
rb1_initial_angle: '94'
rb2_initial_angle: '130'
rb3_initial_angle: '130'
rf1_initial_angle: '87'
rf2_initial_angle: '125'
rf3_initial_angle: '123'

ベースノードを起動+Keyboardから操作

roslaunch mini_pupper bringup.launch
roslaunch champ_teleop teleop.launch

i, j, l, ,長押し して移動

ベースノードを起動+DualShock4から操作

roslaunch mini_pupper bringup.launch
roslaunch ps4_interface ps4_interface.launch

PlayStationボタン+SHAREボタンでペアリング

tiryohtiryoh

ROSでの制御(Raspberry Pi+PC)

地図作成用ROSパッケージの準備(PC)

git clone https://github.com/Tiryoh/docker-mini-pupper-ros.git
cd docker-mini-pupper-ros

Raspberry Piにインストールしたのと同じmnpp_wsを配置する

https://drive.google.com/file/d/1gbuvy29hNnS3Ep2o_uR8qAYnFKkr7Dj4/view?usp=sharing

$ tree -L 2 .
.
├── build.sh
├── Dockerfile
├── launch.sh
├── mnpp_ws
│   └── src
├── README.md
└── save_map.sh

build.shを実行してDockerイメージをビルド

./build.sh

launch.shを実行してDockerコンテナを起動
rockerが必要なのでインストールしておく

https://memoteki.net/archives/4471

./launch.sh

launch.shを実行したあとのDockerコンテナ内で以下を実行

source /opt/ros/noetic/setup.bash
source /ros_ws/install_isolated/setup.bash
cd ~/catkin_ws
catkin init
catkin build

ROS_IPの設定

Rasperry PiでROS_MASTER_URIが設定されていることを確認しておく

echo $ROS_MASTER_URI

同じ値をPCで起動したDockerコンテナ内の~/.bashrcに記載する

export ROS_MASTER_URI=http://192.168.10.128:11311 #ここは環境によって異なるがhttp://000.000.000.000:11311のフォーマットになる

地図作成に必要なROSノードの起動

Raspberry Piで以下を実行(robot.serviceは停止しておく)

# 1つ目のTerminalで
roslaunch mini_pupper bringup.launch
# 2つ目のTerminalで
roslaunch ps4_interface ps4_interface.launch

PCで起動したDockerコンテナ内で以下を実行

roslaunch mini_pupper slam.launch

あとはDualShock4を動かすといい感じに地図ができる

tiryohtiryoh

OAK-D-Liteを使う

このページを参考に進める

https://www.techlife-hacking.com/?p=1197

Raspberry Pi

depthai-coreのインストール

# depthai-core dependencies
sudo apt install libusb-1.0-0-dev

# download and build depthai-core
cd ~/
git clone --recursive https://github.com/luxonis/depthai-core.git
cd depthai-core
cmake -S. -Bbuild -D'BUILD_SHARED_LIBS=ON'
cmake --build build --parallel 4

# update udev rules
echo 'SUBSYSTEM=="usb", ATTRS{idVendor}=="03e7", MODE="0666"' | sudo tee /etc/udev/rules.d/80-movidius.rules
sudo udevadm control --reload-rules && sudo udevadm trigger

depthai-rosのインストール

depthai_bridgeのビルドにリソースがかなり必要なようで-j1 -p1オプションがないとビルドエラーが出てしまった。

cd ~/catkin_ws
wget https://raw.githubusercontent.com/luxonis/depthai-ros/main/underlay.repos
vcs import src < underlay.repos
source /opt/ros/noetic/setup.bash
rosdep install --from-paths src/luxonis --ignore-src -r -y
catkin build -j1 -p1 --cmake-args -D'depthai_DIR=/home/ubuntu/depthai-core/build'
source devel/setup.bash

ビルドエラー詳細

Errors     << depthai_bridge:make /home/ubuntu/catkin_ws/logs/depthai_bridge/build.make.001.log                                                                                                                                 
c++: fatal error: Killed signal terminated program cc1plus                                                                                                                                                                      
compilation terminated.                                                                                                                                                                                                         
make[2]: *** [CMakeFiles/depthai_bridge.dir/build.make:89: CMakeFiles/depthai_bridge.dir/src/ImgDetectionConverter.cpp.o] Error 1                                                                                               
make[2]: *** Waiting for unfinished jobs....                                                                                                                                                                                    
make[1]: *** [CMakeFiles/Makefile2:894: CMakeFiles/depthai_bridge.dir/all] Error 2                                                                                                                                              
make: *** [Makefile:141: all] Error 2  

depthai-rosの起動

roslaunch depthai_examples stereo_inertial_node.launch