バナーを一新しました [徒然日記]
心機一転ブログを再開するにあたって、バナーを一新してみました。
SPRESENSE応援団長(仮)を名乗っているので、それらしいバナーにしてみました。
バナーの中のネコ娘は、Bing Image Creator で「SPRESENSEのキャラクター」というキーワードで生成したものです。元絵はこちら。
なんとなくそれっぽいので気に入っています。このキャラを使ってSPRESENSE解説マンガでも作ってみたいなぁ。
その他、細かいところでレイアウトや背景色など微調整をしてみましたのですが、少しは見やすくなったかな?
ブログ更新のモチベーションが少し上がってきたので、これからは頻度高めにつぶやいていこうと思います。
SPRESENSE応援団長(仮)を名乗っているので、それらしいバナーにしてみました。
バナーの中のネコ娘は、Bing Image Creator で「SPRESENSEのキャラクター」というキーワードで生成したものです。元絵はこちら。
なんとなくそれっぽいので気に入っています。このキャラを使ってSPRESENSE解説マンガでも作ってみたいなぁ。
その他、細かいところでレイアウトや背景色など微調整をしてみましたのですが、少しは見やすくなったかな?
ブログ更新のモチベーションが少し上がってきたので、これからは頻度高めにつぶやいていこうと思います。
ブログをそろそろ再開します [徒然日記]
【備忘録】 micro-ROS の micro_ros_agent と micro-ROS static library の作り方 [ロボット]
micro-ROS の micro_ros_agent と micro-ROS の static library を作ってみたので、その手順を忘れないように記録として残しておきます。基本的には、次のサイトの手順通りです。
環境は、Ubuntu 22.04 LTS で ROS2 のバージョンは humble です。
Teensy with Arduino
Creating custom static micro-ROS library
■ micro_ros_setup の設定
micro_ros_agent と micro-ROS static library をビルドするための micro_ros_setup の環境を設定します。
■ micro_ros_agent のビルド
micro_ros_agent のビルド環境をダウンロードし、ビルドします。
私の環境では、次のエラー出てビルドが失敗してしまいました。
これは次のファイルの47行目と139行目を次のように変更したらビルドが通りました。
$HOME/microros_ws/src/uros/micro-ROS-Agent/micro_ros_agent/src/agent/graph_manager/graph_typesupport.cpp
micro_ros_agent は次のコマンドで起動することができます。
■ micro-ROS static library の環境準備
micro-ROS static library の開発環境をダウンロードします。
ビルドするための設定ファイルを2つ作成します。
それぞれのファイルの設定例を示します。今回はSPRESENSEを前提とした設定ファイルです。
my_custom_colcon.meta
my_custom_toolchain.cmake
$TOOLCHAIN_PREFIX は、".bashrc"の中で定義されています。
.bashrc
micro-ROS static library をビルドします。
ビルドに成功すると、次の場所に static library と必要な include ファイルが生成されます。
firmware/build/libmicroros.a
firmware/include
これでひととおり micro-ROS で開発する環境を整えることができました!
環境は、Ubuntu 22.04 LTS で ROS2 のバージョンは humble です。
Teensy with Arduino
Creating custom static micro-ROS library
■ micro_ros_setup の設定
micro_ros_agent と micro-ROS static library をビルドするための micro_ros_setup の環境を設定します。
# Source the ROS 2 installation source /opt/ros/$ROS_DISTRO/setup.bash # Create a workspace and download the micro-ROS tools mkdir microros_ws cd microros_ws git clone -b $ROS_DISTRO https://github.com/micro-ROS/micro_ros_setup.git src/micro_ros_setup # Update dependencies using rosdep sudo apt update && rosdep update rosdep install --from-paths src --ignore-src -y # Install pip if you need sudo apt-get install python3-pip # Build micro-ROS tools and source them colcon build source install/local_setup.bash
■ micro_ros_agent のビルド
micro_ros_agent のビルド環境をダウンロードし、ビルドします。
# Download micro-ROS agent packages ros2 run micro_ros_setup create_agent_ws.sh # Build micro_ros_agent ros2 run micro_ros_setup build_agent.sh source install/local_setup.bash
私の環境では、次のエラー出てビルドが失敗してしまいました。
$HOME/microros_ws/src/uros/micro-ROS-Agent/micro_ros_agent/src/agent/graph_manager/graph_typesupport.cpp:47:54: error: cannot bind non-const lvalue reference of type ‘bool&’ to a value of type ‘char’ 47 | m_typeSize = 4 + callbacks_->max_serialized_size(full_bounded); | ^~~~~~~~~~~~ $HOME/microros_ws/src/uros/micro-ROS-Agent/micro_ros_agent/src/agent/graph_manager/graph_typesupport.cpp:139:54: error: cannot bind non-const lvalue reference of type ‘bool&’ to a value of type ‘char’ 139 | m_typeSize = 4 + callbacks_->max_serialized_size(full_bounded); |
これは次のファイルの47行目と139行目を次のように変更したらビルドが通りました。
$HOME/microros_ws/src/uros/micro-ROS-Agent/micro_ros_agent/src/agent/graph_manager/graph_typesupport.cpp
46 // char full_bounded; 47 bool full_bounded; .... 139 // char full_bounded; 140 bool full_bounded; ....
micro_ros_agent は次のコマンドで起動することができます。
# run micro_ros_agent by a serial communication ros2 run micro_ros_agent micro_ros_agent serial --dev /dev/ttyUSB0
■ micro-ROS static library の環境準備
micro-ROS static library の開発環境をダウンロードします。
# Download micro-ROS firmware packages ros2 run micro_ros_setup create_firmware_ws.sh generate_lib
ビルドするための設定ファイルを2つ作成します。
touch my_custom_toolchain.cmake touch my_custom_colcon.meta
それぞれのファイルの設定例を示します。今回はSPRESENSEを前提とした設定ファイルです。
my_custom_colcon.meta
{ "names": { "tracetools": { "cmake-args": [ "-DTRACETOOLS_DISABLED=ON", "-DTRACETOOLS_STATUS_CHECKING_TOOL=OFF" ] }, "rosidl_typesupport": { "cmake-args": [ "-DROSIDL_TYPESUPPORT_SINGLE_TYPESUPPORT=ON" ] }, "rcl": { "cmake-args": [ "-DBUILD_TESTING=OFF", "-DRCL_COMMAND_LINE_ENABLED=OFF", "-DRCL_LOGGING_ENABLED=OFF" ] }, "rcutils": { "cmake-args": [ "-DENABLE_TESTING=OFF", "-DRCUTILS_NO_FILESYSTEM=OFF", "-DRCUTILS_NO_THREAD_SUPPORT=OFF", "-DRCUTILS_NO_64_ATOMIC=ON", "-DRCUTILS_AVOID_DYNAMIC_ALLOCATION=ON" ] }, "microxrcedds_client": { "cmake-args": [ "-DUCLIENT_PIC=OFF", "-DUCLIENT_PROFILE_UDP=OFF", "-DUCLIENT_PROFILE_TCP=OFF", "-DUCLIENT_PROFILE_DISCOVERY=OFF", "-DUCLIENT_PROFILE_SERIAL=OFF", "-UCLIENT_PROFILE_STREAM_FRAMING=ON", "-DUCLIENT_PROFILE_CUSTOM_TRANSPORT=ON" ] }, "rmw_microxrcedds": { "cmake-args": [ "-DRMW_UXRCE_MAX_NODES=1", "-DRMW_UXRCE_MAX_PUBLISHERS=5", "-DRMW_UXRCE_MAX_SUBSCRIPTIONS=5", "-DRMW_UXRCE_MAX_SERVICES=1", "-DRMW_UXRCE_MAX_CLIENTS=1", "-DRMW_UXRCE_MAX_HISTORY=4", "-DRMW_UXRCE_TRANSPORT=custom" ] } } }
my_custom_toolchain.cmake
set(CMAKE_SYSTEM_NAME Generic) set(CMAKE_CROSSCOMPILING 1) set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) # SET HERE THE PATH TO YOUR C99 AND C++ COMPILERS set(CMAKE_C_COMPILER $ENV{TOOLCHAIN_PREFIX}gcc) set(CMAKE_CXX_COMPILER $ENV{TOOLCHAIN_PREFIX}g++) set(NUTTX_INCLUDE_DIR "$ENV{HOME}/.arduino15/packages/SPRESENSE/tools\ /spresense-sdk/3.0.1/spresense/release/nuttx/include") set(ARDUINO_INCLUDE_DIR "$ENV{HOME}/.arduino15/packages/SPRESENSE/hardware/\ spresense/3.0.1/cores/spresense") set(CMAKE_C_COMPILER_WORKS 1 CACHE INTERNAL "") set(CMAKE_CXX_COMPILER_WORKS 1 CACHE INTERNAL "") # SET HERE YOUR BUILDING FLAGS set(FLAGS "-c -fno-builtin -mabi=aapcs -Wall -fno-strict-aliasing -Os \ -fno-strength-reduce -fomit-frame-pointer -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 \ -mfloat-abi=hard -mthumb -nostdlib -pipe -ggdb -gdwarf-3 -ffunction-sections \ -fdata-sections -DCONFIG_WCHAR_BUILTIN -DCONFIG_HAVE_DOUBLE -D__NuttX__ \ -D'RCUTILS_LOG_MIN_SEVERITY=RCUTILS_LOG_MIN_SEVERITY_NONE\ '" CACHE STRING "" FORCE) set(CMAKE_C_FLAGS_INIT "-w -MMD -std=gnu11 ${FLAGS} -DCLOCK_MONOTONIC=0 \ -D'__attribute__(x)='" CACHE STRING "" FORCE) set(CMAKE_CXX_FLAGS_INIT "-w -MMD -std=gnu++11 ${FLAGS} -fno-exceptions \ -fno-rtti -fpermissive -DCLOCK_MONOTONIC=0 \ -D'__attribute__(x)='" CACHE STRING "" FORCE) include_directories(BEFORE SYSTEM ${NUTTX_INCLUDE_DIR} ${ARDUINO_CINLUDE_DIR}) set(__BIG_ENDIAN__ 0)
$TOOLCHAIN_PREFIX は、".bashrc"の中で定義されています。
.bashrc
export TOOLCHAIN_PREFIX='$HOME/.arduino15/packages/ SPRESENSE/tools/gcc-arm-none-eabi/9.2.1/linux/bin/arm-none-eabi-'
micro-ROS static library をビルドします。
# Build micro-ROS static library ros2 run micro_ros_setup build_firmware.sh $(pwd)/my_custom_toolchain.cmake $(pwd)/my_custom_colcon.meta
ビルドに成功すると、次の場所に static library と必要な include ファイルが生成されます。
firmware/build/libmicroros.a
firmware/include
これでひととおり micro-ROS で開発する環境を整えることができました!
ロボットプログラミングROS2の実装・実践 -実用ロボットの開発- (設計技術シリーズ96)
- 作者: 内木場 文男
- 出版社/メーカー: 科学情報出版株式会社
- 発売日: 2021/07/21
- メディア: 単行本
ROS2の基礎とJetBotの制御: ROS2 Foxyを使ったプログラミング
- 作者: 大西和則
- 出版社/メーカー:
- 発売日: 2021/06/19
- メディア: Kindle版
大人気心霊Youtubeチャンネル「ゾゾゾ家賃の安い部屋」でSPRESENSEカメラが登場! [徒然日記]
大人気心霊Youtubeチャンネル「ゾゾゾ家賃の安い部屋」でSPRESENSEで自作カメラで写した心霊写真が紹介されました。それがこちらのカメラ。赤外線アレイセンサーと人感センサーを組み合わせたものです。
紹介された動画はこちらです。どんな心霊写真が撮れたかは動画を見てくださいね。(自分のブログに生データを貼り付けるのは躊躇するレベルなのでご勘弁)
エンジニアでありながら、オカルト好きな私は、心霊Youtubeチャンネル「ゾゾゾ」の大ファンで、特に心霊写真を特集しているサブチャンネル「家賃の安い部屋」は一回目から見ていました。
しかし、自分がまさか投稿するとは思ってもいませんでした。実はこの写真には後日談があって、ゾゾゾには、”何事もなく平和”と伝えていたのですが、この写真を投稿したちょうど一ヶ月後くらいにカミさんのお義父さんが突然亡くなっているのです。(投稿してから動画になるまで数ヶ月かかっています)
ひょっとしたら、あの写真はそのことを知らせに来たのかもしれません。振り返ってあらためて見ると、ちょっと怖いですね…、
「ゾゾゾ」はやらせなしのドキュメンタリー形式の心霊検証番組です。エンターテイメント性が高く、怖いけど楽しめるホラー系では珍しいチャンネルです。皆さんも、ぜひご覧になってはいかがでしょうか。お勧めです!
紹介された動画はこちらです。どんな心霊写真が撮れたかは動画を見てくださいね。(自分のブログに生データを貼り付けるのは躊躇するレベルなのでご勘弁)
エンジニアでありながら、オカルト好きな私は、心霊Youtubeチャンネル「ゾゾゾ」の大ファンで、特に心霊写真を特集しているサブチャンネル「家賃の安い部屋」は一回目から見ていました。
しかし、自分がまさか投稿するとは思ってもいませんでした。実はこの写真には後日談があって、ゾゾゾには、”何事もなく平和”と伝えていたのですが、この写真を投稿したちょうど一ヶ月後くらいにカミさんのお義父さんが突然亡くなっているのです。(投稿してから動画になるまで数ヶ月かかっています)
ひょっとしたら、あの写真はそのことを知らせに来たのかもしれません。振り返ってあらためて見ると、ちょっと怖いですね…、
「ゾゾゾ」はやらせなしのドキュメンタリー形式の心霊検証番組です。エンターテイメント性が高く、怖いけど楽しめるホラー系では珍しいチャンネルです。皆さんも、ぜひご覧になってはいかがでしょうか。お勧めです!
ゾゾゾ変 (1) 【電子限定カラーイラスト収録&電子限定おまけ付き】 (バーズコミックス)
- 出版社/メーカー: 幻冬舎コミックス
- 発売日: 2023/01/24
- メディア: Kindle版
SONY SPRESENSE メインボード CXD5602PWBMAIN1
- 出版社/メーカー: スプレッセンス(Spresense)
- メディア: Tools & Hardware
SONY SPRESENSE カメラモジュール CXD5602PWBCAM1
- 出版社/メーカー: スプレッセンス(Spresense)
- メディア: Tools & Hardware
2023-04-16 23:49
WSL2 で GnuPlot を使って極座標を表示する [徒然日記]
シミュレーションデータのグラフ化にエクセルを使おうと思ったのですが、せっかくならシミュレーションプログラムを作っている WSL2 の環境から Gnuplot を直接呼べるようにしました。
手順は次の5ステップです。
VcXsrvのインストール、起動方法はこちらのサイトがわかりやすいです。
次のようなデータファイルを"beam.dat"を用意します。
このデータを極座標で表示するために、次の GnuPlot のスクリプトファイル”polor.gnuplot”を用意しました。
このスクリプトは次の手順で表示できます。
こちらが表示したグラフです。極座標のグラフが表示できました。^^
手順は次の5ステップです。
【STEP1】 WSL2 (Ubunt 22.04.2 TLS) をMicrosoft Storeからインストール 【STEP2】 VcXsrv Windows X Server をインストール 【STEP3】 スタートメニューから「XLaunch」を選択して起動 ※"Disable access control"をチェック 【STEP4】 WSL2 のターミナルを開いて、gnuplot をインストール ※ sudo apt install gnuplot 【STEP5】 WSL2 のターミナル上で gnuplot を起動してデータをグラフ化
VcXsrvのインストール、起動方法はこちらのサイトがわかりやすいです。
次のようなデータファイルを"beam.dat"を用意します。
-90.000000 -13.006601 -89.639279 -13.007419 -89.278557 -13.009873 -88.917836 -13.013969 -88.557114 -13.019712 -88.196393 -13.027112 -87.835671 -13.036182 -87.474950 -13.046937 -87.114228 -13.059395 .... 89.639279 -13.007419 90.000000 -13.006601
このデータを極座標で表示するために、次の GnuPlot のスクリプトファイル”polor.gnuplot”を用意しました。
reset set angles degrees set polar set grid polar 30 lc rgbcolor "#999999" unset border unset param set size ratio 1 1,1 set xtics axis nomirror -50,10 unset ytics unset key set style data line set xrange[-50:50] set yrange[-50:50] set rrange[-50:0] set label 1 "0°" at graph 1.01,0.5 front set label 2 "180°" at graph -0.01,0.5 right front set label 3 "-90°" at graph 0.5,-0.03 center front set label 4 "90°" at graph 0.5,1.03 center front plot 'beam.dat'
このスクリプトは次の手順で表示できます。
$ gnuplot gnuplot> call 'polor.gnuplot'
こちらが表示したグラフです。極座標のグラフが表示できました。^^
2023-03-13 23:15
コメント(0)