2100年1月1日金曜日

備忘録として

プログラムの備忘録として残しておく.
自分で実際に使ったことだけを記録するので内容は薄いかもしれない.

2023年6月13日火曜日

Emacsインストール時の初期設定

Emacsはインストールしたままでは起動時にごちゃごちゃと説明が出てきてしまうので表示しないようにする.

~/.emacs.d/init.el
に

(setq inhibit-startup-message t)

(setq initial-scratch-message nil)

と記述して保存.

2021年6月10日木曜日

モーションキャプチャFlex13で取得した剛体の位置姿勢をROSで扱いたい

OptiTrackのモーションキャプチャ(MC)「Flex 13」で取得したデータをROSでTopic,TFとして扱いたい.これはFlexシリーズだけではなくPrimeシリーズでも,Motiveを使用している場合は同じ処理を行えば良い.

環境をざっくり.
Windows10 PC(Motive要求スペック)
Ubuntu 18.04 PC (ROS 1 Melodic)

WinでMotiveを使用してMCのデータを取得し,剛体設定している剛体の座標をUbuntuで受け取りROSで扱うことが目標です.と言っても公式が出している情報通りで英語が読めればOK.

今回は
OptiTrack (NatNet) streaming engine with mocap_optitrack ROS package
すなわち,Motiveにデフォルトで用意されている機能を使用して目標を達成する.

WinとUbuntuは同じネットワークに接続する.
通常通りMotiveで撮影環境のキャリブレーションと剛体設定を行う.
View > Assets Pane をクリックし表示されるAssets Paneで剛体の名称を設定する(ここでは1).
View > DataStreaming Pane をクリックし表示されるStreaming Paneでストリーミング情報を設定する.まずはPaneの3点リーダをクリックし,Show Advancedをクリックする.
  • Broadcast Frame Data: On
  • Local Interfaces: Win PCのIPアドレス
  • Labeled Markers: 必要に応じて
  • Unlabeled Markers: 必要に応じて
  • Asset Markers: 必要に応じて
  • Rigid Bodies: On(剛体の情報をストリームする)
  • Skeletons: 必要に応じて
  • Skeleton Coordinates: 必要に応じて
  • Skeleton As Rigid Bodies: 必要に応じて
  • Bone Naming Convention: 必要に応じて
  • Up Axis: Y Up(デフォルトのY UpでROS上ではZ Upで表示される)
  • Remote Trigger: 必要に応じて
  • Transmission Type: Multicast
  • Subject Prefix: 必要に応じて
  • Visual3D Compatible: 必要に応じて
  • Scale: 1
  • Command Port: 1510
  • Data Port: 1511(mocap_optitrackのデフォルトに合わせる)
  • Multicast Interface: 244.0.0.1(mocap_optitrackのデフォルトに合わせる)
  • Multicast as Broadcast: On
  • Soket Size: 1000000
  • VRPN Streaming Engine: Off
  • Trackd Streaming Engine: Off
この設定でLive録画を開始する,またはEDITで再生するとローカルネットワーク上に剛体の位置姿勢がストリーミングされる.

次にROS側の設定を行う.
適当なワークスペースのsrcにで
$ git clone git@github.com:ros-drivers/mocap_optitrack.git
して,ワークスペースをcatkin_makeする.
ワークスペース/src/mocap_optitrack/config/mocap.yamlを編集する.

rigid_bodies: '1': pose: Robot_1/pose pose2d: Robot_1/ground_pose
        odom: Robot_1/Odom
        tf: tf child_frame_id: Robot_1/base_link parent_frame_id: map optitrack_config: multicast_address: 224.0.0.1
        command_port: 1510
        data_port: 1511
        enable_optitrack: true

以上の設定で
$ roslaunch mocap_optitrack mocap.launch
すると.ymalで設定したトピックにそれぞれの情報がPublishされ,
RvizでRobot_1のbase_linkが表示可能になる.

以上.

追記:
MotiveのPropaties->General Settings->Streaming IDが1になっていることを確認する.

2019年9月9日月曜日

ROSでRealsenseを使ってPointCloud型でメッセージを発行する

ROSでRealsenseを使うときに使用するパッケージ,launchファイルをオプションなしで実行するとPointCloud型のtopicが発行されない.
PointCloud型を発行したい場合は

$ roslaunch realsense2_camera rs_camera.launch filters:=pointcloud

これでsensor_msgs/PointCloud2型で
/camera/depth/color/points
が発行される.

…何か処理が重くなった

2019年6月17日月曜日

RealSenseのパッケージをWSでcatkin_makeしようとしたパッケージが無いと怒られた

ROS KineticでRealSenseを使えるようにする.
まずはRealSenseのSDKをインストールする.
https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md
次にROS Wrapperを入れる.
https://github.com/IntelRealSense/realsense-ros

ここでcatkin_makeしようとしたら,
could not find a package configuration file provided by ddynamic_reconfigure
と怒られた.
必要なパッケージがインストールされていないようなので自動でインストールする.
$ cd catkin_ws
$ rosdep install -r --from-path src --ignore-src
するとcatkin_makeが通った.
RVizでも無事にDepthCloudで表示できることを確認.

2019年6月14日金曜日

Raspberry Pi 3 BにMAVROSを入れてPX4と通信する

Raspberry PiにMAVROSをセットアップ.

Ubuntu 16.04を入れる.

ROS Kinetic Kameを入れる.

ここまでこちらのサイトをまんま参考にしている.というかイメージをそのままEtcherしている.

$ sudo apt update
$ sudo apt upgrade

lockが出たらpathが表示されているlockファイルをrmする.
公開鍵の文句が出たらその公開鍵を削除して入れ直す
$ sudo apt-key del 表示された公開鍵のID
$ 入れ直す.

USBを使えるようにしておく.

$ sudo gpasswd -a USER_NAME dialout

$ sudo reboot

MAVROSを入れる.

$ sudo apt install ros-kinetic-mavros ros-kinetic-mavros-extras

MAVROSの付属品を入れる.


$ wget https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh ./install_geographiclib_datasets.sh

$ sudo chmod +x install_geographiclib_datasets.sh

$ sudo ./install_geographiclib_datasets.sh

MeijoDroneを入れる.

$ git clone https://github.com/MeijoDrone/MeijoDrone.git

$ cd MeijoDrone/sip_mavros_ws

掃除.

$ rm -r devel
$ rm -r build

Makeする.

$ catkin_make

.shに権限を与える.

$ sudo chmod +x runPX4Manager.sh

PX4を繋いだら早速動かす.

$ ./runPX4Manager.sh /dev/ttyACM0

2019年6月13日木曜日

apt updateで公開鍵がないですよと怒られた

Ubuntu16.04にROS Kineticをインストールしているが,apt updateしようとしたら以下のエラーが出た.

the following signatures couldn't be verified because the public key is not available: NO_PUBKEY F42ED6FBAB17C654

公開鍵が悪さをしているようなので一旦公開鍵を削除して
$ sudo apt-key del F42ED6FBAB17C654
改めて公開鍵を登録した.
$ sudo apt-key adv --keyserver 'hkp://ha.pool.sks-keyservers.net:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

これでapt updateが通った.

2019年6月12日水曜日

【実行途中】ROS@UbuntuとWindowsで通信する

まずは下調べ.
こんな質問を発見
「RosSharpでwindowsとlinuxのRos通信を行いたい」
RosSharp?それは知らなかった.ということで
RosSharp Documentation (Japanese)
やりたいことはTopicのPublishとSubscribeだけなのでこれでなんとかなりそう?
問題はWindowsがXPだということ(ソフトの問題).
ならばシリアル通信で解決してみる?幸いROSにはシリアル通信のパッケージがあるし.

TCP通信というパターンも
Windows-Linux間をTCPで通信する

ソケット通信
【開発メモ~C言語でLinuxサーバーとWindowsクライアントでソケット通信してみた~】

【実行途中】RealSense D415をROS2 Crystal @ Ubuntu18.04で動かしたい

まずはROS2関係なしにRealSenseの映像をViewerで見れるようにする.
https://github.com/IntelRealSense/librealsense/blob/ros2debian/doc/distriution_linux.md
に書いてある通りに進める.こっちを先にやっておかないと-lrealsense2が無いと喚かれる.

次にhttps://github.com/intel/ros2_intel_realsense
の通りに進める.

ros2 run realsense_ros2_camera realsense_ros2_camera
を実行したところ
An exception has been thrown: API version mismatch: librealsense.so was compiled with API version 2.21.0 but the application was compiled with 2.16.5! Makesure correct version of the library is installed.
と怒られた.

2019年1月29日火曜日

ROSでTF_OLD_DATAのエラーが出た

ROSでTF_OLD_DATAのエラーが出た.見てるとROS::TIMEが更新されていないように見える.まず原因として考えられるのはuse_sim_timeがtrueになっていること.しかし,そんなの一旦全部殺せば解決する.

今回の原因はubuntuをapt upgradeしたときにROS関連が更新されて,make済みのプログラム中の時間読み取りができなくなっていたようだ.すべてのワークスペースをcatkin_makeで解決.

2018年12月22日土曜日

gnuplotで対数表示する

GNUPlotで対数表示する.

$ set logscale x 10

10は対数の基数で10に設定するのであれば省略して良い.

2018年12月4日火曜日

USB無線LAN子機をUbuntuで使用する

ELECOMのWDC-433DU2HBKをUbuntu16.04で使用する.

~$ wget https://github.com/gnab/rtl8812au/archive/master.zip
~$ unzip master.zip
~$ cd rtl8812au-master

~/rtl8812au-master$ sudo make
~/rtl8812au-master$ sudo make install

で再起動.

2018年3月21日水曜日

ubuntu上でgithubしてみる

github.comでリポジトリを作って,リポジトリをubuntu上にcloneして新しいディレクトリをpushするという流れ.

gitのインストール
$ sudo apt-get install git

githubのユーザ名・アドレスを設定
$ git config --global user.name "username"
$ git config --global user.email user@email.com

sshの公開鍵
$ ssh-keygen -t rsa -C "user@email.com"
return returnでパスワード設定
~/.ssh/id_rsa.pubに公開鍵ができる.中身をまるっとコピーしてブラウザからgithub.comでsetting>SSH and GPG keys,[New SSH key]でペースト.

次に予め作ってあったリポジトリをclone
$ git clone https://github.com/Organization/Repository 
現在のディレクトリにRepositoryがクローンされる.

$ cp -r made-dir Repository
$ cd Repository
$ git add made-dir
$ git commit -m 'any comment'
$ git push

これでgithub上にディレクトリを追加完了.

2018年3月19日月曜日

Gigabyte Brixをヘッドレス化(モニター無し運用)

Ubuntu16.04を載せたGigabyte Brixをヘッドレス化する.大抵の場合,引っかかるのはモニターを接続していないとログインまでたどりつけない問題.これはXwindowがモニターを探しに行って見つからずに起動できないということなのだが,Biosによっては起動にモニターなしで起動ができるようだ.今回はvncserverで仮想モニターを用意して起動するという内容(のはず).ヘッドレスで起動した後,そのままssh接続可能で,移動した後にモニターを接続しても正しく表示される.やったことだけつらつらと書いていく.
参考<https://askubuntu.com/questions/621313/vnc-server-for-headless-ubuntu-14-04>

$sudo apt-get update && sudo apt-get upgrade
$sudo apt-get install gnome-core xfce4 vnc4server
$sudo adduser user1
$su - user1
$vncserver
$emacs /home/user1/.vnc/xstartup
#!/bin/sh                                                                                                                                                                                                          

# Uncomment the following two lines for normal desktop:                                                                                                                                                            
# unset SESSION_MANAGER                                                                                                                                                                                            
# exec /etc/X11/xinit/xinitrc                                                                                                                                                                                      

[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
x-window-manager &
$sudo emacs /etc/init.d/vncserver
#!/bin/bash                                                                                                                                                                                                        

unset VNCSERVERARGS
VNCSERVERS=""
[ -f /etc/vncserver/vncservers.conf ] && . /etc/vncserver/vncservers.conf
prog=$"VNC server"
start() {
 . /lib/lsb/init-functions
REQ_USER=$2
echo -n $"Starting $prog: "
ulimit -S -c 0 >/dev/null 2>&1
RETVAL=0
for display in ${VNCSERVERS}
do
export USER="${display##*:}"
if test -z "${REQ_USER}" -o "${REQ_USER}" == ${USER} ; then
echo -n "${display} "
unset BASH_ENV ENV
DISP="${display%%:*}"
export VNCUSERARGS="${VNCSERVERARGS[${DISP}]}"
su ${USER} -c "cd ~${USER} && [ -f .vnc/passwd ] && vncserver :${DISP} ${VNCUSERARGS}"
fi
done
}
stop() {
. /lib/lsb/init-functions
REQ_USER=$2
echo -n $"Shutting down VNCServer: "
for display in ${VNCSERVERS}
do
export USER="${display##*:}"
if test -z "${REQ_USER}" -o "${REQ_USER}" == ${USER} ; then
echo -n "${display} "
unset BASH_ENV ENV
export USER="${display##*:}"
su ${USER} -c "vncserver -kill :${display%%:*}" >/dev/null 2>&1
fi
done
echo -e "\n"

echo "VNCServer Stopped"

}
case "$1" in
start)
start $@
;;
stop)
stop $@
;;
restart|reload)
stop $@
sleep 3
start $@
;;
condrestart)
if [ -f /var/lock/subsys/vncserver ]; then
stop $@
sleep 3
start $@
fi
;;
status)
status Xvnc
;;
*)
echo $"Usage: $0 {start|stop|restart|condrestart|status}"
exit 1
esac
$chmod +x /etc/init.d/vncserver
$sudo mkdir -p /etc/vncserver
$sudo vim /etc/vncserver/vncservers.conf
VNCSERVERS="1:user1"
VNCSERVERARGS[1]="-geometry 1024x768"

$sudo reboot

2018年3月1日木曜日

Robomechへの論文投稿でセキュリティだの文書構造の圧縮を解除せよなど引っかかる

TeXShop on MacでPDF出力したものがRobomechへ投稿できない.去年もやった.1年前のことですっかり忘れていた.特殊なソフトを使わずにできたはずなのにな,と思い起こす.

【結論】
プレビューで
ファイル>書き出す>フォーマットはPDFでQuartzフィルタかけない.

【補足】
PDFとして書き出すを使うと何故かファイルサイズがかなり大きくなる→Robomechのファイル制限(2MB)を超える.かといってQuartzフィルタでサイズダウンすると図が見れたもんじゃない.

2018年1月5日金曜日

Macのデータ容量が切迫→オートセーブデータを削除

MacBook Proを使っていてデータ容量が切迫してきたなと思い,DiskWave.appをインストールしてどのディレクトリが容量を喰っているのか確認したのだけれど,全体の使用済み容量と各ディレクトリの使用済み容量が食い違っている(全体の方が大きい).そんな時に怪しいのがMacのオートセーブ機能.強制シャットダウンした時に残るセーブデータのことで,ありがたいのだけれど正常に終了した後には不要になるもの.強制終了を頻繁にしていると知らないうちに100GBまでいってたりする…(VMwareの不具合でMacのuserログイン時にキーボードが効かなくなって強制終了することが多々あった…)

ということで削除しましょう(あくまで自己責任で).

$ sudo rm -r /.DocumentRevisions-V100/.cs

2017年10月24日火曜日

gnuplotで.pltファイルを読み込み自動出力するサンプル

output.txtからデータ出力するサンプルです.

$> file = 'output'
$> output = 1
$> load "plotter.plt"

  • グラフの大きさをmarginで指定する
  • 軸ラベルをつける
  • グリッドを表示する
  • 凡例を移動させる
  • 線のスタイルを変更する
  • multiplotによって1つの図に2つのグラフを表示する
  • if文処理により,変数output=1にセットした時のみ.epsファイルを出力する
  • 参照ファイル名を用いて出力ファイルを作成する
等の内容を含みます.

plotter.pltの中身は以下の通りです.

# plotter.plt

set terminal wxt 0
reset
set lmargin 9
set rmargin 2
set xlabel "Time [sec]"
set ylabel "Position [m]"
set grid
set key left bottom
p [:][-2.5:2.5] file.".txt" u ($1):($4) w l lw 4 lc 2 title "Measured X", "" u ($1):($2) w l lw 3 lc 3 title "Desired X"

if(exist("output")&& output == 1)\
set terminal postscript eps color enhanced "Arial,20";\
set output file."_X.eps";\
p [:][-2.5:2.5] file.".txt" u ($1):($4) w l lw 4 lc 2 title "Measured X", "" u ($1):($2) w l lw 3 lc 3 title "Desired X";\

set terminal wxt 1
set key left bottom
p [:][-2.5:2.5] file.".txt" u ($1):($5) w l lw 4 lc 2 title "Measured Y", "" u ($1):($3) w l lw 3 lc 3 title "Desired Y"

if(exist("output")&& output == 1)\
set terminal postscript eps color enhanced "Arial,20";\
set output file."_Y.eps";\
p [:][-2.5:2.5] file.".txt" u ($1):($5) w l lw 4 lc 2 title "Measured Y", "" u ($1):($3) w l lw 3 lc 3 title "Desired Y";\

set terminal wxt 2
set multiplot layout 2,1
unset xlabel
set format x ""
set key left bottom
set tmargin screen 0.99
set bmargin screen 0.585
p [:][-2.5:2.5] file.".txt" u ($1):($4) w l lw 4 lc 2 title "Measured X", "" u ($1):($2) w l lw 3 lc 3 title "Desired X"
set format x
set xlabel "Time [sec]"
set key left bottom
set tmargin screen 0.535
set bmargin screen 0.13
p [:][-2.5:2.5] file.".txt" u ($1):($5) w l lw 4 lc 2 title "Measured Y", "" u ($1):($3) w l lw 3 lc 3 title "Desired Y"
unset multiplot

if(exist("output")&& output == 1)\
set terminal postscript eps color enhanced "Arial,20";\
set output file."_Layout.eps";\
set multiplot layout 2,1;\
unset xlabel;\
set format x "";\
set key left bottom;\
set tmargin screen 0.99;\
set bmargin screen 0.585;\
p [:][-2.5:2.5] file.".txt" u ($1):($4) w l lw 4 lc 2 title "Measured X", "" u ($1):($2) w l lw 3 lc 3 title "Desired X";\
set format x;\
set xlabel "Time [sec]";\
set key left bottom;\
set tmargin screen 0.535;\
set bmargin screen 0.13;\
p [:][-2.5:2.5] file.".txt" u ($1):($5) w l lw 4 lc 2 title "Measured Y", "" u ($1):($3) w l lw 3 lc 3 title "Desired Y";\
unset multiplot;\

undefine output
set terminal wxt 0

2017年6月23日金曜日

ROSのtopicを他のPCからRVizで確認したくて2台のPCでを接続する

表題の通りROSを2台のPCで走らせてトピックをやり取りします(正しくは1台のPC上で走っているroscoreに他が接続する).何故やろうと思ったかというとロボットに組み込んだPCでSLAMを走らせているのだけれどリアルタイムでMAPの様子を確認したいから(ssh -Xでやっても良いのだけれどいかんせん重たくなる).ですのでロボット側がマスターとします.

ロボットPC
$ export ROS_HOSTNAME=robot_ip_adress
$ export ROS_MASTER_URI=http://robot_ip_adress:11311
$ roscore
これどうやら全てのターミナルでやる必要があるので~/.bashrcに
$ export ROS_HOSTNAME=robot_ip_adress
$ export ROS_MASTER_URI=http://robot_ip_adress:11311
の二行を最下部に書いてしまいましょう.

次に観測用のPC
$ export ROS_HOSTNAME=observer_ip_adress
$ export ROS_MASTER_URI=http://robot_ip_adress:11311
$ rosrun rviz rviz

これでO.K.

2017年6月18日日曜日

ヘッドレスでUbuntuを起動

ヘッドレス(ディスプレイ接続なし)でUbuntuを起動する.使用PCはZOTACのZBoxです.GPUはNvidia.通常の設定ではディスプレイを探しに行って見つからないずにOSが起動しないという状態になります.ディスプレイがなくても起動することを許可すればOK.

$ sudo nvidia-xconfig --allow-empty-initial-configuration

2017年6月13日火曜日

学内(社内)ネットワークからgitできない

githubからsubmoduleでcloneするときにconnectionがないと怒られる.

fatal: unable to connect to github.com:

原因は学内ネットワークのファイアウォールが強すぎるから

git://~

を弾いてしまっている.ということで「git://」を「https://」に書き換える.

git config --global url."https://".insteadOf git://