
































BYD Yangwang U7
후륜 좌우 독립구동. 전륜은 내연기관인데? 좌우독립 구동은 어떻게 가능??
https://youtu.be/_aUPAD-6Cbs?si=3ppKcq1ISBqtP8WQ
동영상에는 전륜 내연기관으로 나오는데, 사이드 주차 가능한 차종은 4륜 독립구동 모델인듯



양왕 U8 은 4륜 독립구동 모터
https://carnewschina.com/2023/01/05/byd-yangwang-u8-r1-launched-in-china/



(1) 키움 화면번호 0343 - 기간별 주문체결상세 에서 엑셀로 보내기
(2) 엑셀에서 Alt+F11 눌러서 VBA(Visual Basic Application) 실행하고, 삽입-모듈 메뉴선택.
(3) 2개 행을 1개 행으로 병합하는 스크립트 붙여 넣고 F5 눌러서 실행


엑셀에서 Alt+F11 누르고 삽입-모듈 선택

아래 스크립트를 붙여넣고, F5 눌러서 실행
프롬프트를 이용해서 chatGPT로 만듦
https://chatgpt.com/share/689895cb-d404-8010-b0f2-1c2443c9eab2
엑셀 VBA 프로그램 작성. 짝수번째 행의 내용을 홀수번째 행의 뒤쪽에 이어 붙이고, 짝수번째 행은 삭제해. 이 동작을 맨 마지막 행까지 수행.
Sub MergeEvenRowsToOdd()
Dim ws As Worksheet
Dim lastRow As Long
Dim r As Long
Dim lastColOdd As Long, lastColEven As Long
Set ws = ThisWorkbook.ActiveSheet
Application.ScreenUpdating = False
' 마지막 행 찾기
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
' 아래에서 위로 반복 (삭제 시 인덱스 꼬임 방지)
For r = lastRow To 2 Step -1
If r Mod 2 = 0 Then ' 짝수 행이면
' 홀수 행의 마지막 열 찾기
lastColOdd = ws.Cells(r - 1, ws.Columns.Count).End(xlToLeft).Column
' 짝수 행의 마지막 열 찾기
lastColEven = ws.Cells(r, ws.Columns.Count).End(xlToLeft).Column
' 짝수 행 내용을 홀수 행 뒤에 붙이기
ws.Range(ws.Cells(r, 1), ws.Cells(r, lastColEven)).Copy _
Destination:=ws.Cells(r - 1, lastColOdd + 1)
' 짝수 행 삭제
ws.Rows(r).Delete
End If
Next r
Application.ScreenUpdating = True
End Sub

종목번호 앞에 작은따옴표 붙여준다 =CONCATENATE("'",D2)
필요한 열을 구글 시트로 복사한다

부팅이 안되는 PC의 드라이브에 기존 설치된 윈도우 키를 검색/추출하는 방법이다
how to find windows key from non-booting drive
전제조건 : 죽은PC 드라이브에 기존 사용하던 정품 Windows 폴더는 남아 있어야 한다
1) 부팅이 안되는 PC에서 드라이브를 분리한다
2) 다른 PC나 노트북에 드라이브를 연결한다
3) 아래 블로그에 나온 KeyFinder 프로그램을 다운로드 한다
다운로드 링크
4) Tools 메뉴에서 Load Hive를 선택한다
5) 죽은PC의 드라이브의 Windows 폴더를 지정해주면 윈도우키를 찾아준다


https://www.winhelponline.com/blog/recover-product-keys-unbootable-windows-pc/
How to Recover Product Keys Offline from Unbootable Windows PC
Recover Product Keys from a dead PC using ProduKey or KeyFinder. Loading the SOFTWARE registry hive and retrieving the product keys offline from the hard disk.
www.winhelponline.com

원리
\Windows\System32\config\ 폴더 밑에
윈도우 레지스트리 파일이 저장되어 있는데
레지스트리 하위에 구분된 파일(?)을 하이브셋이라고 부른다
그중에 SOFTWARE 하이브셋에서 윈도우키를 검색해주는 프로그램이다.
다른 윈도우 키 검색 프로그램도 설치해봤는데
외부 드라이브에서 검색은 해주지만 유료인 프로그램도 있고
설치하면 바이러스라고 실행이 안되는 프로그램도 있었다
위에 설명한 프로그램은 정상 실행되었다.
아래 프로그램은 찾아주긴 하지만 유료 결제로 구를 해야 보여준다

아래 프로그램은 외부 디스크 복구기능은 있는데, 동작하지 않음


아래 페이지에 나온 프로그램중 2개는 실패
https://www.easeus.co.kr/key-finder/recover-product-key-from-dead-or-unbootable-pc.html
죽은 또는 부팅할 수 없는 PC에서 제품 키를 복구하는 방법
죽거나 부팅할 수 없는 PC에서 제품 키를 복구하는 방법은 무엇입니까? 이 기사에서는 충돌한 장치에서 제품 키를 검색하는 세 가지 소프트웨어를 보여줍니다.
www.easeus.co.kr
위 페이지에 소개된 첫번째 프로그램은 외부 드라이브 읽는 동작이 안됨

아래 프로그램은 바이러스라고 백신에 의해 실행이 안됨

2022년 12월 스페인 기차 렌페 예약 경험
<개요>
[요약] 한달전쯤 오픈하고, 일찍 살수록 저렴
스페인 기차 이름은 Renfe(렌페) 라고 함
탑승날자가 가까울수록 요금이 비싸짐
보통 한달 전에 티켓이 오픈할때 사는게 제일 저렴 (운행 구간에 따라 오픈 일정 다름)
<렌페 홈페이지 접속 방법 & 가입>
[요약] 공홈에서 선택 가능한 좌석 종류가 더 다양했음. PC/스마트폰 모두 VPN 사용 해야함
네이버에서 렌페 예약 검색하는 한국 렌페 싸이트 통해서 예약 가능
한국 렌페 싸이트에는 Preimium 좌석 등급이 조회가 안되는데 스페인 홈페이지는 조회 됨
스페인 렌페 홈페이지는 VPN을 통해야 접속 가능
크롬 브라우저 "확장프로그램"중에 free VPN 검색해서 설치하고 렌페 접속함 (무료라서 그런가 속도가 느림)
렌페 홈페이지 회원가입 (이메일, 여권번호, 집주소, 전화번호 등 입력)
기재한 이메일로 렌페 액세스 코드를 받고 입력하면 됨
렌페 홈페이지에서 언어를 영어(inglés)로 선택해도 일부 언어는 스페인어로 나옴 ㅠㅠ
<렌페 예약 방법>
[요약] 국내 신용카드 안됨. Paypal 로그인 먼저해 놓고 결제 가능
이동 구간을 검색하고 좌석 등급을 선택
동승자 이름과 여권번호도 입력
결제는 한국 신용카드로는 실패했고, Paypal 로 가능했음
렌페 결제 전에 새로운 탭을 열고 Paypal에 로그인 해야 렌페 결제창에서 페이팔 가입했던 이메일 주소가 보임
Paypal에 등록한 한국 신용카드 선택해서 결제함
<렌페 좌석 등급>
Basico : 가장 저렴. 환불불가
Elige(엘리제) : 스탠다드 좌석, 취소수수료 30%, 변경수수료 20%
Elige Confort (엘리제 컴포트) : 컴포트 좌석
Premium (프리미엄) : 취소수수로 5%, 간단한 식음료, 넓은 좌석(comfort 좌석), 3열 좌석(엉덩이 폭이 넓다)



<렌페 결제 팁>
[요약] PC 홈페이지에서는 실시간으로 요금이 변함. 스마트폰 앱으로 하니 저렴한 티켓 있음
약 30일 뒤 탑승할 티켓이 오픈된 날 PC에서 렌페 홈페이지 접속해서 티켓을 알아보는 중에 가격이 변했다
Premium 등급을 골랐는데, 마지막에 결제가 안됐다. 이 요금으로 구입할 수 없다는 에러가 떴음
처음 과정부터 다시 했더니 77.05유로 였던 요금이 85.35유로로 올랐음
다시 결제하려고 했는데 이전 프로세스가 진행중이라 실패했다는 에러가 떴음
다시 예약했더니 101.95유로로 올랐음. 결제는 됐음
혹시나 싶어서 스마트폰으로 접속했더니 77.05유로 티켓이 있음. 결제도 됐음.
PC 홈페이지 들어가서 my journey 누르고 예약했던 티켓보니 PC/스마트폰 티켓 모두 있음
PC에서 더 비싸게 예약한 항목 오른쪽에 X모양 취소버튼 누르니 전액 환불 됐음
원래는 35유로 수수로 제외하고 환불인데, 예약하고 15분정도 지나서 환불하니 전액 환불됨







민팃 중고보상 반납 이벤트가 있어서
민팃 기계에 반납하려고 했더니, 민팃커넥트 앱을 설치해야 하는데, 안드로이드 버전이 낮아서 설치 안됨.
갤럭시 S3 SHV-E210L 은 LGU+ 모델인데 킷켓4.4.4 까지만 지원을 함.
민팃커넥트는 안드로이드 5.0(롤리팝?) 이상부터 지원하는듯.
오래된 자료들을 찾아가면 삽질을 여러번 한끝에 커스톰 롬을 올림
※ 민팃커넥트 설치하고 실행하면 정품 롬이 아니라서 판매할 수 없다고 나옴
결국 민팃 고객센터 연락해서 폐폰으로 판매하기로 함
https://m.blog.naver.com/ox1238/222034063416
갤럭시 S3 LTE SHV-E210K, SHV-E210L 리니지 커스텀 롬 성공(LG 내용 업데이트 2022.04.18)
갤럭시 s3 lte SHV-E210K, SHV-E210L 기기 리니지 커스텀 롬 성공하였습니다. 다들 U+는 호환이...
blog.naver.com
위 블로그에서 LGU+ 모델 단말기 적용 되는
커스텀롬 버전, 오딘 버전, TWRP 버전을 찾았음
갤럭시 S3 커스텀 롬
- SHV-E210S/K/L의 기기 국제 버전 모델명 https://en.wikipedia.org/wiki/Samsung_Galaxy_S_III#Model_variants GT-I9305 와 GT-I9300 도 SoC , CPU, GPU 가 동일 GT-I9305 용을 국내판에 올리면 문제 발생한다는 설이 있음(확인중) G
codens.info
커스텀롬 잘못 올려서 부팅이 안되면 (=벽돌되면) 정품 롬을 다시 올린다
https://stockromfiles.com/samsung-galaxy-s3-gt-i9300-stock-rom/
Download Samsung Galaxy S3 GT-I9300 Stock ROM - Stock ROM Files
Download Samsung Galaxy S3 GT-I9300 Stock ROM (Stock ROM), flash it in your device using Odin Tool and enjoy the native Android experience again.
stockromfiles.com
SHV-210L 정품롬 구글 드라이브 다운로는 안됨. 설명은 잘됨
[Galaxy S3] 갤럭시 S3 순정 복구 & 벽돌 현상 복구
이 포스팅은 Samsung Galaxy S3 3G SKT 기준입니다. (SHW-M440S) 다른 통신사 분들은 해당 펌웨어에 맞게 하시면 적용됩니다. 루팅이다 커롬이다 뭐다 잡것들 다 올리다 보면 싸그리 순정으로 돌아가고 싶
palpit.tistory.com
TWRP 사용법 : TWRP 버전과 기계가 안 맞으면 internal storage가 0MB 크기로 나옴. TWRP 다시 설치
https://palpit.tistory.com/733
[Galaxy S3] 갤럭시 S3 CyanogenMod 롬 올리기 !! (마시멜로우)
Samsung Galaxy S3 3G 기종 커스텀 롬 올리기를 진행하도록 하겠습니다!! 이번 롬은 최강의 커롬 CyanogenMod 안드로이드 버전은 6.0.1 마시멜로우(marshmallow) 입니다. 작동되는 상황과 이슈 상황입니다. What
palpit.tistory.com
https://blog.naver.com/PostView.nhn?blogId=bsofdeath&logNo=220918295240
갤럭시 S3에 리니지OS(lineageOS) 비공식 빌드 올려보기
/ 알아두면 좋은 팁 / 갤럭시 S3에 리니지OS(LineageOS) 비공식 빌드 올려보기안녕하세요, 블루스크...
blog.naver.com
S3용 커스텀롬 종류
https://www.getdroidtips.com/custom-rom-samsung-galaxy-s3/

개발환경 : Ubiquity Robotics 우분투 이미지 (우분투 16.04(Xenial) + ROS1 (kinetic))
라즈베리파이용 이미지 다운로드 : https://learn.ubiquityrobotics.com/noetic_pi_image_downloads
(중요) 2020-02-10-ubiquity-xenial-lxde 를 설치할것
~/catkin_ws/src 폴더에서
git clone -b v0.0.3 https://github.com/CygLiDAR-ROS/cyglidar_d1.git
catkin_make로 시그라이다 빌드
라이다 토픽이 보이지 않는다면 USB 드라이버 설치 : https://belitino.tistory.com/140
internal compile error : Killed (program ccplus) -> swap 메모리를 확보한다 : https://changun516.tistory.com/m/105d
PL2303 드라이버가 정상 동작 하는지 확인 : $dmesg
개발환경 설명서 : https://edu.irobot.com/learning-library?robotValue=Advanced%20Create%203%20Robot&toggle=lessons
로봇에 와이파이 패스워드를 알려줘야 함
https://edu.irobot.com/learning-library/create-3-getting-started
로봇 상태를 액세스 포인트 모드로 바꿈

로봇에 접속하고, 웹브라우저에서 192.168.10.1 주소로 접속해서
와이파이 찾고 패스워드 알려주면 로봇이 와이파이에 접속함
펌웨어는 업데이트 되어 있음

로봇을 재부팅하면 로봇이 와이파이 라우터에서 할당받은 192.168.0.xx 주소로 접속 가능
Application 메뉴에서
로봇이름을 정해주면 해당 이름으로 토픽이 publish 됨
ROS2_DOMAIN_ID 값은 기본 '0'임. 노트북에서도 DOMAIN_ID를 같은 걸로 해야 통신이 됨.
Application restart 하면 변경 사항이 적용됨
노트북에서 ros2 topic list 하면 CREATE3가 보내온 토픽을 볼 수 있다
ROS2는 roscore가 없이 DDS 방식으로 노드끼리 토픽을 주고 받을 수 있다
단 ROS2_DOMAIN_ID가 동일한 장치끼리만 주고 받을 수 있으니 주의한다.
ros2 topic list 하면
앗 아래 캡처 그림을 보니 ROS1 명령인 rostopic list 로 CREATE3 토픽이 보이네??
ROS1에서도 로봇 토픽을 받을 수 있으면 굳이 ROS2용 cartographer를 안해도 되나??

노트북에서
ros2 action send_goal /cygbot/dock irobot_create_msgs/action/DockServo "{}"
이렇게 액션 명령을 보내면 CREATE3가 충전데크에서 분리되는 동작을 한다.
/cygbot은 Application 메뉴에서 설정한 CREATE3의 이름이다
노트북 : 우분투 20.04 (focal) + ROS1 (noetic) + ROS2 (foxy)
노트북 ROS 설치 방법 : https://docs.ros.org/ 에서 해당 버전 install 설명 참고
혹시 다른 버전을 설치 했다면, ROS 삭제 방법 ↓
ROS 버전 확인
rosversion -d
printenv ROS_DISTRO
ROS 패키지 삭제 (아래에서 취사 선택)
sudo apt-get purge --auto-remove ros-foxy-desktop
sudo apt-get purge --auto-remove ros-foxy-*
sudo apt-get purge ros-*
sudo apt-get autoremove
sudo rm /etc/ros/rosdep/sources.list.d/20-default.list
sudo apt update
sudo apt autoremove
sudo apt upgrade
ROS1은 HOST에서 roscore가 동작해야 한다.
라즈베리파이에 설치한 Ubiquity 이미지는 부팅하면 자동으로 roscore가 실행된다.
따라서 라즈베리파이 ip 주소를 HOST로 등록해야 한다.
노트북 bash에 다음 문구를 넣어준다 (ip 주소는 라즈베리파이 주소)
export ROS_HOSTNAME=192.168.0.xx
export ROS_MASTER_URI=http://192.168.0.xx:11311
노트북에서 rostopic list 를 실행하면 라즈베리파이에 연결된 cyglidar가 보낸 토픽을 볼 수 있다.
/opt/ros/noetic/setup.bash #ROS1 환경을 로딩해야 ROS1 명령이 동작한다
rostopic list -v
>> Published topics:
>> * /scan_2D [sensor_msgs/PointCloud2] 1 publisher
라즈베리파이에 연결된 시그라이다 토픽을 ROS2 로 변경해야함
노트북에서 ROS2 용 워크스페이스 폴더와 소스 폴더를 만든다
mkdir ~/ros2_ws/src
src 폴더에서 git clone https://github.com/ros2/ros1_bridge.git
bash 파일에 아래 문장을 추가해 준다. ROS1 환경과 ROS2 환경을 필요에 맞게 로딩해야 동작한다
alias로 r1, r2 를 만들어서 ROS1, ROS2 환경을 로딩하도록 만든다.
export ROS1_INSTALL_PATH=/opt/ros/noetic
export ROS2_INSTALL_PATH=~/ros2_ws/install
source ${ROS1_INSTALL_PATH}/setup.bash
source ${ROS2_INSTALL_PATH}/setup.bash
alias r1='source ${ROS1_INSTALL_PATH}/setup.bash'
alias r2='source ${ROS2_INSTALL_PATH}/setup.bash '
빌드하기 전에 src 폴더에 있는 static_bridge.cpp 를 수정한다
ROS1으로 퍼블리쉬되는 /scan_2D 토픽을 ROS2용 type로 바꿔줌
// bridge one example topic
std::string topic_name = "scan_2D";
std::string ros1_type_name = "sensor_msgs/PointCloud2";
std::string ros2_type_name = "sensor_msgs/msg/PointCloud2";
소스코드를 수정하고 ~/ros2_ws 폴더에서 아래 명령을 실행해서 빌드한다
colcon build --symlink-install --packages-skip ros1_bridge
colcon build --symlink-install --packages-select ros1_bridge --cmake-force-configure
이유는 모르겠지만 빌드하는데 30분 이상 걸린다.
ROS2 galactic 에서는 빌드 에러가 없지만, foxy에서는 에러가 나므로 추가 작업을 해줘야 한다.
관련 패키지 디펜던시 에러가 나면 해당 패키지를 설치해 줘야 한다.
[0.561s] WARNING:colcon.colcon_core.shell:The following packages are in the workspace but haven't been built:
- turtlebot3_msgs
- xmlrpcpp
sudo apt install xmlrpcpp
만약 아래 같은 에러가 난다면
--- stderr: ros1_bridge
/usr/bin/ld: libros1_bridge.so: undefined reference to `ros1_bridge::Factory<controller_manager_msgs::ControllerState_<std::allocator<void> >,
controller-manager-msgs 패키지가 문제가 되므로 일단 해당 패키지를 삭제 하고 ROS1_Bridge를 빌드한뒤 다시 설치.
관련 해결책 : https://github.com/ros2/ros1_bridge/issues/329
sudo apt remove ros-noetic-controller-manager-msgs #ROS1 noetic 해당 패키지 삭제
sudo apt remove ros-foxy-controller-manager-msgs #ROS2 foxy 해당 패키지 삭제
colcon build
sudo apt install ros-foxy-controller-manager-msgs #재설치 (이건 안해도 동작은 하더라)
에러가 없다면 아래와 같이 31분에 걸쳐 빌드가 성공한다
[Processing: ros1_bridge]
Finished <<< ros1_bridge [31min 17s]
Summary: 15 packages finished [31min 27s]
아래 명령으로 static_bridge 노드를 실행하면 라즈베리파이가 보낸 ROS1 scan_2D 토픽을 받아서 ROS2로 바꿔준다
ros2 run ros1_bridge static_bridge
[INFO] [1657369620.191703541] [ros_bridge]: create bidirectional bridge for topic scan_2D
[INFO] [1657369620.881221371] [ros_bridge]: Passing message from ROS 1 sensor_msgs/PointCloud2 to ROS 2 sensor_msgs/msg/PointCloud2 (showing msg only once per type)
아래 명령으로 ROS2로 수신된 토픽을 확인 할 수 있다
ros2 topic list
이 소스가 ROS2 galctic 버전에 설치하면 에러가 난다. 그래서 ROS2 foxy 버전을 깔아야 함.
https://www.theconstructsim.com/ros2-qa-223-how-to-get-robot-position-using-transforms-in-ros2/
위 싸이트에 나온 turtlebot SLAM cartographer를 참고했다
cd ~/ros2_ws/src
git clone -b foxy-devel https://github.com/ROBOTIS-GIT/turtlebot3
git clone -b foxy-devel https://github.com/ROBOTIS-GIT/turtlebot3_msgs
git clone -b foxy-devel https://github.com/ROBOTIS-GIT/turtlebot3_simulations
cd ~/ros2_ws/
colcon build
이렇게 하면 패키지 dependancy 에러가 몇개 뜨므로 관련 패키지를 설치해 준다.
gazebo 패키지 에러가 나면 : sudo apt install ros-foxy-gazebo*
dynamixel_sdk _패키지 에러가 나면
의 싸이트에서 foxy용 dynamixel_sdk ZIP 파일을 다운받고 ~/ros2_ws/src 폴더에 압축을 해제한다.
src폴더 밑에 압축해제한 폴더 이름을 dunamixel_sdk 로 수정해야 빌드 된다.
colcon build --packages-select dynamixel_sdk-release
xmlrpcpp 에러가 나면 설치해 준다
git clone https://github.com/bpwilcox/xmlrpcpp
colcon build --packages-select xmlrpcpp
#ERROR
Could not find a package configuration file provided by "gazebo" with any
of the following names:
gazeboConfig.cmake
gazebo-config.cmake
Add the installation prefix of "gazebo" to CMAKE_PREFIX_PATH or set
"gazebo_DIR" to a directory containing one of the above files. If "gazebo"
provides a separate development package or SDK, be sure it has been
installed.
#SOLUTION : INSTALL GAZEBO PACKAGE for Foxy
https://answers.ros.org/question/335833/how-to-solve-the-error-of-could-not-find-a-package-gazebo/
sudo apt install ros-foxy-gazebo*
#ERROR
--- stderr: turtlebot3_node
CMake Error at CMakeLists.txt:19 (find_package):
By not providing "Finddynamixel_sdk.cmake" in CMAKE_MODULE_PATH this
project has asked CMake to find a package configuration file provided by
"dynamixel_sdk", but CMake did not find one.
Could not find a package configuration file provided by "dynamixel_sdk"
with any of the following names:
dynamixel_sdkConfig.cmake
dynamixel_sdk-config.cmake
Add the installation prefix of "dynamixel_sdk" to CMAKE_PREFIX_PATH or set
"dynamixel_sdk_DIR" to a directory containing one of the above files. If
"dynamixel_sdk" provides a separate development package or SDK, be sure it
has been installed.
#SOLUTION
#STEP 1 : looking for "CMakeLists.txt"
Error message said turtlebot3_node node's CMakeLists.txt has an error
--- stderr: turtlebot3_node
CMake Error at CMakeLists.txt:19 (find_package):
#or you can search all folders.
find ~/ros2_ws/ -name "CMakeLists.txt" 2>/dev/null
/home/orasman/ros2_ws/src/turtlebot3/turtlebot3_node/CMakeLists.txt
#NOT WORKING
find_package(dynamixel_sdk REQUIRED) @ /home/orasman/ros2_ws/src/turtlebot3/turtlebot3_node/CMakeLists.txt
#find dynamixel_sdk : https://github.com/robotis-ros2-release/dynamixel_sdk-release/tree/debian/foxy/dynamixel_sdk
git clone https://github.com/robotis-ros2-release/dynamixel_sdk-release.git
colcon build --packages-select dynamixel_sdk-release
[0.324s] WARNING:colcon.colcon_core.package_selection:ignoring unknown package 'dynamixel_sdk-release' in --packages-select
Summary: 0 packages finished [0.34s]
download foxy version from github
change the folder name as dynamixel_sdk
then it can built
colcon build --packages-select dynamixel_sdk
빌드를 완료하고
ros2 launch turtlebot3_cartographer cartographer.launch.py
를 실행했는데
PackageNotFoundError("package 'cartographer_ros' not found
이렇게 패키지를 못 찾는다는 에러가 나면 해당 패키지를 설치해 준다
(출처 : https://answers.ros.org/question/327518/cant-find-package-cartographer_ros/)
sudo apt install ros-foxy-cartographer-ros
이렇게 하면 터미널을 3개 열어서 gazebo, teleop_keyboard, cartographer 를 실행하면
키보드로 터틀봇을 움직으면 map 이 만들어 진다
| ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py | ros2 run turtlebot3_teleop teleop_keyboard |
| ros2 launch turtlebot3_cartographer cartographer.launch.py |


/scan_2D 토픽을 ROS2 토픽으로 바꿨으니 이걸 cartographer 입력으로 넣어준다
CREATE3에서 올라온 /imu /odometer 등의 토픽을 /tf로 만들어서 cartographer 입력으로 넣어준다
keyop 소스를 변경해서 CREATE3를 원격 조정한다 (CREATE3가 제공하는 ros2 액션 명령 이용)
ros1_bridge was built in ROS2 galactic & ROS1 noetic
ros1_bridge error on ROS2 foxy & ROS1 noetic
--- stderr: ros1_bridge
/usr/bin/ld: libros1_bridge.so: undefined reference to `ros1_bridge::Factory<controller_manager_msgs::ControllerState_<std::allocator<void> >, controller_manager_msgs::msg::ControllerState_<std::allocator<void> > >::convert_1_to_2(controller_manager_msgs::ControllerState_<std::allocator<void> > const&, controller_manager_msgs::msg::ControllerState_<std::allocator<void> >&)'
/usr/bin/ld: libros1_bridge.so: undefined reference to `ros1_bridge::Factory<controller_manager_msgs::ControllerState_<std::allocator<void> >, controller_manager_msgs::msg::ControllerState_<std::allocator<void> > >::convert_2_to_1(controller_manager_msgs::msg::ControllerState_<std::allocator<void> > const&, controller_manager_msgs::ControllerState_<std::allocator<void> >&)'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/static_bridge.dir/build.make:348: static_bridge] Error 1
make[1]: *** [CMakeFiles/Makefile2:233: CMakeFiles/static_bridge.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
/usr/bin/ld: libros1_bridge.so: undefined reference to `ros1_bridge::Factory<controller_manager_msgs::ControllerState_<std::allocator<void> >, controller_manager_msgs::msg::ControllerState_<std::allocator<void> > >::convert_1_to_2(controller_manager_msgs::ControllerState_<std::allocator<void> > const&, controller_manager_msgs::msg::ControllerState_<std::allocator<void> >&)'
/usr/bin/ld: libros1_bridge.so: undefined reference to `ros1_bridge::Factory<controller_manager_msgs::ControllerState_<std::allocator<void> >, controller_manager_msgs::msg::ControllerState_<std::allocator<void> > >::convert_2_to_1(controller_manager_msgs::msg::ControllerState_<std::allocator<void> > const&, controller_manager_msgs::ControllerState_<std::allocator<void> >&)'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/dynamic_bridge.dir/build.make:348: dynamic_bridge] Error 1
make[1]: *** [CMakeFiles/Makefile2:341: CMakeFiles/dynamic_bridge.dir/all] Error 2
/usr/bin/ld: libros1_bridge.so: undefined reference to `ros1_bridge::Factory<controller_manager_msgs::ControllerState_<std::allocator<void> >, controller_manager_msgs::msg::ControllerState_<std::allocator<void> > >::convert_1_to_2(controller_manager_msgs::ControllerState_<std::allocator<void> > const&, controller_manager_msgs::msg::ControllerState_<std::allocator<void> >&)'
/usr/bin/ld: libros1_bridge.so: undefined reference to `ros1_bridge::Factory<controller_manager_msgs::ControllerState_<std::allocator<void> >, controller_manager_msgs::msg::ControllerState_<std::allocator<void> > >::convert_2_to_1(controller_manager_msgs::msg::ControllerState_<std::allocator<void> > const&, controller_manager_msgs::ControllerState_<std::allocator<void> >&)'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/parameter_bridge.dir/build.make:348: parameter_bridge] Error 1
make[1]: *** [CMakeFiles/Makefile2:314: CMakeFiles/parameter_bridge.dir/all] Error 2
make: *** [Makefile:141: all] Error 2
---
Failed <<< ros1_bridge [2min 19s, exited with code 2]
SOLVED : remove controller-manger-msgs : https://github.com/ros2/ros1_bridge/issues/329
sudo apt remove ros-foxy-controller-manager-msgs
colcon build
sudo apt install ros-foxy-controller-manager-msgs
~$ sudo apt remove ros-noetic-controller-manager-msgs
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
fltk1.3-doc fluid gir1.2-gtk-2.0 gir1.2-harfbuzz-0.0 hddtemp libapr1-dev libaprutil1-dev libassuan-dev libatk1.0-dev libdatrie-dev libfltk-cairo1.3 libfltk-forms1.3 libfltk1.3-dev libfribidi-dev
libgpg-error-dev libgpgme-dev libgraphite2-dev libgtk2.0-dev libharfbuzz-dev libharfbuzz-gobject0 liblog4cxx-dev liborocos-kdl-dev liborocos-kdl1.4 libpango1.0-dev libpoco-dev libpococrypto62
libpocodata62 libpocodatamysql62 libpocodataodbc62 libpocodatasqlite62 libpocoencodings62 libpocojson62 libpocomongodb62 libpoconet62 libpoconetssl62 libpocoredis62 libpocoutil62 libpocoxml62
libpocozip62 libsctp-dev libthai-dev libxcomposite-dev libxdamage-dev pango1.0-tools python3-defusedxml python3-gnupg python3-opencv python3-opengl python3-pycryptodome python3-pykdl
python3-pyqt5.qtopengl python3-pyqt5.qtwebkit ros-foxy-control-msgs ros-foxy-controller-interface ros-foxy-diff-drive-controller ros-foxy-effort-controllers ros-foxy-force-torque-sensor-broadcaster
ros-foxy-forward-command-controller ros-foxy-hardware-interface ros-foxy-imu-sensor-broadcaster ros-foxy-joint-state-broadcaster ros-foxy-joint-state-controller ros-foxy-joint-trajectory-controller
ros-foxy-position-controllers ros-foxy-realtime-tools ros-foxy-ros2-control-test-assets ros-foxy-ros2-controllers ros-foxy-velocity-controllers ros-foxy-xacro ros-noetic-actionlib
ros-noetic-actionlib-msgs ros-noetic-actionlib-tutorials ros-noetic-angles ros-noetic-bond ros-noetic-bond-core ros-noetic-bondcpp ros-noetic-bondpy ros-noetic-camera-calibration
ros-noetic-camera-calibration-parsers ros-noetic-camera-info-manager ros-noetic-catkin ros-noetic-class-loader ros-noetic-cmake-modules ros-noetic-common-msgs ros-noetic-common-tutorials
ros-noetic-compressed-depth-image-transport ros-noetic-compressed-image-transport ros-noetic-control-msgs ros-noetic-control-toolbox ros-noetic-controller-interface ros-noetic-cpp-common
ros-noetic-cv-bridge ros-noetic-depth-image-proc ros-noetic-desktop ros-noetic-diagnostic-aggregator ros-noetic-diagnostic-analysis ros-noetic-diagnostic-common-diagnostics ros-noetic-diagnostic-msgs
ros-noetic-diagnostic-updater ros-noetic-diagnostics ros-noetic-diff-drive-controller ros-noetic-dynamic-reconfigure ros-noetic-eigen-conversions ros-noetic-executive-smach ros-noetic-filters
ros-noetic-forward-command-controller ros-noetic-gazebo-dev ros-noetic-gazebo-msgs ros-noetic-gazebo-plugins ros-noetic-gazebo-ros ros-noetic-gazebo-ros-pkgs ros-noetic-gencpp ros-noetic-geneus
ros-noetic-genlisp ros-noetic-genmsg ros-noetic-gennodejs ros-noetic-genpy ros-noetic-geometry ros-noetic-geometry-msgs ros-noetic-geometry-tutorials ros-noetic-gl-dependency
ros-noetic-hardware-interface ros-noetic-image-common ros-noetic-image-geometry ros-noetic-image-pipeline ros-noetic-image-proc ros-noetic-image-publisher ros-noetic-image-rotate
ros-noetic-image-transport ros-noetic-image-transport-plugins ros-noetic-image-view ros-noetic-interactive-marker-tutorials ros-noetic-interactive-markers ros-noetic-joint-limits-interface
ros-noetic-joint-state-controller ros-noetic-joint-state-publisher ros-noetic-joint-state-publisher-gui ros-noetic-kdl-conversions ros-noetic-kdl-parser ros-noetic-laser-assembler
ros-noetic-laser-filters ros-noetic-laser-geometry ros-noetic-laser-pipeline ros-noetic-librviz-tutorial ros-noetic-map-msgs ros-noetic-media-export ros-noetic-message-filters
ros-noetic-message-generation ros-noetic-message-runtime ros-noetic-mk ros-noetic-nav-msgs ros-noetic-nodelet ros-noetic-nodelet-core ros-noetic-nodelet-topic-tools ros-noetic-nodelet-tutorial-math
ros-noetic-pcl-conversions ros-noetic-pcl-msgs ros-noetic-pcl-ros ros-noetic-perception ros-noetic-perception-pcl ros-noetic-pluginlib ros-noetic-pluginlib-tutorials ros-noetic-polled-camera
ros-noetic-position-controllers ros-noetic-python-qt-binding ros-noetic-qt-dotgraph ros-noetic-qt-gui ros-noetic-qt-gui-cpp ros-noetic-qt-gui-py-common ros-noetic-qwt-dependency
ros-noetic-realtime-tools ros-noetic-resource-retriever ros-noetic-robot ros-noetic-robot-state-publisher ros-noetic-ros ros-noetic-ros-base ros-noetic-ros-comm ros-noetic-ros-core
ros-noetic-ros-environment ros-noetic-ros-tutorials ros-noetic-rosbag ros-noetic-rosbag-migration-rule ros-noetic-rosbag-storage ros-noetic-rosbash ros-noetic-rosboost-cfg ros-noetic-rosbuild
ros-noetic-rosclean ros-noetic-rosconsole ros-noetic-rosconsole-bridge ros-noetic-roscpp ros-noetic-roscpp-core ros-noetic-roscpp-serialization ros-noetic-roscpp-traits ros-noetic-roscpp-tutorials
ros-noetic-roscreate ros-noetic-rosgraph ros-noetic-rosgraph-msgs ros-noetic-roslang ros-noetic-roslaunch ros-noetic-roslib ros-noetic-roslint ros-noetic-roslisp ros-noetic-roslz4 ros-noetic-rosmake
ros-noetic-rosmaster ros-noetic-rosmsg ros-noetic-rosnode ros-noetic-rosout ros-noetic-rospack ros-noetic-rosparam ros-noetic-rospy ros-noetic-rospy-tutorials ros-noetic-rosservice ros-noetic-rostest
ros-noetic-rostime ros-noetic-rostopic ros-noetic-rosunit ros-noetic-roswtf ros-noetic-rqt-action ros-noetic-rqt-bag ros-noetic-rqt-bag-plugins ros-noetic-rqt-common-plugins ros-noetic-rqt-console
ros-noetic-rqt-dep ros-noetic-rqt-graph ros-noetic-rqt-gui ros-noetic-rqt-gui-cpp ros-noetic-rqt-gui-py ros-noetic-rqt-image-view ros-noetic-rqt-launch ros-noetic-rqt-logger-level
ros-noetic-rqt-moveit ros-noetic-rqt-msg ros-noetic-rqt-nav-view ros-noetic-rqt-plot ros-noetic-rqt-pose-view ros-noetic-rqt-publisher ros-noetic-rqt-py-common ros-noetic-rqt-py-console
ros-noetic-rqt-reconfigure ros-noetic-rqt-robot-dashboard ros-noetic-rqt-robot-monitor ros-noetic-rqt-robot-plugins ros-noetic-rqt-robot-steering ros-noetic-rqt-runtime-monitor ros-noetic-rqt-rviz
ros-noetic-rqt-service-caller ros-noetic-rqt-shell ros-noetic-rqt-srv ros-noetic-rqt-tf-tree ros-noetic-rqt-top ros-noetic-rqt-topic ros-noetic-rqt-web ros-noetic-rviz
ros-noetic-rviz-plugin-tutorials ros-noetic-rviz-python-tutorial ros-noetic-self-test ros-noetic-sensor-msgs ros-noetic-shape-msgs ros-noetic-simulators ros-noetic-smach ros-noetic-smach-msgs
ros-noetic-smach-ros ros-noetic-smclib ros-noetic-stage ros-noetic-stage-ros ros-noetic-std-msgs ros-noetic-std-srvs ros-noetic-stereo-image-proc ros-noetic-stereo-msgs ros-noetic-tf
ros-noetic-tf-conversions ros-noetic-tf2 ros-noetic-tf2-eigen ros-noetic-tf2-geometry-msgs ros-noetic-tf2-kdl ros-noetic-tf2-msgs ros-noetic-tf2-py ros-noetic-tf2-ros
ros-noetic-theora-image-transport ros-noetic-topic-tools ros-noetic-trajectory-msgs ros-noetic-transmission-interface ros-noetic-turtle-actionlib ros-noetic-turtle-tf ros-noetic-turtle-tf2
ros-noetic-turtlesim ros-noetic-urdf ros-noetic-urdf-parser-plugin ros-noetic-urdf-tutorial ros-noetic-vision-opencv ros-noetic-visualization-marker-tutorials ros-noetic-visualization-msgs
ros-noetic-visualization-tutorials ros-noetic-viz ros-noetic-webkit-dependency ros-noetic-xacro ros-noetic-xmlrpcpp sbcl
Use 'sudo apt autoremove' to remove them.
The following packages will be REMOVED:
ros-noetic-controller-manager ros-noetic-controller-manager-msgs ros-noetic-desktop-full ros-noetic-gazebo-ros-control ros-noetic-urdf-sim-tutorial
0 upgraded, 0 newly installed, 5 to remove and 0 not upgraded.
After this operation, 2,339 kB disk space will be freed.
Do you want to continue? [Y/n]
Requesting to save current system state
Successfully saved as "autozsys_26k8fz"
(Reading database ... 409843 files and directories currently installed.)
Removing ros-noetic-desktop-full (1.5.0-1focal.20220520.065017) ...
Removing ros-noetic-urdf-sim-tutorial (0.5.1-1focal.20220519.095344) ...
Removing ros-noetic-gazebo-ros-control (2.9.2-1focal.20220519.094658) ...
Removing ros-noetic-controller-manager (0.19.5-1focal.20220107.000501) ...
Removing ros-noetic-controller-manager-msgs (0.19.5-1focal.20220107.000302) ...
ZSys is adding automatic system snapshot to GRUB menu
ERROR
--- stderr: ros1_bridge
/usr/bin/ld: libros1_bridge.so: undefined reference to `ros1_bridge::get_service_factory_controller_manager_msgs(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: libros1_bridge.so: undefined reference to `ros1_bridge::get_factory_controller_manager_msgs(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/parameter_bridge.dir/build.make:343: parameter_bridge] Error 1
make[1]: *** [CMakeFiles/Makefile2:314: CMakeFiles/parameter_bridge.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
/usr/bin/ld: libros1_bridge.so: undefined reference to `ros1_bridge::get_service_factory_controller_manager_msgs(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: libros1_bridge.so: undefined reference to `ros1_bridge::get_factory_controller_manager_msgs(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/static_bridge.dir/build.make:343: static_bridge] Error 1
make[1]: *** [CMakeFiles/Makefile2:233: CMakeFiles/static_bridge.dir/all] Error 2
/usr/bin/ld: libros1_bridge.so: undefined reference to `ros1_bridge::get_service_factory_controller_manager_msgs(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: libros1_bridge.so: undefined reference to `ros1_bridge::get_factory_controller_manager_msgs(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/dynamic_bridge.dir/build.make:343: dynamic_bridge] Error 1
make[1]: *** [CMakeFiles/Makefile2:341: CMakeFiles/dynamic_bridge.dir/all] Error 2
make: *** [Makefile:141: all] Error 2
---
Failed <<< ros1_bridge [39min 51s, exited with code 2]
Summary: 14 packages finished [39min 55s]
1 package failed: ros1_bridge
1 package had stderr output: ros1_bridge
[Processing: ros1_bridge]
Finished <<< ros1_bridge [31min 17s]
Summary: 15 packages finished [31min 27s]
end
ROS package autostart
https://roboticsbackend.com/make-ros-launch-start-on-boot-with-robot_upstart/
https://stanfordflightroom.github.io/setup_ros_upstart
sudo apt-get install ros-kinetic-robot-upstart
rosrun robot_upstart install cyglidar_d1/launch/cyglidar.launch
sudo systemctl daemon-reload
sudo systemctl status cyglidar
sudo systemctl enable cyglidar
end