...
POST No. 2591656
터틀봇3 opencr 펌웨어 업데이트 후 실행시 에러 문의
2021-09-01 11:05:30 g163045952171144

안녕하세요.

다음과 같이 에러가 발생하여 문의 드립니다.

 

*환경 : ubutu 20.04,  ros2 foxy, turtlbot3 buger 사용

 

1. Arduino IDE (example-> trurtlebot3_ros->turtlebot3_burger)를 사용하여 opencr 펌웨어 업로드 -> reboot -> ros2 launch turtlebot3_bringup robot.launch.py  (on Raspberry-pi 보드) 실행 시 아래 로그 처럼 Error 가 발생합니다. 해당 문제를 해결하기 위한 가이드를 부탁 드립니다. 

( 참고 사항 : e-manual (https://emanual.robotis.com/docs/en/platform/turtlebot3/opencr_setup/#opencr-setup) 의 update.sh 를 사용하여 opencr 펌웨어 업데이트 시  정상 동작)

  

... 

[robot_state_publisher-1] [INFO] [1630459226.290074111] [robot_state_publisher]: got segment wheel_right_link
[turtlebot3_ros-3] [ERROR] [1630459226.317034810] [turtlebot3_node]: Failed connection with Devices
[turtlebot3_ros-3] [INFO] [1630459226.319772566] [turtlebot3_node]: Add Motors
[turtlebot3_ros-3] [INFO] [1630459226.320392823] [turtlebot3_node]: Add Wheels
[turtlebot3_ros-3] [INFO] [1630459226.320668609] [turtlebot3_node]: Add Sensors
[turtlebot3_ros-3] terminate called after throwing an instance of 'rclcpp::exceptions::RCLError'
[turtlebot3_ros-3]   what():  could not create publisher: rcl node's context is invalid, at /tmp/binarydeb/ros-foxy-rcl-1.1.11/src/rcl/node.c:441
[ERROR] [turtlebot3_ros-3]: process has died [pid 2166, exit code -6, cmd '/home/ubuntu/turtlebot3_ws/install/turtlebot3_node/lib/turtlebot3_node/turtlebot3_ros -i /dev/ttyACM0 --ros-args --params-file /home/ubuntu/turtlebot3_ws/install/turtlebot3_bringup/share/turtlebot3_bringup/param/burger.yaml'].
^C[WARNING] [launch]: user interrupted with ctrl-c (SIGINT)
[robot_state_publisher-1] [INFO] [1630459443.189556177] [rclcpp]: signal_handler(signal_value=2)
[INFO] [robot_state_publisher-1]: process has finished cleanly [pid 2162]
 


2. Arduino IDE -> example-> trurtlebot3_ros-> turtlebot3_burger 실행 후 sketch -> export compiled binary 후 만들어진 opencr 바이너리를 Raspberry-pi 보드로 옮긴 후 update.sh 할 때 사용하면 아래 같이 에러가 발생합니다. opencr 펌웨어 업데이트 시 사용되는 update.sh 를 사용할 때 필요한 opencr 바이너리(ex:buger.opencr) 를 만드는 방법에 대한 가이드가 있으시면 공유 부탁 드립니다.

ubuntu@ubuntu:~/opencr_update$ ./update.sh $OPENCR_PORT new-burger.opencr
aarch64
arm
OpenCR Update Start..
opencr_ld_shell ver 1.0.0
opencr_ld_main
[  ] file name       : new-burger.opencr
[  ] file size       : 130 KB
[NG] not opencr fw
[  ] file name       : new-burger.opencr
[  ] file size       : 130 KB
[NG] not opencr fw
[  ] file name       : new-burger.opencr
[  ] file size       : 130 KB
[NG] not opencr fw

 


2021-09-01 11:05:30
g163045952171144
2021-09-02 10:21:52 손의형

안녕하세요,

 

불편을 끼쳐드려 죄송합니다.

ROS2 TurtleBot3 OpenCR 펌웨어에는 DYNAMIXEL2Arduino 라이브러리의 설치가 필요하며, OpenCR board manager 1.4.12 버전과 호환되는 0.3.0 버전을 선택해서 설치하시면 됩니다.

 

 

OpenCR 펌웨어의 수정은 아래와 같이 하시면 됩니다.

 

1. platform.txt 파일 수정

https://github.com/ROBOTIS-GIT/OpenCR/blob/92b7286aa1c73a765fc023aebb35840978d3b2d9/arduino/opencr_arduino/opencr/platform.txt#L68-L73 

 

수정 전

## Compile c files
recipe.c.o.pattern= "{compiler.path}{compiler.c.cmd}" {compiler.c.flags} -mcpu={build.mcu} -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} {compiler.c.extra_flags} {build.extra_flags} {build.cpu_flags} {build.common_flags} {compiler.libs.c.flags} {includes} "{source_file}" -o "{object_file}"
###

## Compile c++ files
recipe.cpp.o.pattern= "{compiler.path}{compiler.cpp.cmd}" {compiler.cpp.flags} -mcpu={build.mcu} -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} {compiler.cpp.extra_flags} {build.extra_flags} {build.cpu_flags} {build.hs_flag} {build.common_flags} {compiler.libs.c.flags} {includes} "{source_file}" -o "{object_file}"

 

수정 후

## Compile c files
recipe.c.o.pattern="{compiler.path}{compiler.c.cmd}" {compiler.c.flags} -mcpu={build.mcu} -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} {compiler.c.extra_flags} {build.extra_flags} {build.cpu_flags} {build.common_flags} {compiler.libs.c.flags} {includes} "{source_file}" -o "{object_file}"
###

## Compile c++ files
recipe.cpp.o.pattern="{compiler.path}{compiler.cpp.cmd}" {compiler.cpp.flags} -mcpu={build.mcu} -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} {compiler.cpp.extra_flags} {build.extra_flags} {build.cpu_flags} {build.hs_flag} {build.common_flags} {compiler.libs.c.flags} {includes} "{source_file}" -o "{object_file}"


2. turtlebot3_motor_driver.h 파일 수정

https://github.com/ROBOTIS-GIT/OpenCR/blob/92b7286aa1c73a765fc023aebb35840978d3b2d9/arduino/opencr_arduino/opencr/libraries/turtlebot3_ros2/include/turtlebot3/turtlebot3_motor_driver.h#L20 

 

수정 전

#include <Dynamixel2Arduino.h>

 

수정 후

#include <Dynamixel2Arduino.h>

#define TORQUE_ENABLE 1

 

감사합니다.

comment
2021-09-02 15:25:16 g163045952171144
안녕하세요.
알려주신 내용 적용 후 동작 되는 것을 확인하엿습니다.
감사합니다!
2021-09-02 15:25:16
g163045952171144
2021-09-02 10:21:52
will_son
2021-09-01 12:00:41 손의형

안녕하세요,

 

OpenCR board manager는 현재 Arm 계열의 MCU를 지원하지 않습니다.

따라서 라즈베리파이에서 실행된 아두이노 IDE를 통한 정상적인 빌드가 되지 않습니다.

라즈베리파이를 이용하여 펌웨어를 업데이트할 경우 미리 생성된 바이너리 파일을 제공된 스크립트로 업로드하셔야 합니다.

 

아두이노에서 빌드된 bin 파일을 opencr 펌웨어로 업데이트 하려면 opencr_update 파일에 포함된 opencr_ld_shell 을 사용하시면 됩니다.


라즈베리파이에서 펌웨어를 만들 경우 예시 :

$ ./opencr_ld_shell_arm make {compiled_binary_file}.bin new-burger V210911R1 

$ ./opencr_ld_shell-arm make {compiled_binary_file_name}.bin new-burger V210911R1

 

이후 펌웨어를 업로드 할 경우 예시 :

$ ./update.sh /dev/ttyACM0 new-burger.opencr

 

 

현재 최신 버전의 OpenCR board manager에서 TurtleBot3 ROS2 펌웨어를 수정할 경우 SBC와의 통신이 정상적으로 이루어지지 않는 버그가 있습니다.

https://github.com/ROBOTIS-GIT/OpenCR/issues/209 

펌웨어 수정이 필요하신 경우 OpenCR board manager의 버전을 1.4.12로 낮추어 사용하시기 바랍니다. 


감사합니다.

2021-09-01 12:00:41
will_son
2021-09-01 13:27:50 박재우

안녕하세요.  빠른 답변 감사합니다. 

 

말씀 주신 데로 OpenCR board manager의 버전을 1.4.12 로 낮추어 사용 시 다음과 같이 error 가 발생하여  

~/.arduino15/packages/OpenCR/hardware/OpenCR/1.4.12/libraries/turtlebot3_ros2/src/turtlebot3/turtlebot3_motor_driver.cpp: In member function 'bool Turtlebot3MotorDriver::get_torque()':
~/.arduino15/packages/OpenCR/hardware/OpenCR/1.4.12/libraries/turtlebot3_ros2/src/turtlebot3/turtlebot3_motor_driver.cpp:104:31: error: 'TORQUE_ENABLE' was not declared in this scope
   if(dxl.readControlTableItem(TORQUE_ENABLE, left_wheel_id_) == true


해당 .arduino15/packages/OpenCR/hardware/OpenCR/1.4.12/libraries/turtlebot3_ros2/include/turtlebot3/turtlebot3_motor_driver.h 에   #define TORQUE_ENABLE 1 를 추가하여 빌드를 시도해보았으나, 다음과 같이 error 가 발생을 합니다. 혹시 추가 변경 해야하는 사항이 있는 것인지요?  

 WARNING: library turtlebot3_ros2 claims to run on opencr architecture(s) and may be incompatible with your current board which runs on OpenCR architecture(s).
arm-none-eabi-gcc: error:     -c: No such file or directory
exit status 1
Error compiling for board OpenCR Board.


comment
2021-09-01 14:27:58 ykw4463
https://www.gitmemory.com/issue/ROBOTIS-GIT/turtlebot3/685/747131597
비슷한 내용의 질의문답입니다. 참고해주세요.
2021-09-01 14:27:58
ykw4463
2021-09-01 15:30:17 g163045952171144
공유해주신 내용은 확인 했습니다만.. OpenCR board manager의 버전을 1.4.12 로 낮추어 사용 시 TORQUE_ENABLE error 의 경우 #define 을 추가하여 처리하면 되는데 아래와 같이 Dynamixel2Arduino compile 시 "arm-none-eabi-gcc: error: -c: No such file or directory" error 가 발생합니다..
====================================================================================
...
Compiling library "Dynamixel2Arduino"
Using previously compiled file: /tmp/arduino_build_121976/libraries/Dynamixel2Arduino/actuator.cpp.o
Using previously compiled file: /tmp/arduino_build_121976/libraries/Dynamixel2Arduino/Dynamixel2Arduino.cpp.o
/home/usr1/.arduino15/packages/OpenCR/tools/opencr_gcc/5.4.0-2016q2/bin/arm-none-eabi-gcc " -c" -g -O2 -std=gnu11 -mfloat-abi=softfp -mfpu=fpv5-sp-d16 -Wall ...
arm-none-eabi-gcc: error: -c: No such file or directory
Using library turtlebot3_ros2 at version 0.0.2 in folder: /home/usr1/.arduino15/packages/OpenCR/hardware/OpenCR/1.4.12/libraries/turtlebot3_ros2
Using library Dynamixel2Arduino at version 0.4.9 in folder: /home/usr1/Arduino/libraries/Dynamixel2Arduino
...
==============================================================
2021-09-01 15:30:17
g163045952171144
2021-09-01 13:27:50
g163045952171144
2021-09-01 17:28:54 박재우

안녕하세요. 

앞서 애기해주신 "OpenCR board manager에서 TurtleBot3 ROS2 펌웨어를 수정할 경우 SBC와의 통신이 정상적으로 이루어지지 않는 버그" 와 관련하여,  

OpenCR board manager의 버전을 1.4.12 로 낮추어 빌드 에러 수정(turtlebot3_motor_driver.h, platform.txt file 수정) 후 적용하여, 

ros2 launch turtlebot3_bringup robot.launch.py 실행 시 에도 동일하게 turtlebot3.cpp check_device_status() 의 "dxl_sdk_wrapper_->is_connected_to_device()" 에서 fail 이나며 아래와 같이 error log 가 나옵니다.

... 

[turtlebot3_ros-3] [ERROR] [1630482332.491278995] [turtlebot3_node]: Failed connection with Devices

...

 

이에, TurtleBot3 ROS2 펌웨어 수정 후 SBC와의 통신이 정상적으로 이루어 지기 위해 사용 되어야 하는 Opencr, Dynamixel2Arduino 의 버전을 문의 드립니다.

추가로 위 Error 를 해결하기 위해 OpenCR 펌웨어 부분에 수정 해야 하는 부분이 별도로 있는지 문의 드립니다. 


2021-09-01 17:28:54
g163045952171144
답변달기
웹에디터 시작 웹 에디터 끝