Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

python

C++からpython3スクリプトをコールする

実際のところ #include <cstdlib> int main() { // "helloworld.py" Pythonスクリプトを実行 int returnCode = system("python3 helloworld.py"); if (returnCode != 0) { // エラー処理 } return 0; } 参考もと cstdlib - cpprefjp C++日本語リファレンス</cstdlib>

Jupyter Notebook から rclpy を読み出す実験 その7:SubしてPubする

すでにあるトピックを購読、加工して再配布というような処理を考えます。 今回はD435の値を一定の書式にしてmsgとして配布する方法を試してみました。 実際のところ 前提 Ubuntu 22 LTS Jupyter スクリプト import rclpy from rclpy.node import Node from s…

Jupyter Notebook から rclpy を読み出す実験 その6:timer callback

実際のところ import rclpy from rclpy.node import Node import time class MyTimerNode(Node): def __init__(self): super().__init__('my_timer_node') self.timer = self.create_timer(1.0, self.timer_callback) # 1秒ごとにコールバック self.count = …

Jupyter Notebook から rclpy を読み出す実験 その5:Realsense D435の値を取得する

shuzo-kino.hateblo.jp のシリーズ 実際のところ 前提条件 Ubuntu 22 LTS Jupyter Notebook から rclpy を読み出す実験 その1:環境構築 - Bye Bye Mooreの手順を実装済み librealsense2のROS2用環境を構築済み スクリプト import rclpy from rclpy.node im…

【読書メモ】PythonでまなぶSQLiteデータベース入門 上巻: Excelデータベースからのステップアップ

PythonでまなぶSQLiteデータベース入門 上巻: Excelデータベースからのステップアップ作者:NSシステムズAmazon

実行中のクラスメソッド名をしらべる

ずいぶん前にRubyでクラスメソッドを調べるinspectメソッドをやりましたが shuzo-kino.hateblo.jpPythonにも、そういうのがあります。 実際のところ 組込みモジュールなので、特に導入の必要なし。 import inspect class MyClass: def method_one(self): pri…

画像ファイルのURLを指定するとBase64にして変数に格納するPythonスクリプト

実際のところ import requests import base64 import sys def download_file_as_base64(url): if not url: sys.stderr.write("Error: No URL provided.\n") sys.exit(1) response = requests.get(url) if response.status_code == 200: # ファイルの内容をBa…

ThreadでAPI処理待ちのアスキーアニメーションをだす

OpenAPIの処理が延々とかかって心理的にアレなので 実際のところ from openai import OpenAI from dotenv import dotenv_values import threading import time import sys def loading_animation(event): animation_chars = ['|', '/', '-', '\\'] i = 0 whi…

GPT-4をPythonで使う(再戦) その3:ビジョン判定をする

実際のところ 前提条件 公式サンプルで引用されているWikipediaの画像をsample.jpgとしてローカルに保存 スクリプト from openai import OpenAI from dotenv import dotenv_values import sys import base64 # Function to encode the image def encode_imag…

dotenvをPythonでつかう

shuzo-kino.hateblo.jp 10年近く前にRubyでは使っていたdotenvがOpenAIのPythonインターフェイスでも推奨だったので、使ってみることに。 実際のところ 導入 使い方 以下のような野蛮で不用心なスクリプトが from openai import OpenAI yourclient = OpenA…

複数多種のリポジトリを引っ張らないといけないとき、vcstoolが使えるかもしれない

ROSプロジェクトなど、各所に散らばっているリポジトリを一々手で入力してるとミスする可能性が増えてきます。 そんな時、vcstoolが使えるかもしれません 実際のところ $ pip install -U vcstool 標準入力からいれる こんなファイルがあったとして $ echo ro…

YDLiDAR X4の一番近い距離についてROS2 humbleのtopicとして流す

実際のところ import rclpy from rclpy.node import Node from rclpy.qos import QoSProfile, ReliabilityPolicy from sensor_msgs.msg import LaserScan from std_msgs.msg import Float32 class ClosestDistancePublisher(Node): def __init__(self): supe…

ROS2のlaunchファイルを用意する

実際のところ $ cd ~/dev_ws/src $ mkdir -p rpi_cpu_temp/launch $ touch rpi_cpu_temp/launch/cpu_temp_launch.py ROS1ではXMLだった気がしますが……ROS2からlaunchファイルはpython風の記法が使えるようになったそうで cpu_temp_launch.py from launch imp…

rclpyでROS2 paramsを使ってみる

以前つくったcpu温度をtopicで配信するcpu_tempの応用として、 nodeの挙動にパラメータを与える「ROS2 params」の実験をしてみます 適切に使えばビミョーな値の変更で毎回ビルドを変更しなくてよくなります 実際のところ 前提 shuzo-kino.hateblo.jp をベー…

rclpyでRaspberry Pi 4BのCPU温度を積算するActionを実装する

動作状態や途中介入を実現できるActionもやってみる事にしました 簡単化のため、CPU温度を積み上げる様式にします 実際のところ actionのビルド $ cd ~/dev_ws $ ros2 pkg create --build-type ament_cmake cpu_temp_action_msgs $ mkdir cpu_temp_action_ms…

rclpyでttyUSB0を経由してM5stackにテキストを送り込むserviceを書く

段々内容が入り組んできましたが…… rclpyでttyUSB0を経由してM5stackにテキストを送り込むserviceを書いてみます これが出来たら、もうあとはカメラやサウンドデバイスみたいな事例しかないんでは 実際のところ サービス定義の作成 まずはサービスの定義ファ…

rclpyでROS2のtopicの挙動を標準実装のmsgをつかって書いてみる

前回の続きで、今度はtopicをやります データの垂れ流しに向いた形式で、3D可視化ツールのrvizやシミュレーション環境のgazeboなんかで状態の取得に使われています 今回は実装のお試しということで、Raspberry Pi 4BのCPU温度の積算を通知するようにしてみま…

rclpyでROS2のserviceの挙動と独自srvを書いてみる

serviceはtopicと違い送受信に確認がされるので確実に伝えたい情報に使います 自作serviceの事件のため、まずはRaspberry PI 4BのGPIOをオンオフするROS serviceをpython3で実装してみます 実際のところ 必要なパッケージのインストール: Raspberry Pi上でGP…

xArmをpythonのsocket経由で操作する

実際のところ import socket # 接続先の情報 IP_ADDRESS = "192.168.1.168" PORT = 502 # 送信するModbusコマンド COMMAND = bytes([0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x10]) def send_modbus_command(ip_address, port, command): # ソケットオブジェク…

rclpyでRealsense D435から点群をとってOpen3Dで描画

せっかく点群も取れるので、そちらも試してみることに 実際のところ $ pip install plotly $ pip install open3dimport numpy as np import rclpy from sensor_msgs.msg import PointCloud2 from sensor_msgs import point_cloud2 import plotly.express as …

rclpyで画像にArUcoマーカーの情報をつけて別トピックとして出してみる

rclpyでROS2のsensor/Imageトピックから画像を取得し透かしを入れて別トピックとして配信する - Bye Bye Moore と ROS2 hubmle環境にArUcoマーカーの認識をつける - Bye Bye Moore の内容を統合し、特定のIDをもつArUcoの姿勢情報を再配信画像の右上に表示し…

rclpyでROS2のsensor/Imageトピックから画像を取得し透かしを入れて別トピックとして配信する

実際のところ ROSの画像形式とOpenCVの画像形式を変換できる cv_bridgeを使います import rclpy from rclpy.node import Node from sensor_msgs.msg import Image import cv2 import cv_bridge class WatermarkNode(Node): def __init__(self): super().__in…

Jupyter Notebook から rclpy を読み出す実験 その3:スライダーやテキストボックスから値を取得しておくる

あまり使った事がなかったのですが、Jupyter NotebookにはスライダーやテキストボックスのようなUI類もあるので、こいつから値をとってロボットアームの動作に反映するようなのを作ってみます。 実際のところ import ipywidgets as widgets from IPython.dis…

Jupyter Notebook から rclpy を読み出す実験 その2:ロボットアーム UFactory Lite6の操作実験

rclpyからUFactory Lite6を操作してみます 実際のところ import rclpy from rclpy.node import Node from xarm_msgs.srv import SetInt16ById, SetInt16, MoveCartesian class XArmServiceClient(Node): def __init__(self): super().__init__('xarm_service…

Jupyter Notebook から rclpy を読み出す実験 その1:環境構築

少しパラメータを変えて実験したい場合に一々コマンドを叩くのも面倒になってきたので Jupyter Notebookからrclpyを呼び出して少し実験を楽にする方法を試してみました 実際のところ 前提条件 Ubuntu 22 LTS mDNS構築済み 導入 $ sudo apt install jupyter-c…

rclpyでROS2のトピックを扱う その3:service

実際のところ 実践例として、xArm の ROS2 humble用パッケージのサービスをコールしてロボットアームを動かしてみます。 $ cd ~/dev_ws/ $ source install/setup.bash スクリプト import rclpy from rclpy.node import Node from xarm_msgs.srv import SetIn…

Rhino + Grasshopperでロボットアームの動作計画をつくる その4:GrasshopperとPythonを連動させる

実際のところ 参考もと Rhino - Learn to use Rhino Rhino - Your First Python Script in Grasshopper

http.cookiesを使ってみる その2:有効期限を設定

実際のところ from http.cookies import SimpleCookie cookie = SimpleCookie() cookie["user"] = "admin" # user の Morsel オブジェクトを取得 morsel = cookie["user"] # 有効期限を設定 morsel["expires"] = "Thu, 01 Jan 2030 00:00:00 GMT" 参考もと h…

http.cookiesを使ってみる その1:簡単にフォームに表示

実際のところ shuzo-kino.hateblo.jp のThreadつきCGIをベースに、index.htmlにcookieの内容を反映するサンプルを考えてみます。 index.html <html> <body> <p>Name from cookie: {name}</p> <p>Value from cookie: {value}</p> <form action="/setcookie" method="post"> Name: <input type="text" name="name"><br> Value: <input type="text" name="value"></form></body></html>

Python3の標準ライブラリのみでCGI その3:認証をつける

実際のところ import http.server import socketserver import threading import base64 import json class ThreadedHTTPServer(socketserver.ThreadingMixIn, http.server.HTTPServer): daemon_threads = True class CGIHandler(http.server.CGIHTTPRequest…