본문 바로가기

Project/Jaguar 4X4 Human Tracking

[Jaguar 4x4 Human Tracking] 8/17 ~18

728x90

8/17

  • Teleoperation을 통한 수동 조작 성공
  • RQT Plot Plugin, rostopic echo 명령어를 통한 IMU 값 정상 수신 확인

IMUData

 

  • rostopic echo 명령어를 통한 모터 Encoder 값 정상 수신 확인

MotorData

 

  • 현재까지는 TCP 10001 Port에 연결되어있는 Motion Sensing Controller와의 통신을 통해 IMU, Motor Driver를 제어하였음
  • 장애물 감지를 위해 Lidar (RPLidar A2)를 10002 Port에 연결
    • Ethernet IP : 192.168.0.60
    • TCP Port Number : 10002
    • Baudrate : 115200
    • 8, N, 1
    • No Flow Control
  • Lidar값을 받아오기 위한 TCP 통신 코드 작성 (기존의 drrobot_player.cpp 파일에 추가)
// drrobot_player.cpp

// Add necessary includes for sockets
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
	... ...
	... ...
	... ...
// Add laser publisher
ros::Publisher laser_pub_;
	... ...
	... ...
	... ...
// Add laserscan data publisher  
laser_pub_ = node_.advertise<jaguar4x4_2014::LaserData>("drrobot_scan", 1);
    	... ...
	... ...
	... ...
// Create socket for laser sensor
laserSocket_ = socket(AF_INET, SOCK_STREAM, 0);
if (laserSocket_ < 0){
	ROS_ERROR("Error creating socket for laser sensor");
	exit(-1);
 }
    	... ...
	... ...
	... ...
bzero((char*)&laserServer_, sizeof(laserServer_));
laserServer_.sin_family = AF_INET;
laserServer_.sin_port = htons(10002);   // Port 10002 for laser sensor
inet_aton(robotIP_.c_str(), &laserServer_.sin_addr);

if (connect(laserSocket_, (struct sockaddr*)&laserServer_, sizeof(laserServer_)) < 0) { 
	ROS_ERROR("Error connecting to laser sensor");
	exit(-1);
	}	
    	... ...
	... ...
	... ...
void doUpdate(){	
    	... ...
	... ...
	... ...
char laserBuffer[512];
int laserBytes = read(laserSocket_, laserBuffer, sizeof(laserBuffer));
if (laserBytes > 0){
// Add laser sensor data processing
 	}
 }
  • Scan 값을 받아온 뒤 처리하는 코드 작성 필요

 

- 추후 과제

  • Navistack에 활용할 Motor Encoder, IMU에 해당하는 Topic 이름 찾기
  • Scan 값 처리 부분 코드 작성
  • Navigation에 필요한 모든 Sensor Data 수신 후 Navistack 구성

 

8/18

 

GitHub - YoungSeong98/Project_Jaguar4x4

Contribute to YoungSeong98/Project_Jaguar4x4 development by creating an account on GitHub.

github.com

 

 

  • stringstream : C++에서 string을 공백과 '\n'을 기준으로 int / string / float type 등으로 다양하게 자를수 있게 함
  • C++ 프로그램은 파일이나 콘솔의 입출력을 직접 다루지 않고 Stream을 통해 다룸
  • Stream이란 실제의 입출력이 표현된 데이터의 이상적인 흐름을 뜻하는, OS가 입출력을 다루기 위해 가상으로 만든 중간자 역할이다
  •  

Stream 설명

  • Stream은 내부에 buffer라는 임시 메모리 공간을 가져 프로그램의 입출력을 효율적으로 관리한다

  • Buffer는 입력받은 값들을 임시로 모아놓는 공간으로, 프로그래밍 시 가장 느린 작업인 입출력 작업의 속도 개선을 위해 사용
    • 입력을 받을때마다 하나씩 바로바로 출력하면 속도가 느리므로 입력을 버퍼에 모았다가 아래의 2가지 경우가 되면 출력한다
      1. 버퍼가 다 찼을 때
      2. 엔터를 쳤을 때 ('\n' 이 들어올 때) -> 지금까지 우리가 봐온 방식은 전부 이 방식
  • stringstream은 string에서 동작하는 stream class로, 외부에서 입출력으로 받는 것이 아니라 string type을 받아 동작
  • string에서 내가 원하는 type의 data를 추출할 때 사용
  • #include <sstream> 선언 필요

 

iosfwd 코드 중 일부

 

 

 


참고 자료 :

https://roadtosuccess.tistory.com/83

 

[C++] stringstream 사용법(feat. stream과 버퍼란 무엇인가?)

C++에서 문자열을 공백과 \n 을 기준으로 int형 string형 float형 등 다양하게 자를 수 있도록 하는 stringstream이 존재한다. 이것을 어떻게 쓰는지 알아보도록 하자. stringstream을 설명하기 전에 stream은

roadtosuccess.tistory.com

https://reakwon.tistory.com/219

 

[리눅스] 입출력다중화 - poll 함수의 개념과 사용법 예제

poll, select, epoll관 관련한 다중 입출력의 내용과 더 많은 정보와 예제를 담은 리눅스 교재를 배포했습니다. 아래의 페이지에서 리눅스 교재를 받아가세요. https://reakwon.tistory.com/233 리눅스 프로그

reakwon.tistory.com

https://blockdmask.tistory.com/442

 

[C언어/C++] memcpy 메모리 복사 함수 설명 및 예시

안녕하세요. BlockDMask 입니다. 오늘은 C언어, C++에서 메모리를 복사하는 함수 memcpy 함수에 대해서 한번 알아보려 합니다. 지난시간에는 메모리를 초기화 하는 memset에 대해서 배웠던거 기억하시죠

blockdmask.tistory.com

https://life-with-coding.tistory.com/403

 

[C++] stringstream 사용법

인트로 안녕하세요. 오늘은 C++의 Stringstream 사용법에 대해 포스팅하겠습니다. C++에서 여러가지 자료형이 한 줄에 들어오면 파싱해서 용도에 맞게 사용할 필요가 있는데요. 특히 "이름 날짜 내용"

life-with-coding.tistory.com

https://chelseashin.tistory.com/40

 

[OS] 뮤텍스(Mutex)와 세마포어(Semaphore)란?

프로세스 간 메시지를 전송하거나, 공유메모리를 통해 공유된 자원에 여러 개의 프로세스가 동시에 접근하면 Critical Section 문제가 발생할 수 있다. 이를 해결하기 위해 데이터를 한 번에 하나의

chelseashin.tistory.com

https://80000coding.oopy.io/13bd7bb7-3a7f-4b51-b84a-905c47368277

 

표준입력으로 들어오는 Ctrl + d Handling

터미널 표준입력을 제어해보자

80000coding.oopy.io

 

'Project > Jaguar 4X4 Human Tracking' 카테고리의 다른 글

[Jaguar 4x4 Human Tracking] 7/28  (0) 2023.07.28
6/28 About NGIMU Protocol (미완)  (0) 2023.06.28
[Jaguar 4x4 Human Tracking] 3/22  (0) 2023.03.22