ROS & Robotics
Robot Operating System 1,2 에 관한 내용을 공유합니다.
-
본론만 보실 분은 "접근 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 -
mujoco 는 물리엔진을 지원하는 시뮬레이터로, MJCF 파일 (확장자 : xml) 을 통해서 모델을 환경으로 불러옵니다. 그런데 여기서 문제는 대부분의 로봇 description file 은 URDF 혹은 xacro (xml) 로 되어 있다는 것입니다. 게다가 직접 fusion360 등으로 로봇을 설계할 경우에, 이를 fusion2urdf 패키지 등으로 export 한 경우에 또 URDF 파일을 손에 쥐게 되는 경우가 있죠... 그래서 이 URDF 파일을 MJCF 파일로 바꿔 줘야 하는데, 간단한 방법을 몰라서 삽질을 했습니다. 그 방법은 다음과 같습니다. 우선 터미널에서 mujoco.viewer 를 실행시켜 줍니다. python3 -m mujoco.viewer 그리고 URDF 를 떨어뜨리면 다음과 ..
URDF to MJCF : mujoco-pymujoco 는 물리엔진을 지원하는 시뮬레이터로, MJCF 파일 (확장자 : xml) 을 통해서 모델을 환경으로 불러옵니다. 그런데 여기서 문제는 대부분의 로봇 description file 은 URDF 혹은 xacro (xml) 로 되어 있다는 것입니다. 게다가 직접 fusion360 등으로 로봇을 설계할 경우에, 이를 fusion2urdf 패키지 등으로 export 한 경우에 또 URDF 파일을 손에 쥐게 되는 경우가 있죠... 그래서 이 URDF 파일을 MJCF 파일로 바꿔 줘야 하는데, 간단한 방법을 몰라서 삽질을 했습니다. 그 방법은 다음과 같습니다. 우선 터미널에서 mujoco.viewer 를 실행시켜 줍니다. python3 -m mujoco.viewer 그리고 URDF 를 떨어뜨리면 다음과 ..
2024.01.11 -
요새 계속 MuJoCo 관련 프로젝트를 진행하고 있는데, mujoco 의 python wrapper 인 mujoco-py 는 한국어 자료도 거의 없고, 참고할 만한 자료가 거의 공식 도큐먼트 밖에 없는 것 같았습니다. 프로젝트를 진행하면서 mujoco-py 를 사용하는 방법에 대해서 포스팅을 해 보려고 합니다. mujoco 에서는 xfrc_applied 라는 외력을 사용할 수 있는데, 이를 이용하면 body 에 힘과 토크를 적용할 수 있습니다. https://www.youtube.com/watch?v=N2E-qnsyn1I 다음과 같이 body 에 외력을 줄 수 있습니다. 0. 개발 환경 Ubuntu 20.04 Mujoco-py 1. xfrc_applied xfrc_applied 의 [0:3] 요소는 힘을..
MuJoCo-python 환경에서 body 에 외력 주기 (xfrc_applied)요새 계속 MuJoCo 관련 프로젝트를 진행하고 있는데, mujoco 의 python wrapper 인 mujoco-py 는 한국어 자료도 거의 없고, 참고할 만한 자료가 거의 공식 도큐먼트 밖에 없는 것 같았습니다. 프로젝트를 진행하면서 mujoco-py 를 사용하는 방법에 대해서 포스팅을 해 보려고 합니다. mujoco 에서는 xfrc_applied 라는 외력을 사용할 수 있는데, 이를 이용하면 body 에 힘과 토크를 적용할 수 있습니다. https://www.youtube.com/watch?v=N2E-qnsyn1I 다음과 같이 body 에 외력을 줄 수 있습니다. 0. 개발 환경 Ubuntu 20.04 Mujoco-py 1. xfrc_applied xfrc_applied 의 [0:3] 요소는 힘을..
2024.01.10 -
지난 번에 사용했던 Warthog 로봇과는 달리, Husky 로봇 시뮬레이터에는 IMU가 탑재되어 있어서 따로 urdf 를 수정해 줄 필요가 없습니다. (야호) 다음과 같이 Husky robot 을 Gazebo 에 불러와주고 조종할 수 있게 $ rosrun teleop_twist_keyboard teleop_twist_keyboard.py rostopic list 로 토픽을 확인해 보면 다음과 같이 토픽이 있는 것을 확인할 수 있습니다. /clock /cmd_vel /diagnostics /e_stop /gazebo/link_states /gazebo/model_states /gazebo/parameter_descriptions /gazebo/parameter_updates /gazebo/performa..
Gazebo 에서 IMU 데이터 받아와서 csv 파일로 저장하고 데이터 시각화하기지난 번에 사용했던 Warthog 로봇과는 달리, Husky 로봇 시뮬레이터에는 IMU가 탑재되어 있어서 따로 urdf 를 수정해 줄 필요가 없습니다. (야호) 다음과 같이 Husky robot 을 Gazebo 에 불러와주고 조종할 수 있게 $ rosrun teleop_twist_keyboard teleop_twist_keyboard.py rostopic list 로 토픽을 확인해 보면 다음과 같이 토픽이 있는 것을 확인할 수 있습니다. /clock /cmd_vel /diagnostics /e_stop /gazebo/link_states /gazebo/model_states /gazebo/parameter_descriptions /gazebo/parameter_updates /gazebo/performa..
2023.09.17 -
프로젝트에서 사용하고 있는 RELLIS-3D 데이터셋은 Warthog 로봇으로 획득한 것입니다. 따라서 실험 시뮬레이션도 Warthog 로봇을 사용했는데, 기본 세팅으로 센서가 정의되어 있기는 하지만 rostopic list 를 했을 때 아무 데이터도 볼 수 없었습니다. 따라서 Gazebo 에서 이 센서를 사용할 수 있도록 따로 설정해주어야 합니다. (사담 : 처음에는 Turtlebot3 를 사용했는데, 종잇장처럼 얕은 경사도 오르지 못 했기 때문에 사용할 수 없었습니다.) Gazebo 시뮬레이션 설정 ㄴ src ㄴ warthog_simulator ㄴ warthog_description ㄴ urdf ㄴ warthog.urdf.xacro 이 위치에 들어 있는 warthog.urdf.xacro 파일에 다음 ..
[RELLIS-3D] Gazebo Warthog 로봇에 IMU 탑재하기프로젝트에서 사용하고 있는 RELLIS-3D 데이터셋은 Warthog 로봇으로 획득한 것입니다. 따라서 실험 시뮬레이션도 Warthog 로봇을 사용했는데, 기본 세팅으로 센서가 정의되어 있기는 하지만 rostopic list 를 했을 때 아무 데이터도 볼 수 없었습니다. 따라서 Gazebo 에서 이 센서를 사용할 수 있도록 따로 설정해주어야 합니다. (사담 : 처음에는 Turtlebot3 를 사용했는데, 종잇장처럼 얕은 경사도 오르지 못 했기 때문에 사용할 수 없었습니다.) Gazebo 시뮬레이션 설정 ㄴ src ㄴ warthog_simulator ㄴ warthog_description ㄴ urdf ㄴ warthog.urdf.xacro 이 위치에 들어 있는 warthog.urdf.xacro 파일에 다음 ..
2023.07.05 -
Heightmap 은 지형의 높이 정보를 저장하는 이미지입니다. 이 이미지는 픽셀의 흑백 값으로 표현됩니다. 밝을 수록 지형이 높아지고, 어두울 수록 낮은 지형을 뜻합니다. Gazebo 시뮬레이터에서 정현파 (sine) 형태의 지면 생성하기 Gazebo world 의 sdf 파일에서는 Heightmap 을 이용해서 지형을 모델링할 수 있습니다. 1) Heightmap 사용을 위한 이미지 생성 import os import numpy as np from PIL import Image # 이미지 크기와 sin 함수의 주기, 진폭, 위상 등을 설정 width = 129 height = 129 period = 10 amplitude = 0.1 phase = 0 y, x = np.indices((height, w..
Height map 을 이용하여 Gazebo world 구성하기Heightmap 은 지형의 높이 정보를 저장하는 이미지입니다. 이 이미지는 픽셀의 흑백 값으로 표현됩니다. 밝을 수록 지형이 높아지고, 어두울 수록 낮은 지형을 뜻합니다. Gazebo 시뮬레이터에서 정현파 (sine) 형태의 지면 생성하기 Gazebo world 의 sdf 파일에서는 Heightmap 을 이용해서 지형을 모델링할 수 있습니다. 1) Heightmap 사용을 위한 이미지 생성 import os import numpy as np from PIL import Image # 이미지 크기와 sin 함수의 주기, 진폭, 위상 등을 설정 width = 129 height = 129 period = 10 amplitude = 0.1 phase = 0 y, x = np.indices((height, w..
2023.07.03