ROS & Robotics
Robot Operating System 1,2 에 관한 내용을 공유합니다.

-
로봇은 참 다양한 센서들로 구성되어 있다. 안타까운 점은 모든 센서마다 좌표계가 다 다르다는 점이다. 그래서 로봇을 다루는 엔지니어 스튜던트라면 좌표계 변환(Transformation)을 밥 먹듯이 할 수 밖에 없다. 아니, 사실 로봇을 안 다뤄도 해야 한다. 센서와 공간을 다룬다면 모두가 갖춰야 할 소양인 것이다. 그렇지만 이 좌표계라는 놈은 정말 너무 헷갈린다. 그래서 소양이 부족한 나는 종종 귀찮기도 하여서 파라미터를 이리저리 바꾸면서 "이번에는 맞게 해주세요"라고 기도하며 정확한 TF를 얻기 위해 몇 시간을 허비한 적이 있는데, 대부분의 경우 머리털만 좀 더 빠지고 여전히 내가 원하는 정확한 결과는 얻을 수 없었다. 그래서 때려 맞추는 것 보다 좀 더 정답에 빨리 갈 수 있는 노하우가 있을까 고민..
나를 슬프게 하는 좌표계 변환(TF)에서 삽질 적게 하기로봇은 참 다양한 센서들로 구성되어 있다. 안타까운 점은 모든 센서마다 좌표계가 다 다르다는 점이다. 그래서 로봇을 다루는 엔지니어 스튜던트라면 좌표계 변환(Transformation)을 밥 먹듯이 할 수 밖에 없다. 아니, 사실 로봇을 안 다뤄도 해야 한다. 센서와 공간을 다룬다면 모두가 갖춰야 할 소양인 것이다. 그렇지만 이 좌표계라는 놈은 정말 너무 헷갈린다. 그래서 소양이 부족한 나는 종종 귀찮기도 하여서 파라미터를 이리저리 바꾸면서 "이번에는 맞게 해주세요"라고 기도하며 정확한 TF를 얻기 위해 몇 시간을 허비한 적이 있는데, 대부분의 경우 머리털만 좀 더 빠지고 여전히 내가 원하는 정확한 결과는 얻을 수 없었다. 그래서 때려 맞추는 것 보다 좀 더 정답에 빨리 갈 수 있는 노하우가 있을까 고민..
2025.02.21 -
로봇 개발에서의 편의성을 위해 이런 저런 GUI 개발을 시도해 보고 있는데, FoxGlove, Flutter를 이용한 웹앱 등 여러 가지 툴을 써 봤지만 가장 대중적인 Qt는 안 써봐서 이참에 시도해 보는 글1. Installation# 필요한 qt 패키지sudo apt-get updatesudo apt-get install qt5-default qtcreator# UI를 시각적으로 디자인할 수 있는 도구sudo apt-get install qttools5-dev-toolqtcreator 2. Make project# ROS 워크스페이스의 src 폴더에서catkin_create_pkg qt_ros_app roscpp std_msgscd qt_ros_app# filetreeqt_ros_app/ ├── i..
ROS with Qt : 1. 설치하고 간단한 프로젝트 템플릿 만들기로봇 개발에서의 편의성을 위해 이런 저런 GUI 개발을 시도해 보고 있는데, FoxGlove, Flutter를 이용한 웹앱 등 여러 가지 툴을 써 봤지만 가장 대중적인 Qt는 안 써봐서 이참에 시도해 보는 글1. Installation# 필요한 qt 패키지sudo apt-get updatesudo apt-get install qt5-default qtcreator# UI를 시각적으로 디자인할 수 있는 도구sudo apt-get install qttools5-dev-toolqtcreator 2. Make project# ROS 워크스페이스의 src 폴더에서catkin_create_pkg qt_ros_app roscpp std_msgscd qt_ros_app# filetreeqt_ros_app/ ├── i..
2025.01.31 -
Flutter & Dart를 기반으로 로봇을 조종 및 모니터링하는 웹 앱을 만든다고 할 때, 우선은 ROS topic을 웹소켓으로 받을 것이기 때문에 rosbridge_websocket의 rosbridge_server를 켜 줘야 한다. 이걸 켜면 웹소켓으로 ros topic을 json으로 받고 파싱해서 앱으로 넘겨줄 수 있다. # Ubuntu 쪽 환경 설정sudo apt-get install ros-${ROS_DISTRO}-rosbridge-serversudo apt-get install curl git unzip xz-utils zip libglu1-mesa# Flutter SDK 다운로드cd ~/developmentcurl -O https://storage.googleapis.com/flutter_..
Flutter를 이용한 웹앱 기반 사족보행 로봇 제어:Flutter & Dart를 기반으로 로봇을 조종 및 모니터링하는 웹 앱을 만든다고 할 때, 우선은 ROS topic을 웹소켓으로 받을 것이기 때문에 rosbridge_websocket의 rosbridge_server를 켜 줘야 한다. 이걸 켜면 웹소켓으로 ros topic을 json으로 받고 파싱해서 앱으로 넘겨줄 수 있다. # Ubuntu 쪽 환경 설정sudo apt-get install ros-${ROS_DISTRO}-rosbridge-serversudo apt-get install curl git unzip xz-utils zip libglu1-mesa# Flutter SDK 다운로드cd ~/developmentcurl -O https://storage.googleapis.com/flutter_..
2024.11.08 -
센서 데이터 시각화를 할 때 다른 건 다 잘 되는데, point cloud가 잘 나오지 않는 문제가 있었다.foxglove는 웹소켓 통신을 이용하는 만큼, 데이터 양 조절이 관건이다. roslaunch foxglove_bridge foxglove_bridge.launch topic_whitelist:="['/cam1/point_cloud_face']" send_buffer_limit:=10000000 bridge 소스코드를 살펴보면 foxglove_bridge.launch 파일은 다음과 같이 생겼다. $(arg topic_whitelist) $(arg pa..
Foxglove 사용법 : 2. bridge 토픽 지정하고 토픽 압축해서 전송하기센서 데이터 시각화를 할 때 다른 건 다 잘 되는데, point cloud가 잘 나오지 않는 문제가 있었다.foxglove는 웹소켓 통신을 이용하는 만큼, 데이터 양 조절이 관건이다. roslaunch foxglove_bridge foxglove_bridge.launch topic_whitelist:="['/cam1/point_cloud_face']" send_buffer_limit:=10000000 bridge 소스코드를 살펴보면 foxglove_bridge.launch 파일은 다음과 같이 생겼다. $(arg topic_whitelist) $(arg pa..
2024.11.06 -
Foxglove Studio는 로봇 개발을 위한 시각화 및 디버깅 도구 (ROS 기반)이다. 왜 Foxglove를 쓰는가 ? 라고 한다면 Foxglove의 특징은 다음과 같다. 플랫폼 독립적RViz는 ROS 환경에서만 사용 가능하지만, Foxglove는 웹소켓 통신을 이용해 토픽을 주고 받기 때문에 Windows, Mac, Linux, 웹브라우저에서도 실행 가능하다. 데이터 분석강력한 플롯팅, 차트 기능사용자 정의 패널 추가가 용이하다. 따라서 RViz가 로봇 개발을 하는 사람들을 위한 시각화 툴이라면, Foxglove는 조금 더 로봇 사용자에 가깝다고 볼 수 있다. 아직까지는 Foxglove 사용법을 소개하는 한국어 블로그가 하나도 없는 것 같아서 한 번 적어보기루 함. InstallationLin..
Foxglove 사용법 : 1. 설치Foxglove Studio는 로봇 개발을 위한 시각화 및 디버깅 도구 (ROS 기반)이다. 왜 Foxglove를 쓰는가 ? 라고 한다면 Foxglove의 특징은 다음과 같다. 플랫폼 독립적RViz는 ROS 환경에서만 사용 가능하지만, Foxglove는 웹소켓 통신을 이용해 토픽을 주고 받기 때문에 Windows, Mac, Linux, 웹브라우저에서도 실행 가능하다. 데이터 분석강력한 플롯팅, 차트 기능사용자 정의 패널 추가가 용이하다. 따라서 RViz가 로봇 개발을 하는 사람들을 위한 시각화 툴이라면, Foxglove는 조금 더 로봇 사용자에 가깝다고 볼 수 있다. 아직까지는 Foxglove 사용법을 소개하는 한국어 블로그가 하나도 없는 것 같아서 한 번 적어보기루 함. InstallationLin..
2024.11.05 -
설치에 이어서 Gazebo 상에서 카메라 토픽을 받아서 주행 커맨드를 작성할 일이 있어서 해당 부분을 만들었다. 구성은 다음과 같다. 1. gazebo 상의 로봇 카메라에서 물체 인식하기2. camera plane에서 로봇 좌표계로 좌표계 변환하기3. 얻어진 방향을 기준으로 로봇 제어하기 1. Gazebo 상의 로봇 카메라에서 물체 인식하기 우선 내 맘대로 World를 좀 구성해 줘야 하니까 normal.launch 파일과 sdf 파일을 만들어서 설정해준다. /unitree_gazebo/launch/normal.launch /unitree_gazebo/material/green_ball/model.sdf false ..
Unitree Go1을 Gazebo에서 작동시키기 : 2. 카메라 상의 물체를 따라가도록설치에 이어서 Gazebo 상에서 카메라 토픽을 받아서 주행 커맨드를 작성할 일이 있어서 해당 부분을 만들었다. 구성은 다음과 같다. 1. gazebo 상의 로봇 카메라에서 물체 인식하기2. camera plane에서 로봇 좌표계로 좌표계 변환하기3. 얻어진 방향을 기준으로 로봇 제어하기 1. Gazebo 상의 로봇 카메라에서 물체 인식하기 우선 내 맘대로 World를 좀 구성해 줘야 하니까 normal.launch 파일과 sdf 파일을 만들어서 설정해준다. /unitree_gazebo/launch/normal.launch /unitree_gazebo/material/green_ball/model.sdf false ..
2024.10.26 -
EnvironmentUbuntu 20.04ROS1 NoeticRTX 3070https://github.com/unitreerobotics/unitree_ros GitHub - unitreerobotics/unitree_rosContribute to unitreerobotics/unitree_ros development by creating an account on GitHub.github.com mkdir -p ~/unitree_ws/srccd ~/unitree_ws/srccatkin_init_workspacegit clone https://github.com/unitreerobotics/unitree_legged_sdk.gitgit clone https://github.com/unitreerobotic..
Unitree Go1을 Gazebo에서 작동시키기 : 1. 설치EnvironmentUbuntu 20.04ROS1 NoeticRTX 3070https://github.com/unitreerobotics/unitree_ros GitHub - unitreerobotics/unitree_rosContribute to unitreerobotics/unitree_ros development by creating an account on GitHub.github.com mkdir -p ~/unitree_ws/srccd ~/unitree_ws/srccatkin_init_workspacegit clone https://github.com/unitreerobotics/unitree_legged_sdk.gitgit clone https://github.com/unitreerobotic..
2024.10.23 -
본론만 보실 분은 "접근 2. depth_image_proc 사용하기"로 가기~ Task : 3D reconstruction을 진행할 때, segmentation result를 texture로 사용하기 접근 1 : ros2 realsense2_camera 패키지 이용개발 환경 : Ubuntu 22.04 ROS2 humble사용 장비 : Intel Realsense D435언어 : C++ https://github.com/IntelRealSense/realsense-ros/tree/ros2-legacy 이 Realsense ros2 패키지를 빌드한 후ros2 launch realsense2_camera rs_pointcloud_launch.py 를 실행하면 이런 st로 편하게~ 복원을 해 주는 런치파일..
이미지 세그멘테이션 결과를 이용해서 포인트 클라우드 복원하고 색칠하기 (Point cloud colorization using segmentation result)본론만 보실 분은 "접근 2. depth_image_proc 사용하기"로 가기~ Task : 3D reconstruction을 진행할 때, segmentation result를 texture로 사용하기 접근 1 : ros2 realsense2_camera 패키지 이용개발 환경 : Ubuntu 22.04 ROS2 humble사용 장비 : Intel Realsense D435언어 : C++ https://github.com/IntelRealSense/realsense-ros/tree/ros2-legacy 이 Realsense ros2 패키지를 빌드한 후ros2 launch realsense2_camera rs_pointcloud_launch.py 를 실행하면 이런 st로 편하게~ 복원을 해 주는 런치파일..
2024.06.27 -
Why gRPC ? 다른 분야도 마찬가지이지만, 주행 중인 모바일 로봇은 안전상의 이유로 특히 초저지연 통신을 구축할 필요가 있습니다. (장애물 회피 등) 보통의 개발 로봇의 경우 ROS 1,2를 기반으로 이미지 데이터를 받아오고 이를 처리합니다. 하지만 범용성에 초점을 두고 개발된 ROS 통신 자체의 latency 때문에 상용 로봇 단계로 갈 수록 ROS가 아닌 커스텀 통신 패키지를 사용하여 더 빠른 통신 시스템을 구축하게 됩니다. gRPC는 프로토콜 버퍼를 직접 정의함으로써 사용자가 원하는 형태로 데이터를 보낼 수 있고, 인터페이스가 쉬우며 HTTP/2 기반으로 속도가 빠르기 때문에 gRPC를 이용하여 로봇 센서 데이터를 송수신하는 것은 다양한 측면에서 이점이 많습니다. Nvidia의 Triton..
로봇을 위한 저지연 통신 구축, gRPC (1) : gRPC를 사용하는 이유, 설치 방법Why gRPC ? 다른 분야도 마찬가지이지만, 주행 중인 모바일 로봇은 안전상의 이유로 특히 초저지연 통신을 구축할 필요가 있습니다. (장애물 회피 등) 보통의 개발 로봇의 경우 ROS 1,2를 기반으로 이미지 데이터를 받아오고 이를 처리합니다. 하지만 범용성에 초점을 두고 개발된 ROS 통신 자체의 latency 때문에 상용 로봇 단계로 갈 수록 ROS가 아닌 커스텀 통신 패키지를 사용하여 더 빠른 통신 시스템을 구축하게 됩니다. gRPC는 프로토콜 버퍼를 직접 정의함으로써 사용자가 원하는 형태로 데이터를 보낼 수 있고, 인터페이스가 쉬우며 HTTP/2 기반으로 속도가 빠르기 때문에 gRPC를 이용하여 로봇 센서 데이터를 송수신하는 것은 다양한 측면에서 이점이 많습니다. Nvidia의 Triton..
2024.06.12 -
1. Message filter 메시지 필터란? 메시지가 메시지 필터에 도달하면 즉시 출력되지 않고 특정 조건이 충족되면 나중에 출력될 수 있습니다. 예를 들어 LiDAR , 카메라 등 여러가지 센서를 사용해 로봇 프로젝트를 수행할 때, 두 개 이상의 메시지 내용을 포함하는 알고리즘을 설계한다고 가정합시다. 두 토픽의 발행 주기가 다를 경우에 개중 느린 토픽의 주기에 맞추어 callback 함수를 작동시켜야 할 것입니다. 따라서 message filter 함수는 두 개 이상의 토픽을 인자로 받아 조건이 충족될 경우에만 callback 함수 loop 안에 진입합니다. Turtlebot SLAM with Yolo Object Detection 의 경우 다섯 개의 토픽이 메시지 필터에 들어간다는 것을 의미합니..
ROS Message filter 메시지 필터1. Message filter 메시지 필터란? 메시지가 메시지 필터에 도달하면 즉시 출력되지 않고 특정 조건이 충족되면 나중에 출력될 수 있습니다. 예를 들어 LiDAR , 카메라 등 여러가지 센서를 사용해 로봇 프로젝트를 수행할 때, 두 개 이상의 메시지 내용을 포함하는 알고리즘을 설계한다고 가정합시다. 두 토픽의 발행 주기가 다를 경우에 개중 느린 토픽의 주기에 맞추어 callback 함수를 작동시켜야 할 것입니다. 따라서 message filter 함수는 두 개 이상의 토픽을 인자로 받아 조건이 충족될 경우에만 callback 함수 loop 안에 진입합니다. Turtlebot SLAM with Yolo Object Detection 의 경우 다섯 개의 토픽이 메시지 필터에 들어간다는 것을 의미합니..
2024.02.04 -
이전 포스팅: 이와 같이 bounding_boxes 토픽의 time stamp 를 수정해 주고 난 후 또 에러를 마주쳤습니다. Transform error: Lookup would require extrapolation into the future. Requested time 1401446451.006236446 but the latest data is at time 1401446450.937553891, when looking up transform from frame [base_scan] to frame [camera] [ERROR] [1401446451.007936297]: waitForTransform() 에서 요구하는 데이터는 A 시점의 데이터인데, 가장 최근에 들어오는 데이터는 B 시점의 데이..
ROS message filter: waitForTransform() Lookup error이전 포스팅: 이와 같이 bounding_boxes 토픽의 time stamp 를 수정해 주고 난 후 또 에러를 마주쳤습니다. Transform error: Lookup would require extrapolation into the future. Requested time 1401446451.006236446 but the latest data is at time 1401446450.937553891, when looking up transform from frame [base_scan] to frame [camera] [ERROR] [1401446451.007936297]: waitForTransform() 에서 요구하는 데이터는 A 시점의 데이터인데, 가장 최근에 들어오는 데이터는 B 시점의 데이..
2024.02.04 -
ROS 에서 message filter 의 기능은 서로 다른 주파수로 발행되는 각 토픽들의 Sync 를 맞추는 것입니다. 저의 경우, /image_raw, /camera_info, /scan , /darknet_ros/bounding_boxes 의 4개의 토픽을 받아서 필터로 들어오도록 하고 있습니다. 하지만, /darknet_ros/bounding_boxes 를 filter 의 인수로 추가하기만 하면 메시지 필터 콜백 함수가 불러와지지 않았습니다. /image_raw, /camera_info, /scan 만으로는 문제없이 작동하는 메시지 필터가 **/bounding_box 에 대해서만** 작동하지 않았습니다. ![](https://velog.velcdn.com/images/zzziito/post/591..
ROS Message Filter : Approximate Time Callback errorROS 에서 message filter 의 기능은 서로 다른 주파수로 발행되는 각 토픽들의 Sync 를 맞추는 것입니다. 저의 경우, /image_raw, /camera_info, /scan , /darknet_ros/bounding_boxes 의 4개의 토픽을 받아서 필터로 들어오도록 하고 있습니다. 하지만, /darknet_ros/bounding_boxes 를 filter 의 인수로 추가하기만 하면 메시지 필터 콜백 함수가 불러와지지 않았습니다. /image_raw, /camera_info, /scan 만으로는 문제없이 작동하는 메시지 필터가 **/bounding_box 에 대해서만** 작동하지 않았습니다. ![](https://velog.velcdn.com/images/zzziito/post/591..
2024.02.04