Xc330모델 라즈베리파이에서 사용하고 싶습니다

안녕하세요 이번에 XC330-M288-T 모델을 구매해서 테스트 해보려고 하고 있습니다.

우선 현재 세팅은 RPi 3B+ -[USB 연결]- U2D2 / U2D2 PHB -[TTL 연결]- XC330 으로 구성되어 있습니다.

라즈베리파이의 OS는 Bullseye 입니다.

모터에 문제가 있는지를 확인하기 위해 윈도우 환경에서 다이나믹셀 위자드로 구동시켰을 때 모든 것이 정상작동 하고 있음을 확인하였습니다.

그러나 라즈베리파이에서 사용할 때는 문제가 발생합니다.

  1. 다이나믹셀 SDK에 올라와있는 메뉴얼로 따라했을 때
    protocol1_0 혹은 protocol2_0 둘 다 사용해보았으며 ping.py와 read_write.py를 구동시켰을 때 다음과 같은 결과를 얻을 수 있었습니다.
    Succeeded to open the port
    Succeeded to change the baudrate
    [TxRxResult] There is no status packet!
    분석해본 결과 이는 COMM_RX_TIMEOUT 에러에 해당하는 것까지는 확인하였으나 이 이후에 해결책에 대해 알아내지 못하였습니다.

  2. DYNAMIXEL Quick Start Guide for Raspberry Pi (C language) - YouTube 에 나와있는 영상대로 해보았을 때
    우선 sudo apt install gcc-5가 실행되지 않습니다.
    E: gcc-5 패키지를 찾을 수 없습니다
    라는 결과를 내보냅니다.
    그래도 build-essential은 설치가 진행되며, gcc와 g++모두 기존에 설치되어 있는 패키지가 있으므로 그 다음 스텝으로 진행해보았을 때 make가 되지 않습니다. 전체 결과를 복붙하기엔 너무 길어서 몇 가지만 남기자면
    mkdir -p ./.objects/
    g++ -shared -fPIC -o [~생략~] ./.objects/port_handler_linux.o -lrf
    [~생략~]…/…/include/dynamixel_sdk/packet_handler.h:82: first defined here
    [~생략~~여기서부터는 뒤에 first defined here가 지속적으로 나옵니다]
    collect2: error: ld returned 1 exit status
    make: *** [Makefile:68: libdxl_sbc_c.so] 오류 1
    로 끝이 납니다.

현재 위 두 가지 방법을 진행하였는데 막혀서 더 이상 진행을 못하고 있는 상태입니다.

혹시 해결책을 아신다면 공유 부탁드립니다.

안녕하세요,

아래 커맨드로 현재 설치된 gcc 버전을 확인해보시기 바랍니다.

$ gcc -v

빌드시 오류는 DynamixelSDK/c/build/linux_sbc에서 make 했을 때 발생하나요?
빌드시 에러가 발생하는 부분을 붙여넣어주시면 도움이 될것 같습니다.

빌드 과정에서 오류가 발생한 경우 아래 커맨드로 복사된 라이브러리와 오브젝트 파일을 삭제하고 재시도해보시기 바랍니다.

$ make clean

안녕하세요. 확인이 늦었습니다.

추후에 안내해주신 사항들을 토대로 재 진행한 후 결과를 업로드 해보겠습니다.

현재는 RPi 3B+와 OPENRB–150 모델을 시리얼 통신하는 방식으로 제어하는 방식으로 바꿔 진행했고, 성공적으로 컨트롤 하고 있습니다.

좋은 정보 알려주셔서 감사합니다.

1 Like

해당 문제와 같은 어려움을 겪고 있는데 현재 gcc version은 10으로 나오는데 계속해서 DynamixelSDK/c/build/linux_sbc 에서 make 했을 때
pi@raspberrypi:~ $ cd ~/DynamixelSDK/c/build/linux_sbc

pi@raspberrypi:~/DynamixelSDK/c/build/linux_sbc $ make

mkdir -p ./.objects/

g++ -shared -fPIC -o ./libdxl_sbc_c.so ./.objects/group_bulk_read.o ./.objects/group_bulk_write.o ./.objects/group_sync_read.o ./.objects/group_sync_write.o ./.objects/packet_handler.o ./.objects/port_handler.o ./.objects/protocol1_packet_handler.o ./.objects/protocol2_packet_handler.o ./.objects/port_handler_linux.o -lrt

/usr/bin/ld: ./.objects/group_bulk_write.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/packet_handler.h:82: multiple definition of `packetData’; ./.objects/group_bulk_read.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/packet_handler.h:82: first defined here

/usr/bin/ld: ./.objects/group_bulk_write.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/port_handler.h:48: multiple definition of `g_is_using’; ./.objects/group_bulk_read.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/port_handler.h:48: first defined here

/usr/bin/ld: ./.objects/group_bulk_write.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/port_handler.h:47: multiple definition of `g_used_port_num’; ./.objects/group_bulk_read.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/port_handler.h:47: first defined here

/usr/bin/ld: ./.objects/group_sync_read.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/packet_handler.h:82: multiple definition of `packetData’; ./.objects/group_bulk_read.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/packet_handler.h:82: first defined here

/usr/bin/ld: ./.objects/group_sync_read.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/port_handler.h:48: multiple definition of `g_is_using’; ./.objects/group_bulk_read.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/port_handler.h:48: first defined here

/usr/bin/ld: ./.objects/group_sync_read.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/port_handler.h:47: multiple definition of `g_used_port_num’; ./.objects/group_bulk_read.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/port_handler.h:47: first defined here

/usr/bin/ld: ./.objects/group_sync_write.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/packet_handler.h:82: multiple definition of `packetData’; ./.objects/group_bulk_read.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/packet_handler.h:82: first defined here

/usr/bin/ld: ./.objects/group_sync_write.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/port_handler.h:48: multiple definition of `g_is_using’; ./.objects/group_bulk_read.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/port_handler.h:48: first defined here

/usr/bin/ld: ./.objects/group_sync_write.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/port_handler.h:47: multiple definition of `g_used_port_num’; ./.objects/group_bulk_read.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/port_handler.h:47: first defined here

/usr/bin/ld: ./.objects/packet_handler.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/packet_handler.h:82: multiple definition of `packetData’; ./.objects/group_bulk_read.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/packet_handler.h:82: first defined here

/usr/bin/ld: ./.objects/packet_handler.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/port_handler.h:47: multiple definition of `g_used_port_num’; ./.objects/group_bulk_read.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/port_handler.h:47: first defined here

/usr/bin/ld: ./.objects/packet_handler.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/port_handler.h:48: multiple definition of `g_is_using’; ./.objects/group_bulk_read.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/port_handler.h:48: first defined here

/usr/bin/ld: ./.objects/port_handler.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/port_handler.h:48: multiple definition of `g_is_using’; ./.objects/group_bulk_read.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/port_handler.h:48: first defined here

/usr/bin/ld: ./.objects/port_handler.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/port_handler.h:47: multiple definition of `g_used_port_num’; ./.objects/group_bulk_read.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/port_handler.h:47: first defined here

/usr/bin/ld: ./.objects/protocol1_packet_handler.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/packet_handler.h:82: multiple definition of `packetData’; ./.objects/group_bulk_read.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/packet_handler.h:82: first defined here

/usr/bin/ld: ./.objects/protocol1_packet_handler.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/port_handler.h:48: multiple definition of `g_is_using’; ./.objects/group_bulk_read.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/port_handler.h:48: first defined here

/usr/bin/ld: ./.objects/protocol1_packet_handler.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/port_handler.h:47: multiple definition of `g_used_port_num’; ./.objects/group_bulk_read.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/port_handler.h:47: first defined here

/usr/bin/ld: ./.objects/protocol2_packet_handler.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/packet_handler.h:82: multiple definition of `packetData’; ./.objects/group_bulk_read.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/packet_handler.h:82: first defined here

/usr/bin/ld: ./.objects/protocol2_packet_handler.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/port_handler.h:48: multiple definition of `g_is_using’; ./.objects/group_bulk_read.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/port_handler.h:48: first defined here

/usr/bin/ld: ./.objects/protocol2_packet_handler.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/port_handler.h:47: multiple definition of `g_used_port_num’; ./.objects/group_bulk_read.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/port_handler.h:47: first defined here

/usr/bin/ld: ./.objects/port_handler_linux.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/port_handler.h:47: multiple definition of `g_used_port_num’; ./.objects/group_bulk_read.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/port_handler.h:47: first defined here

/usr/bin/ld: ./.objects/port_handler_linux.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/port_handler.h:48: multiple definition of `g_is_using’; ./.objects/group_bulk_read.o:/home/pi/DynamixelSDK/c/build/linux_sbc/…/…/include/dynamixel_sdk/port_handler.h:48: first defined here

collect2: error: ld returned 1 exit status

make: *** [Makefile:68: libdxl_sbc_c.so] Error 1

이러한 오류가 나는데 혹시 문제점이 뭔지 알고 계신가요

According to this post, you will need to add this flag “-fcommon” to the make file for the newer gcc in Bulleyes, but I have not tried it yet myself.