전체 글 13

[ROS] ros subscribe once

종종 변하지 않는 데이터를 (tf_static, camera_info 등)을 publish하는 노드들이 있다. 근데 나는 한번만 받아서 업데이트가 필요하다. 그래서 구글에 찾아봄 해결 방법 : subscriber 인스턴스를 포인터로 사용하고 delete해준다. global variable ros::Subscriber* camera_info_sub_; initialize camera_info_sub_ = new ros::Subscriber; camera_info_sub_ = nh.subscribe("/camera/depth/camera_info", 1, &your_class::camera_info_cb, this); function void your_class::camera_info_cb(const sen..

Robotics/ROS 2021.07.20

[Linux] 우분투 크롬 리모트(chrome remote) 타임아웃 없이 접속

리눅스는 윈도우에 비해 설치하는 법이 엄청 까다롭다. 지금 설명하는 버전도 베타버전(?)이라고 써있음. 원격으로 접속할 컴퓨터 ssh 연결 ssh name@ip chorme 설치 wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >>/etc/apt/sources.list.d/google.list' sudo apt-get update sudo apt-get install google-chrome-stable ls /etc/apt/sources.li..

Linux 2021.04.13

[프로그래밍수학] 원점 기준으로 원의 테두리 (호) 좌표 구하기

C++ 사용 sturct point { float x; float y; }; std::vector vec_p; float f_radius=5.0; float f_center_x=0; float f_center_y=0; float f_start_theta=0; float f_end_theta=180; for (int i = f_start_theta; i < f_end_theta; i++) //1 degree 마다 { point p; float f_x = cos(i*DEG2RAD)*f_radius + f_center_x; float f_y = sin(i*DEG2RAD)*f_radius + f_center_y; p.x(f_x); p.y(f_y); vec_p.emplace_back(o_tmp_pos); } ve..

[ROS2] ros2에서 stage돌려보기

ros2 튜토리얼에서는 gazebo와 turtlebot3를 소개하지만 나는 더 가벼운 시뮬레이션(?)을 사용하기 위해 기존에 ros1에서 쓰던 stage패키지를 찾아봤다. ros2 foxy에서 정식으로 지원하는 stageros가 없어서 github을 둘러보다가 발견했다. 13일전에 업데이트 된거였음. CMakeLists.txt에서 몇가지 고치니까 바로 실행 가능했다. ros param으로 world파일을 가져오는게 아니고 그냥 c++ input arg로 받아오는게 좀 달랐다. 아무튼 teleop twist keyboard로 수동 제어까지 완료 github https://github.com/n0nzzz/stage_ros2

Robotics/ROS2 2021.04.01

[ROS2] logging and logger configuration

Overview 현재 지원하는 로깅 기능 rclpp와 rclpy는 공통 로깅 라이브러리를 사용함 로그는 다양한 필터를 호출 계층적 로거들은 자동적으로 노드의 이름과 네임스페이스에 연결되어짐 콘솔 출력 메세지 원격 사용을 위한 rosout과 유사한 파일 출력이 지원될 예정(?) 로거 레벨의 프로그래밍 방식 구성 (지원예정) Logger concepts 로그 메세지들은 심각한 오름차순 순서대로 : DEBUG, INFO, WARN, ERROR or FATAL Logging directory configuration ROS_LOG_DIR지정을 통해 로그를 관리할 수 있음. export ROS_LOG_DIR=~/my_logs Logger level configuration: command line 디버깅 레벨의 ..

Robotics/ROS2 2021.04.01

[Python] 동기화를 위한 threading.Event()

동기(synchronous : 동시에 일어나는) - 요청을 보낸 후 응답을 받아야 다음 동작이 이루어지는 방식, 다음 코드가 blocking된다. 비동기(asynchronous : 동시에 일어나지 않는) - 요청을 보낸 후 응답과 상관없이 다음 동작이 이루어지는 방식, 다음 코드가 blocking 되지 않는다.(=nonblocking) python 코드에서 동기식 프로그래밍을 위해(?) 간단한 threading.Event()객체를 사용하였다. Event 객체 thread 간의 간단한 통신을 위해 사용되는 객체 is_set() : 내부 플래그가 True면 그때만 True 반환 set() : 내부 플래그를 True로 설정 clear() : 내부 플래그를 False로 설정 wait(timeout=None) :..

Python 2021.03.31

[ROS2] package header file include

ros1에서 ros2로 마이그레이션을 시작하면서... 이전에 핵심 라이브러리들은 ros에 대한 의존성을 다 떼어내고 사용했기 때문에 sensor interface쪽만 바꾸면 되서 큰 어려움은 없을 것 같다고 생각했다. 하지만 catkin에서 ament로 바꾸는 과정에서 난관1에 부딪힘. ament 패키지로 빌드 자체는 쉬웠는데, 다른 패키지에서 헤더파일 #include가 안됐다. 기존의 CMakeLists.txt catkin_package( INCLUDE_DIRS include LIBRARIES ${PROJECT_NAME} CATKIN_DEPENDS roscpp nodelet DEPENDS eigen opencv) catkin_package() : catkin이 제공하는 CMake의 매크로. 빌드시스템에..

Robotics/ROS2 2021.03.27