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' 카테고리의 다른 글

gcode (g-code)  (0) 2026.07.01
mycobot280 pi / TCP(tool center point)  (0) 2026.06.30
왼손 오른손 좌표계  (0) 2026.06.22
mycobot280_pi urdf  (0) 2026.06.22
블루로봇 밸런스 스테이지  (0) 2026.06.21
Posted by 구차니
embeded/robot2026. 6. 22. 23:06

이게 먼소리여..

유니버셜 로봇 강의 가서

다른 사람들이 손가락으로 막 이상한 짓(?) 하고 있어서

웬지 좌표계 같아서 찾아보는데 이해가 안된다 ㅠㅠ

 

좀 보다 보니..

오른손 좌표계에서

축 증가방향 - 엄지(x) 검지(y) 중지(z)

축 회전방향 - 따봉했을때 검지-중지-약지-새끼 의 방향

 

 

[링크 : https://dev-igner.tistory.com/51]

[링크 : https://hyekunamatata.tistory.com/14]

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

mycobot280 pi / TCP(tool center point)  (0) 2026.06.30
mycobot 280 pi / python  (0) 2026.06.29
mycobot280_pi urdf  (0) 2026.06.22
블루로봇 밸런스 스테이지  (0) 2026.06.21
elephant robotics cobot python api  (0) 2026.06.19
Posted by 구차니
embeded/robot2026. 6. 22. 22:51

URDF 포맷의 정보를 이용하면 관절관의 거리 등이 있어서

ROS2 나 moveit2 에서 충돌 검사를 통해서 자기 파괴하지 않도록 할 수 있다고 한다.

 

moveit은 ros 1용

moveit2는 ros 2 용인듯. 그런데 단독 사용은 안되려나?

[링크 : https://github.com/moveit/moveit2]

 

<?xml version="1.0"?>
<robot  xmlns:xacro="http://www.ros.org/wiki/xacro" name="firefighter" >

<xacro:property name="width" value=".2" />


  <link name="g_base">
    <visual>
      <geometry>
        <mesh filename="package://mycobot_description/urdf/mycobot_280_pi/G_base.dae"/>
      </geometry>
      <origin xyz = "0.0 0 -0.03" rpy = "0 0 1.5708"/>
    </visual>
    <collision>
      <geometry>
        <mesh filename="package://mycobot_description/urdf/mycobot_280_pi/G_base.dae"/>
      </geometry>
      <origin xyz = "0.0 0 -0.03" rpy = "0 0 1.5708"/>
    </collision>
  </link>

  <link name="joint1">
    <visual>
      <geometry>
     <!--- 0.0 0 -0.04  1.5708 3.14159-->
       <mesh filename="package://mycobot_description/urdf/mycobot_280_pi/joint1_pi.dae"/>
      </geometry>
    <origin xyz = "0.0 0 0 " rpy = " 0 0 0"/>
    </visual>
    <collision>
      <geometry>
     <!--- 0.0 0 -0.04  1.5708 3.14159-->
       <mesh filename="package://mycobot_description/urdf/mycobot_280_pi/joint1_pi.dae"/>
      </geometry>
    <origin xyz = "0.0 0 0 " rpy = " 0 0 0"/>
    </collision>
  </link>

  <link name="joint2">
    <visual>
      <geometry>
       <mesh filename="package://mycobot_description/urdf/mycobot_280_pi/joint2.dae"/>
      </geometry>
    <origin xyz = "0.0 0 -0.06096 " rpy = " 0 0 -1.5708"/>
    </visual>
      <collision>
      <geometry>
       <mesh filename="package://mycobot_description/urdf/mycobot_280_pi/joint2.dae"/>
      </geometry>
    <origin xyz = "0.0 0 -0.06096 " rpy = " 0 0 -1.5708"/>
    </collision>
  </link>


  <link name="joint3">
    <visual>
      <geometry>
       
       <mesh filename="package://mycobot_description/urdf/mycobot_280_pi/joint3.dae"/>
      </geometry>
    <origin xyz = "0.0 0 0.03256 " rpy = " 0 -1.5708 0"/>
    </visual>
      <collision>
        <geometry>
       <mesh filename="package://mycobot_description/urdf/mycobot_280_pi/joint3.dae"/>
      </geometry>
    <origin xyz = "0.0 0 0.03256 " rpy = " 0 -1.5708 0"/>
    </collision>
  </link>


  <link name="joint4">
    <visual>
      <geometry>
       <!--- 0.0 0 -0.04 -->
       <mesh filename="package://mycobot_description/urdf/mycobot_280_pi/joint4.dae"/>
      </geometry>
    <origin xyz = "0.0 0 0.03056 " rpy = " 0 -1.5708 0"/>
    </visual>
      <collision>
      <geometry>
       <!--- 0.0 0 -0.04 -->
       <mesh filename="package://mycobot_description/urdf/mycobot_280_pi/joint4.dae"/>
      </geometry>
    <origin xyz = "0.0 0 0.03056 " rpy = " 0 -1.5708 0"/>
    </collision>
  </link>




<link name="joint5">
    <visual>
      <geometry>
       <!--- 0.0 0 -0.04 -->
       <mesh filename="package://mycobot_description/urdf/mycobot_280_pi/joint5.dae"/>
      </geometry>
    <origin xyz = "0.0 -0.001 -0.0345 " rpy = " 0 -1.5708 1.5708"/>
    </visual>
      <collision>
      <geometry>
       <!--- 0.0 0 -0.04 -->
       <mesh filename="package://mycobot_description/urdf/mycobot_280_pi/joint5.dae"/>
      </geometry>
    <origin xyz = "0.0 -0.001 -0.0345 " rpy = " 0 -1.5708 1.5708"/>
    </collision>
  </link>


  <link name="joint6">
    <visual>
      <geometry>
       <!--- 0.0 0 -0.04 -->
       <mesh filename="package://mycobot_description/urdf/mycobot_280_pi/joint6.dae"/>
      </geometry>
    <origin xyz = "0 0.00 -0.038 " rpy = " 0 0 0"/>
    </visual>
      <collision>
      <geometry>
       <!--- 0.0 0 -0.04 -->
       <mesh filename="package://mycobot_description/urdf/mycobot_280_pi/joint6.dae"/>
      </geometry>
    <origin xyz = "0 0.00 -0.038 " rpy = " 0 0 0"/>
    </collision>
  </link>


  <link name="joint6_flange">
    <visual>
      <geometry>
       <!--- 0.0 0 -0.04 -->
       <mesh filename="package://mycobot_description/urdf/mycobot_280_pi/joint7.dae"/>
      </geometry>
    <origin xyz = "0.0 0 -0.012 " rpy = " 0 0 0"/>
    </visual>
      <collision>
      <geometry>
       <!--- 0.0 0 -0.04 -->
       <mesh filename="package://mycobot_description/urdf/mycobot_280_pi/joint7.dae"/>
      </geometry>
    <origin xyz = "0.0 0 -0.012 " rpy = " 0 0 0"/>
    </collision>
  </link>


  <joint name="g_base_to_joint1" type="fixed">
    <axis xyz="0 0 0"/>
    <limit effort = "1000.0" lower = "-3.14" upper = "3.14159" velocity = "0"/>
    <parent link="g_base"/>
    <child link="joint1"/>
    <origin xyz= "0 0 0" rpy = "0 0 0"/>  
  </joint>


  <joint name="joint2_to_joint1" type="revolute">
    <axis xyz="0 0 1"/>
    <limit effort = "1000.0" lower = "-2.9321" upper = "2.9321" velocity = "0"/>
    <parent link="joint1"/>
    <child link="joint2"/>
    <origin xyz= "0 0 0.13956" rpy = "0 0 0"/>  
  </joint>


  <joint name="joint3_to_joint2" type="revolute">
    <axis xyz="0 0 1"/>
    <limit effort = "1000.0" lower = "-2.4434" upper = "2.4434" velocity = "0"/>
    <parent link="joint2"/>
    <child link="joint3"/>
    <origin xyz= "0 0 -0.001" rpy = "0 1.5708 -1.5708"/>  
  </joint>


  <joint name="joint4_to_joint3" type="revolute">
    <axis xyz=" 0 0 1"/>
    <limit effort = "1000.0" lower = "-2.6179" upper = "2.6179" velocity = "0"/>
    <parent link="joint3"/>
    <child link="joint4"/>
    <origin xyz= "  -0.1104 0 0   " rpy = "0 0 0"/>  
  </joint>



  <joint name="joint5_to_joint4" type="revolute">
    <axis xyz=" 0 0 1"/>
    <limit effort = "1000.0" lower = "-2.6179" upper = "2.6179" velocity = "0"/>
    <parent link="joint4"/>
    <child link="joint5"/>
    <origin xyz= "-0.096 0 0.06462" rpy = "0 0 -1.5708"/>  
  </joint>

  <joint name="joint6_to_joint5" type="revolute">
    <axis xyz="0 0 1"/>
    <limit effort = "1000.0" lower = "-2.7052" upper = "2.7925" velocity = "0"/>
    <parent link="joint5"/>
    <child link="joint6"/>
    <origin xyz= "0 -0.07318 -0.001" rpy = "1.5708 -1.5708 0"/>  
  </joint>

  <joint name="joint6output_to_joint6" type="revolute">
    <axis xyz="0 0 1"/>
    <limit effort = "1000.0" lower = "-3.14" upper = "3.14159" velocity = "0"/>
    <parent link="joint6"/>
    <child link="joint6_flange"/>
    <origin xyz= "0 0.0456 0" rpy = "-1.5708 0 0"/>  
  </joint>



</robot>

[링크 : https://github.com/elephantrobotics/mycobot_ros/blob/noetic/mycobot_description/urdf/mycobot_280_pi/mycobot_280_pi.urdf]

 

 

엥 ur5e 니가 왜 여기서 나와 -ㅁ-

[링크 : https://github.com/jdj2261/pykin]

[링크 : https://ropiens.tistory.com/177] << 볼 것 링크

 

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

mycobot 280 pi / python  (0) 2026.06.29
왼손 오른손 좌표계  (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 구차니
embeded/Cortex-M3 STM2026. 6. 22. 12:21

AVR 때는 자주 쓴거 같은데

stm32 되면서 함수를 통해 1개 핀에 대해서만 바꾸다 보니 불편해서 찾아보는데

머.. 결국은 레지스터 건드릴 수 밖에 없는 듯

 

ODR 값 읽고 마스킹 후에 한번에 갈아 치우는게 나을 듯

If you want the whole port (all 16 pins) get the value, then you simply write it to the ODR register:
GPIOB->ODR = 0xFFFF; //writing 1/0 in a bit position, 
sets/resets that bit. ALL BITS ARE AFFECTED no matter the value your write in.

If you want to set some pins, but not altering the other pins, with one instruction:
GPIOB->BSRR = 0x00F; //writing 1 in a bit position, 
sets that bit leaves the others as they are

If you want to reset some pins, but not altering the other pins, with one instruction:
GPIOB->BRR = 0x00F; //writing 1 in a bit position, 
clears that bit and leaves the others as they are

If you want a "portion" of a GPIO port to get an specific value, this method is 2 instructions instead of "read-change-write":
GPIOB->BRR = 0x00F; //clear the first 4 bits
GPIOB->BSRR = 0x00A; //set the desired bits in that 4-bit field

 

 ODR 정도는 low level 함수로 존재하나 보다.

using LL API:

LL_GPIO_WriteOutputPort(GPIOA,x);

[링크 : https://electronics.stackexchange.com/questions/683401/can-i-write-a-8-bit-or-16-bit-data-to-the-outport-of-the-stm32-directly]

 

wtite_bits(uint16_t cmd)
{
    uint32_t data = GPIOA -> ODR;

    data &= ~(0x1fff);
    data |= cmd & 0x1fff;
    GPIOA -> ODR = data;

    data = GPIOB -> ODR;
    data &= ~(0x0007);
    data |= (cmd & 0x8fff) >> 13;
    GPIOB -> ODR = data;
}

[링크 : https://stackoverflow.com/questions/48365156/stm32f4-write-read-16bits-into-two-8-bit-gpio-port]

'embeded > Cortex-M3 STM' 카테고리의 다른 글

stm32 uart data bit  (0) 2026.03.17
stm32 다른 영역으로 점프(부트로더)  (0) 2026.03.06
stm32cubeide cpp 변환이후 generate code  (0) 2026.02.25
mbed + stm32cube hal...?  (0) 2026.02.23
Mbed studio on ubuntu 22.04  (0) 2026.02.23
Posted by 구차니
embeded/robot2026. 6. 21. 18:57

유튜브 보다가 광고를 다 본건 또 첨이네 ㅋㅋㅋ

 

처음에는 이게 머하는 거여~ 싶었는데

보다보니 만져볼만큼 싼 곳에 들어갈 장비가 아니라는 느낌만 잔뜩~ 드는 녀석

[링크 : https://www.youtube.com/watch?v=jJ7jJ0ciF4g]

[링크 : https://www.youtube.com/watch?v=SKrBfwh6R_8]

[링크 : https://bluerobot.co.kr/]

 

아래는 유튜브 광고 찾기 ㅋㅋㅋ

[링크 : https://adstransparency.google.com/?platform=YOUTUBE&region=KR]

    [링크 : https://www.reddit.com/r/youtube/comments/1kajmpx/how_to_find_an_ad_i_saw/?tl=ko]

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

왼손 오른손 좌표계  (0) 2026.06.22
mycobot280_pi urdf  (0) 2026.06.22
elephant robotics cobot python api  (0) 2026.06.19
elephant robotics mycobot 280 pi python 예제  (0) 2026.06.16
유니버셜 로봇 polyscope 5  (0) 2026.06.16
Posted by 구차니
embeded/Cortex-M4 STM2026. 6. 19. 14:58

BOOT1 이라고 오른쪽 중간에 있는 곳을 잘 보면

BOOT0가 있는데 그걸 좌측 세번째 X3 crystal 근처의 3V 와 연결(pull up)

 

우측의 SDRAM 이라고 써있는 근처에 PA9 PA10를 USB TTL UART에 적당히~ 연결해주면 끝

[링크 : https://www.st.com/resource/en/user_manual/um1670-discovery-kit-with-stm32f429zi-mcu-stmicroelectronics.pdf]

 

잘 읽네. 그런데 속도 못 올리나.. 쩝..

$ stm32flash /dev/ttyUSB0 
stm32flash 0.5

http://stm32flash.sourceforge.net/

Interface serial_posix: 57600 8E1
Version      : 0x31
Option 1     : 0x00
Option 2     : 0x00
Device ID    : 0x0419 (STM32F42xxx/43xxx)
- RAM        : Up to 192KiB  (12288b reserved by bootloader)
- Flash      : Up to 2048KiB (size first sector: 1x16384)
- Option RAM : 65552b
- System RAM : 30KiB

 

$ stm32flash -r dump.bin /dev/ttyUSB0 
stm32flash 0.5

http://stm32flash.sourceforge.net/

Interface serial_posix: 57600 8E1
Version      : 0x31
Option 1     : 0x00
Option 2     : 0x00
Device ID    : 0x0419 (STM32F42xxx/43xxx)
- RAM        : Up to 192KiB  (12288b reserved by bootloader)
- Flash      : Up to 2048KiB (size first sector: 1x16384)
- Option RAM : 65552b
- System RAM : 30KiB
Memory read
Read address 0x08052100 (16.03%) ^C

 

'embeded > Cortex-M4 STM' 카테고리의 다른 글

stm32_programmer_cli 를 이용한 option byte 변경  (0) 2026.03.19
NUCLEO-WL55JC  (0) 2026.03.17
stm32g473 ART accelerator on/off ?  (0) 2026.02.06
stm32g473 flash doubleword  (0) 2026.02.04
STM32G47x dual bank flash  (0) 2026.02.03
Posted by 구차니
embeded/robot2026. 6. 19. 11:40

좌표는 mm 단위인가?

mycobot_280 mycobot_320

 

atom 버튼 누르면 release_all_servos() 를 실행하고

damping 모드 되어있으면 팔이 떨어지진 않을것 같으니 원하는대로 옮기고

atom 버튼 떼면

get_angles() 나 get_coords() 해서 좌표 받고, power_on() 해서 서보 고정하고 끝.. 하면 좀 편하게 되려나?

### 1. System Status
#### `get_modify_version()`
#### `clear_queue()`
#### `check_async_or_sync()`
#### `get_system_version()`
#### `get_basic_version()`
#### `get_error_information()`
#### `clear_error_information()`
#### `get_reboot_count()`

### 2. Overall Status
#### `power_on()`
#### `power_off()`
#### `is_power_on()`
#### `release_all_servos()`
#### `focus_servo(servo_id)`
#### `is_controller_connected()`
#### `read_next_error()`
#### `get_fresh_mode()`
#### `set_fresh_mode()`
#### `set_free_mode()`
#### `is_free_mode()`
#### `focus_all_servos()`
#### `set_vision_mode()`

### 3.MDI Mode and Operation
#### `get_angles()`
#### `get_angles_plan()`
#### `send_angle(id, degree, speed)`
#### `send_angles(angles, speed)`
#### `get_coords()`
#### `get_coords_plan()`
#### `send_coord(id, coord, speed)`
#### `send_coords(coords, speed, mode)`
#### `pause()`
#### `sync_send_angles(angles, speed, timeout=15)`
#### `sync_send_coords(coords, speed, mode=0, timeout=15)`
#### `get_angles_coords()`
#### `is_paused()`
#### `resume()`
#### `stop()`
#### `is_in_position(data, flag)`
#### `is_moving()`
#### `angles_to_coords(angles)`
#### `solve_inv_kinematics(target_coords, current_angles)`
#### `drag_start_record()`
#### `drag_end_record()`
#### `drag_get_record_data()`
#### `drag_get_record_len()`
#### `drag_clear_record_data()`

### 4. JOG Mode and Operation
#### `jog_angle(joint_id, direction, speed)`
#### `jog_coord(coord_id, direction, speed)`
#### `jog_rpy(end_direction, direction, speed)`
#### `jog_increment_angle(joint_id, increment, speed)`
#### `jog_increment_coord(id, increment, speed)`
#### `set_encoder(joint_id, encoder, speed)`
#### `get_encoder(joint_id)`
#### `set_encoders(encoders, speed)`
#### `get_encoders()`

### 5. Running status and Settings
#### `get_joint_min_angle(joint_id)`
#### `get_joint_max_angle(joint_id)`
#### `set_joint_min(id, angle)`
#### `set_joint_max(id, angle)`

### 6. Joint motor control
#### `is_servo_enable(servo_id)`
#### `is_all_servo_enable()`
#### `set_servo_calibration(servo_id)`
#### `release_servo(servo_id)`
#### `focus_servo(servo_id)`
#### `set_servo_data(servo_id, data_id,  value, mode=None)`
#### `get_servo_data(servo_id, data_id, mode=None)`
#### `joint_brake(joint_id)`

### 7. 9g Servo
#### `move_round()`
#### `set_four_pieces_zero()`

### 8. Servo state value
#### `get_servo_speeds()`
#### `get_servo_voltages()`
#### `get_servo_status()`
#### `get_servo_temps()`

### 9. Robotic arm end IO control
#### `set_color(r, g, b)`
#### `set_digital_output(pin_no, pin_signal)`
#### `get_digital_input(pin_no)`
#### `set_pin_mode(pin_no, pin_mode)`

### 10. Robotic arm end gripper control
#### `set_gripper_state(flag, speed, _type_1=None)`
#### `set_gripper_value(gripper_value, speed, gripper_type=None)`
#### `gripper_stop()`
#### `set_gripper_calibration()`
#### `is_gripper_moving()`
#### `get_gripper_value()`
#### `set_pwm_output(channel, frequency, pin_val)`
#### `set_HTS_gripper_torque(torque)`
#### `get_HTS_gripper_torque()`
#### `get_gripper_protect_current()`
#### `set_gripper_protect_current(current)`
#### `init_gripper()`

### 11. Set bottom IO input/output status
#### `set_basic_output(pin_no, pin_signal)`
#### `get_basic_input(pin_no)`

### 12. WLAN Setting
#### `set_ssid_pwd(account, password)`
#### `get_ssid_pwd()`
#### `set_server_port(port)`

### 13. TOF
#### `get_tof_distance()`

### 14. Communication mode
#### `set_transponder_mode(mode)`
#### `get_transponder_mode()`

### 15. Cartesian space coordinate parameter setting
#### `set_tool_reference(coords)`
#### `get_tool_reference(coords)`
#### `set_world_reference(coords)`
#### `get_world_reference()`
#### `set_reference_frame(rftype)`
#### `get_reference_frame()`
#### `set_movement_type(move_type)`
#### `get_movement_type()`
#### `set_end_type(end)`
#### `get_end_type()`

### 16. Raspberry pi -- GPIO
#### `gpio_init()`
#### `gpio_output(pin, v)`

### 17. utils (module)
#### `utils.get_port_list()`
#### `utils.detect_port_of_basic()`

[링크 : https://github.com/elephantrobotics/pymycobot/blob/main/docs/MyCobot_280_en.md]

    [링크 : https://github.com/elephantrobotics/pymycobot]

 

Gcode 읽어서 그거대로 움직이는 예제가 demo로 있다.

[링크 : https://github.com/elephantrobotics/pymycobot/tree/main/demo/myCobot_280_demo[

 

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

mycobot280_pi urdf  (0) 2026.06.22
블루로봇 밸런스 스테이지  (0) 2026.06.21
elephant robotics mycobot 280 pi python 예제  (0) 2026.06.16
유니버셜 로봇 polyscope 5  (0) 2026.06.16
로봇 tcp 확인  (0) 2025.04.25
Posted by 구차니
embeded/robot2026. 6. 16. 11:03

오랫만에 하니 다 까먹었고, 정보도 없고 ㅠㅜ

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

mc = MyCobot(PI_PORT, PI_BAUD)

mc.set_color(0,0,255) #blue light on
mc.send_angles([0, 0, 0, 0, 0, 0], 30)

 

>>> PI_PORT
'/dev/ttyAMA0'

>>> PI_BAUD
1000000

 

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

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

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

블루로봇 밸런스 스테이지  (0) 2026.06.21
elephant robotics cobot python api  (0) 2026.06.19
유니버셜 로봇 polyscope 5  (0) 2026.06.16
로봇 tcp 확인  (0) 2025.04.25
로봇 좌표계, TCP ... 2?  (0) 2024.09.02
Posted by 구차니
embeded/robot2026. 6. 16. 10:25

실습하러 갔다 왔었는데 다시 찾아보니 polyscope X 버전이 아닌 5 였나 보다.

[링크 : https://www.universal-robots.com/manuals/ko/HTML/SW5_25_1/Content/prod-usr-man/software/PolyScope/content/move_g5/move_tab_en.htm]

 

아래는 레인보우 로보틱스의 타블렛 프로그램 UI

jog mode 2로 바꾸고 하면 TCP 자세와 동일하게 조작이 가능할 듯?

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

elephant robotics cobot python api  (0) 2026.06.19
elephant robotics mycobot 280 pi python 예제  (0) 2026.06.16
로봇 tcp 확인  (0) 2025.04.25
로봇 좌표계, TCP ... 2?  (0) 2024.09.02
elephantrobotics Mycobot-pi atom  (0) 2024.07.11
Posted by 구차니
embeded/arduino(genuino)2026. 6. 12. 18:11

20x4 캐릭터 LCD

 

와우 비싸네

[링크 : https://www.devicemart.co.kr/goods/view?no=1075079]

 

회사 pcb 쓰레기통에서 적출!

을 하드웨어팀 인원에게 빼달라고 요청함 ㅋㅋ

'embeded > arduino(genuino)' 카테고리의 다른 글

아두이노 나노 전류  (0) 2025.10.14
arduino nano로 4채널 pwm 출력하기  (0) 2025.10.11
아두이노 시리얼 이벤트 핸들러  (0) 2025.10.09
퀄컴 아두이노 인수  (0) 2025.10.08
아두이노 sd 카드 spi 방식  (0) 2025.08.24
Posted by 구차니