Bye Bye Moore

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

python

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…

Python3の標準ライブラリのみでCGI その2:多少の並行処理ができるようにする

前回の例ではhttp.serverの仕様上、リクエストを一個しか処理できません そこで、複数処理ができるようにthreadingを使って逃げてみます ……pythonで並列処理ってあまりいい思い出が無いですけどね(白目 実際のところ import http.server import socketserve…

Python3の標準ライブラリのみでCGI その1:とりあえず簡単なモノ

業態上、作るシステムは小型なのが多いです。 大規模アクセスはそもそも仕様外なのでCGIでも十分なケースは少なくありません。 CGIというとPHPのイメージがあるのですが、仕組み上はPythonだろうがLispだろうが実行はできるおのこと。 実際のところ とりあえ…

Python3でUNIXソケットを経由して受信する

UNIXソケットはシステム内のプロセス間で完結する通信であれば、早くて安全です。 要はローカルファイルの読み書きなので 実際のところ UNIXソケット"/tmp/my_socket"を受信し、 パケットのバリデーション(今回は12ケタで英小文字と数値)を実施するスク…

"command data1 data2"なテキストを判定する単純な話

I2C等等、単純な文字列でくるパケットのソートのお話 今まではgrepで処理やってました が、これスペース区切りである事が前提であれば、区切り文字で配列に突っ込むだけで良い 実際のところ def send_response(str): # 本来は何か素敵な出力をしてくれます p…

試験用にランダムなメールアドレスを生成してみる

実際のところ import random import string # ドメインの設定 DOMAIN = "example.com" # 英単語のリスト (必要に応じて追加・変更してください) WORDS = ["apple", "banana", "cherry", "date", "elderberry", "fig", "grape", "honeydew"] def generate_ema…

4-5次ルンゲ=クッタ法とオイラー法の比較

ロボットアーム制御の勉強をしていたところ、ルンゲ=クッタ法なる言葉がでてきました。 将来位置・速度の予想という事でオイラー法は何となく知ってましたが……ルンゲ=クッタ法は言葉も思い出せず(実際やっていないかもしれない)。 というわけで、どうも一…

OpenCV for pythonでMJPEG用のテスト画像をつくる

import cv2 class MyVideoCapture(): def createTestImage(self,count): # 画像の解像度 image = np.zeros((480, 640, 3), dtype=np.uint8) # テキストのフォントとスケール font = cv2.FONT_HERSHEY_SIMPLEX font_scale = 2.0 # テキストの色(白) text_co…

BottleでUSBカメラの動画を配信する簡易サイトをつくる その2:MotionJPEGにOpenCVで細工する

shuzo-kino.hateblo.jp から発展して、OpenCVで加工して出力するようにします 実際のところ 参考もと

tkinterで指定秒ごとに実行する処理

実際のところ import tkinter as tk def say_hello(): print("Hello, world!") root = tk.Tk() root.after(2000, say_hello) # 2秒後にsay_hello関数を呼び出す root.mainloop()

tkinterでメッセージボックスの確認まで処理を待つ挙動を実装する

実際のところ import tkinter as tk import tkinter.messagebox def preprocess(): #ここに前処理めいたの print("preprocess") def mainprocess(): #ここに本処理 print("main process") def button_click(): print("Button clicked") preprocess() result …

Azure Functionsをつかう その3:Azure IoT Hubと連動する

実際のところ Azure from azure.iot.device import IoTHubDeviceClient, Message import json import time import random import os # Read the config file with open('config.json', 'r') as f: config = json.load(f) CONNECTION_STRING = config['CONNEC…

Raspberry Pi Pico Python SDK その3:I2Cマスター

実際のところ from machine import Pin, I2C import utime slaveAddress = 0x42 registerAddress = 0x06 writeData = b'123' i2c = I2C(0, scl=Pin(9), sda=Pin(8), freq=100000) #接続先を調べる i2c.scan() #slaveAddressに対し書き込み i2c.writeto(slave…

Raspberry Pi Pico Python SDK その2:アナログ入力

実際のところ from machine from utime adc = machine.ADC(26) #26番pinを割り当て white True: value = adc.read_u16 #16bitな値で読み取り print(value) utime.sleep(1) 4だと内部温度計を使える模様 参考もと PythonSDK公式資料 GitHub - raspberrypi/pic…

Raspberry Pi Pico Python SDK その1:デジタル入出力

実際のところ 出力 from machine import Pin led = Pin("LED", Pin.OUT) #出力として設定 led.value(1) #High led.value(0) #LOW 入力 from machine import Pin pin16 = Pin(16, Pin,IN, Pin,PULL_UP) #16番ピンをプルアップで入力待ち pin16.irq(lambda pin…

AzureのIoT系をつかう その10:データを取得してstreamlitで出す

実際のところ config.json { "IOT_HUB_CONNECTION_STRING": "Your IoT Hub Connection String", "DEVICE_ID": "Your IoT Device ID", "INTERVAL": 10 } streamlit_azure.py import streamlit as st import time import json from azure.iot.hub import IoTHu…