우회전 하는데 맞은편 좌회전이 너무 내쪽으로 붙어서

그걸 피한다고 이르게 회전했더니 뒷 타이어 연석에 긁어 먹었다.

제법 충격이 커서 tpms 바로 확인ㅇ하는데 공기압은 문제가 없어서 일단은 운행했는데

내리고 나서 확인해보니 제법 크고 깊게 찢어졌다.

 

그냥 보기에는 살짝이네~ 싶지만

 

들어서 보면 제법 깊게 파였다 ㅠㅠ

'개소리 왈왈 > 육아관련 주저리' 카테고리의 다른 글

베란다 문 잠금장치 수리  (2) 2026.06.23
바쁜주말  (2) 2026.05.31
밀크티 타블렛(s6 lite) 초기화 하기  (0) 2026.05.23
고향  (0) 2026.05.03
유류비 지원 때문인가?  (0) 2026.05.01
Posted by 구차니
embeded/robot2026. 6. 29. 18:09

atom 이랑 팔에 힘빼는거(!) 테스트

 

from pymycobot.mycobot import MyCobot
from pymycobot import PI_PORT, PI_BAUD
mc = MyCobot(PI_PORT, PI_BAUD)
mc.set_color(0,0,255)
mc.get_digital_input(39) # atom 누르지 않고
1
mc.get_digital_input(39) # atom 누르고
0
mc.power_off() # atom off
mc.get_digital_input(39) # atom 안 읽힘
mc.get_digital_input(39)
mc.power_on() # atom on
mc.get_digital_input(39) # atom 누르지 않고
1
mc.get_digital_input(39) # atom 누르고
0
mc.is_power_on()
1
mc.power_off()
mc.is_power_on()
0
mc.power_on()


mc.power_off()
mc.is_all_servo_enable()
mc.power_on()
mc.is_all_servo_enable()

 

power_on 은 atom(LED, 버튼 일체형) 통신 뿐만 아니라

servo 전원 on/off도 같이 엮인다.

1.1 power_on()     Function: Atom open communication (default open)
1.2 power_off()     Function: Atom turn off communication
1.3 is_power_on() Function: judge whether robot arms is powered on or not

 

서보(관절별) 잠그고, 푸는 명령

2.11 release_servo(servo_id) Function: release a servo
5.4 focus_servo(servo_id)    Function: power on designated servo

 

gpt 보고 짜달라니 잘 짜준다

#!/usr/bin/env python3

import curses
import time

from pymycobot.mycobot import MyCobot
from pymycobot import PI_PORT, PI_BAUD

# -------------------------------------------------
# myCobot
# -------------------------------------------------
mc = MyCobot(PI_PORT, PI_BAUD)

SPEED = 40
STEP = 2.0        # mm
ROT_STEP = 2.0    # degree

released = True

mc.power_on()
time.sleep(1)

coords = mc.get_coords()

if coords is None:
    print("Cannot read robot coordinates.")
    exit(1)


# -------------------------------------------------
def draw_screen(stdscr, angles):

    stdscr.clear()

    stdscr.addstr(0, 0, "myCobot 280 Jog Controller")

    stdscr.addstr(2, 0, "A/D : X -/+")
    stdscr.addstr(3, 0, "W/S : Y +/-")
    stdscr.addstr(4, 0, "R/F : Z +/-")
    stdscr.addstr(5, 0, "Q/E : RX -/+")
    stdscr.addstr(6, 0, "ESC : Exit")

    stdscr.addstr(8, 0, f"Servo : {'LOCK' if released else 'RELEASE'}")

    stdscr.addstr(
        10, 0,
        f"X={coords[0]:7.2f}  "
        f"Y={coords[1]:7.2f}  "
        f"Z={coords[2]:7.2f}"
    )

    stdscr.addstr(
        11, 0,
        f"RX={coords[3]:7.2f}  "
        f"RY={coords[4]:7.2f}  "
        f"RZ={coords[5]:7.2f}"
    )

    if angles is not None:
        stdscr.addstr(13, 0, "Joint Angles")

        for i, a in enumerate(angles):
            stdscr.addstr(14+i, 0, f"J{i+1}: {a:7.2f}")

    stdscr.refresh()


# -------------------------------------------------
def main(stdscr):

    global coords
    global released

    curses.cbreak()
    curses.noecho()

    stdscr.nodelay(True)
    stdscr.keypad(True)

    angles = mc.get_angles()

    draw_screen(stdscr, angles)

    while True:

        # ------------------------------------------
        # Atom Button
        # ------------------------------------------

        button = mc.get_digital_input(39)

        if button == 0 and released:

            released = False

            mc.release_all_servos()

            draw_screen(stdscr, angles)

        elif button == 1 and not released:

            released = True

            mc.power_on()

            time.sleep(0.5)

            # Servo를 손으로 움직였을 수 있으므로
            # 이때만 실제 좌표를 다시 읽음
            new_coords = mc.get_coords()
            if new_coords is not None:
                coords = new_coords

            angles = mc.get_angles()

            draw_screen(stdscr, angles)

        key = stdscr.getch()

        if key == 27:
            break

        moved = False

        if released:

            if key == ord('a'):
                coords[0] -= STEP
                moved = True

            elif key == ord('d'):
                coords[0] += STEP
                moved = True

            elif key == ord('w'):
                coords[1] += STEP
                moved = True

            elif key == ord('s'):
                coords[1] -= STEP
                moved = True

            elif key == ord('r'):
                coords[2] += STEP
                moved = True

            elif key == ord('f'):
                coords[2] -= STEP
                moved = True

            elif key == ord('q'):
                coords[3] -= ROT_STEP
                moved = True

            elif key == ord('e'):
                coords[3] += ROT_STEP
                moved = True

            if moved:
                mc.send_coords(coords, SPEED, 1)
                draw_screen(stdscr, angles)

        time.sleep(0.02)


# -------------------------------------------------
if __name__ == "__main__":
    curses.wrapper(main)

 

[링크 : https://docs.elephantrobotics.com/docs/gitbook-en/7-ApplicationBasePython/7.2_API.html]

'embeded > robot' 카테고리의 다른 글

왼손 오른손 좌표계  (0) 2026.06.22
mycobot280_pi urdf  (0) 2026.06.22
블루로봇 밸런스 스테이지  (0) 2026.06.21
elephant robotics cobot python api  (0) 2026.06.19
elephant robotics mycobot 280 pi python 예제  (0) 2026.06.16
Posted by 구차니
Programming/qt2026. 6. 29. 14:57

열심히 AI 갈구면서 테스트

 

아래의 클래스 추가

// UIScale.h
#pragma once

#include <QWidget>

namespace UIScale
{
    void scale(QWidget *w);
    void scaleTree(QWidget *root);
}

 

// UIScale.cpp

#include "UIScale.h"

#include <QGuiApplication>
#include <QScreen>
#include <QDebug>

namespace
{
    constexpr int BASE_WIDTH  = 800;
    constexpr int BASE_HEIGHT = 480;
}

void UIScale::scale(QWidget *w)
{
    if (!w)
        return;

    // 이미 적용했으면 종료
    if (w->property("_scaled").toBool())
        return;

    QScreen *screen = QGuiApplication::primaryScreen();
    if (!screen)
        return;

    QSize screenSize = screen->availableGeometry().size();

    const double sx = double(screenSize.width())  / BASE_WIDTH;
    const double sy = double(screenSize.height()) / BASE_HEIGHT;

    QRect r = w->geometry();

    w->setGeometry(
        int(r.x()      * sx),
        int(r.y()      * sy),
        int(r.width()  * sx),
        int(r.height() * sy));

    w->setProperty("_scaled", true);
}

void UIScale::scaleTree(QWidget *root)
{
    scale(root);

    const auto widgets = root->findChildren<QWidget *>();

    for (QWidget *w : widgets)
    {
        qDebug().noquote()
        << QString("%1")
              .arg(w->objectName());
        scale(w);
    }
}

 

해당 위젯의 showEvent()를 오버라이드 해서 사용한다.

scaleTree()만 실행해도 잘된다.(어짜피 tree에서 순회하면서 쭈욱 여는거라)

그런데 widget 들은 확대되서 잘 나오는데

stylesheet에서 background로 박아둔 녀석도 같이 확대되서 이상하게 작동하는 지라

스타일시트 엔진(?)은 따로 움직여서 손을 봐줘야 한다고.

void cycle::showEvent(QShowEvent *event)
{
    qDebug() << "helo";
    UIScale::scaleTree(this);
    this->update();
    this->repaint();

    QString ss = this->styleSheet();
    this->setStyleSheet("");
    this->setStyleSheet(ss);
}

[링크 : https://chatgpt.com/share/6a420896-c94c-83e8-9459-3c016987a64f]

Posted by 구차니
Programming/qt2026. 6. 29. 10:49

현재 사용중인 코드는 좀 다르긴한데

잘 보면 :/i18n 으로 해서 리소스 파일에서 끌어오게 되어있다.

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QTranslator myappTranslator;
    if (myappTranslator.load(QLocale::system(), u"myapp"_s, u"_"_s, u":/i18n"_s))
        app.installTranslator(&myappTranslator);

    return app.exec();
}

[링크 : https://doc.qt.io/qt-6/ko/i18n-source-translation.html]

 

그러면.. 이 경로만 바꾸어 주고 빌드 시스템에서

lrealse를 수동으로 해주면 이미지와 함께 배포하게 하면 충분히 하나로 합치지 않고 배포가 가능할 것 같긴한데..

 

빌드 디렉토리에서 i18n 으로 검색해보니 qrc 관련해서 우겨 넣는게 보인다.

$ grep -rn i18n .
grep: ./main.o: 바이너리 파일 일치함
./qrc_qmake_qmake_qm_files.cpp:3903:  // i18n
./qrc_qmake_qmake_qm_files.cpp:3963:  // :/i18n
./qrc_qmake_qmake_qm_files.cpp:3966:  // :/i18n/untitled_pt_PT.qm
./qrc_qmake_qmake_qm_files.cpp:3969:  // :/i18n/untitled_ko_KR.qm
./qrc_qmake_qmake_qm_files.cpp:3972:  // :/i18n/untitled_fr_FR.qm
./qrc_qmake_qmake_qm_files.cpp:3975:  // :/i18n/untitled_sk_SK.qm
./qrc_qmake_qmake_qm_files.cpp:3978:  // :/i18n/untitled_en_US.qm
./qrc_qmake_qmake_qm_files.cpp:3981:  // :/i18n/untitled_el_GR.qm
./qrc_qmake_qmake_qm_files.cpp:3984:  // :/i18n/untitled_ru_RU.qm
./qrc_qmake_qmake_qm_files.cpp:3987:  // :/i18n/untitled_es_ES.qm
./qmake_qmake_qm_files.qrc:2:<qresource prefix="i18n">

 

ts-files에 이름을 넣고 -qm에 생성될 파일을 넣으면되니까 어찌 되려나?

$ lrelease --help
Usage:
    lrelease [options] -project project-file
    lrelease [options] ts-files [-qm qm-file]

lrelease is part of Qt's Linguist tool chain. It can be used as a
stand-alone tool to convert XML-based translations files in the TS
format into the 'compiled' QM format used by QTranslator objects.

Passing .pro files to lrelease is deprecated.
Please use the lrelease-pro tool instead, or use qmake's lrelease.prf
feature.

Options:
    -help  Display this information and exit
    -idbased
           Use IDs instead of source strings for message keying
    -compress
           Compress the QM files
    -nounfinished
           Do not include unfinished translations
    -removeidentical
           If the translated text is the same as
           the source text, do not include the message
    -markuntranslated <prefix>
           If a message has no real translation, use the source text
           prefixed with the given string instead
    -project <filename>
           Name of a file containing the project's description in JSON format.
           Such a file may be generated from a .pro file using the lprodump tool.
    -silent
           Do not explain what is being done
    -version
           Display the version of lrelease and exit

[링크 : https://chatgpt.com/share/6a41cebb-e8bc-83ee-9207-6d9ef47ff0ca]

 

일단은.. 파일 validation을 넣고 실행하게 해야 안전할 것 같은데..

'Programming > qt' 카테고리의 다른 글

qt 동적 해상도 대응  (0) 2026.06.29
QGraphicsProxyWidget  (0) 2026.06.05
QT 다국어 언어 설정 전파  (0) 2026.06.05
QT 자식 위젯으로 생성 / 부모 위젯 연결  (0) 2026.06.05
qt QTabWidget 사용  (0) 2026.06.04
Posted by 구차니

간단하게(?) 요약하면

기획서나 정의서에 "당연하다고 넘어가는 내용을 놓치지 않게" 잘 쓰고

 ai를 통해서 테스트 까지 할 수 있도록 사용해야 한다.

정도로 보인다.

예를 들어서 결제를 해라 정도로 쓰면

ai는 어떤 함수를 쓸지 알수 없기 때문에

최소한 어떤 모듈 어떤 함수로 결제를 어떤 조건에 해라 정도는 적으라는 듯.

[링크 : https://eopla.net/magazines/43902]

'개소리 왈왈 > 인공지능' 카테고리의 다른 글

새로운 마약 - AI  (0) 2026.03.17
agi를 느꼈다?  (0) 2026.02.24
바이브 코딩 ai 코딩의 광풍  (0) 2025.10.13
ai killed programmer  (0) 2025.05.23
chatGPT가 날로먹으려고 한다!!!!  (0) 2025.03.21
Posted by 구차니
게임/닌텐도 스위치2026. 6. 29. 00:11

1회차는 먼가 쫒기듯 다른것도 안하고 메인 스트리만 쭈욱 따라서 했는데

2회차 되니 2B 대신 9S로 하게 되서

시스템이 달라져서 그런가.. 신기한게 많이 나온다.

 

 

9S의 해킹은 이펙트도 멋지고

카메라 워크라고해야하나? 슬로우 모션 걸리면서 화면 전환되는것도 멋지고 ㅎㅎ

 

2B 때는 보여지지 않던 내용들이 보이는데

9S 와는 다르게 2B가 정보에 통제를 받는건가 싶기도 하고?

아니면 9S의 해킹으로 상대의 정보를 더 파악해서 그런건가?

아니면 시선만 다른게 아닌, 전혀 다른 루프인가 싶기도 하고?

 

진행하면서 먼가 슬펐던 사이드 퀘스트

 

그나저나 높은데서 떨여져서 죽진 않았는데

회색으로 보이게 되는걸 보면서.. 어..? 벙커가면 세상이 무채색이 되는데

그럼 벙커에서는 죽기 직전이라는 건가?

'게임 > 닌텐도 스위치' 카테고리의 다른 글

조이콘 셋트 수리  (0) 2026.06.28
니어 오토마타 1회차 끝  (0) 2026.06.27
니어 오토마타 공략(?) 팁  (1) 2026.06.25
닌텐도 스위치 1 지름  (0) 2026.06.23
닌텐도 세이브 이전하기  (0) 2025.12.26
Posted by 구차니
게임/닌텐도 스위치2026. 6. 28. 19:28

무선으로 왼쪽 녀석이 내꺼에 연결이 안되서

조이스틱 부품 변경하면서 조이콘 배터리 뽑았다 꽂아도 안되고

펌웨어도 가장 최신이라서 답이 없어서

혹시나 하는 마음에 이전 닌텐도에 연결했다가 내꺼에 다시 무선으로 하니 이제야 된다.

 

중심점도 못 잡고 난리여서 분해해보니 심하게 갈려서 줄이 쫘~악 가니 잘 될리가 있나 싶고

 

오른쪽은 너무 강하게 돌리다 보니 프라스틱이 갈려 나갔는지 안에가루가 난리가 났다.

 

원래 이렇게 복잡했나 싶었던 오른쪽 배선상태

'게임 > 닌텐도 스위치' 카테고리의 다른 글

니어 오토마타 2회차 진행중  (0) 2026.06.29
니어 오토마타 1회차 끝  (0) 2026.06.27
니어 오토마타 공략(?) 팁  (1) 2026.06.25
닌텐도 스위치 1 지름  (0) 2026.06.23
닌텐도 세이브 이전하기  (0) 2025.12.26
Posted by 구차니
게임/닌텐도 스위치2026. 6. 27. 23:17

어우 그냥 시간가는줄 모르고 했네

그나저나 독에 연결해서 게임해도 캡쳐는 1280x720 이네?

 

 

'A' 루트 (1회차 완료)

 

흐음 이게 끝이 아니다! 라고 해줘서 다행 ㅋㅋ

 

아무튼 퀘스트도 많이 안하고 그랬는데 12시간 50분.

가끔 길 잘못들어서 전투 안가면 이상한 엔딩 나오고 ㅋㅋㅋ

'게임 > 닌텐도 스위치' 카테고리의 다른 글

니어 오토마타 2회차 진행중  (0) 2026.06.29
조이콘 셋트 수리  (0) 2026.06.28
니어 오토마타 공략(?) 팁  (1) 2026.06.25
닌텐도 스위치 1 지름  (0) 2026.06.23
닌텐도 세이브 이전하기  (0) 2025.12.26
Posted by 구차니
프로그램 사용/Blender2026. 6. 27. 00:12

armature 하면 single bone 밖에 없어서

복사하고, 늘리면서 해야 하는데

 

기본 add on 이지만 rigify를 추가해주면

 

이렇게 여러가지 동물형이나 사람에 대한 골격이 바로 추가된다.

 


[링크 : https://illuam.tistory.com/entry/BlenderArmature-본-추가하기Human-Bone]

'프로그램 사용 > Blender' 카테고리의 다른 글

blender bone (armature)  (0) 2026.06.24
3d model 다운로드 / blender import  (0) 2026.06.24
blener ll3m  (0) 2026.05.27
gemini + blender  (0) 2025.09.01
blender로 stl 구멍 메우기  (0) 2025.08.20
Posted by 구차니
게임/닌텐도 스위치2026. 6. 25. 11:48

2B 무기가 2개였다가 하나가 되어서

9S 에게도 무기를 그럼 채워주려고 했더니 조작하는 캐릭터에만 채워줄수 있다고..

[링크 : https://www.reddit.com/r/nier/comments/il7x4m/how_do_i_change_9s_weapon/?tl=ko]

 

 

[링크 : https://blog.naver.com/akrsodhk/221228307242] 무기

[링크 : https://blog.naver.com/akrsodhk/221229116415] 자동시에 분신 같은거 나오는게 회피보조칩인가..

[링크 : https://blog.naver.com/akrsodhk/221231069886] 탈!의!

 

[링크 : https://gall.dcinside.com/mgallery/board/view/?id=dhxhakxk&no=11333] 전투 팁

[링크 : https://www.dogdrip.net/156189375] 강/약 공격 누르고 있으면 차지어택

'게임 > 닌텐도 스위치' 카테고리의 다른 글

조이콘 셋트 수리  (0) 2026.06.28
니어 오토마타 1회차 끝  (0) 2026.06.27
닌텐도 스위치 1 지름  (0) 2026.06.23
닌텐도 세이브 이전하기  (0) 2025.12.26
조이콘 수리  (2) 2025.10.15
Posted by 구차니