카테고리 없음2021. 5. 22. 00:32

<키워드>

#ROS #RViZ #CygLidar #시그라이다 #PointCloud #원격데이터표시

 

<요약>

roslaunch로 rviz가 실행될때 MASTER_URI 포트번호가 랜덤하게 바뀌는 문제가 있어서 실패했지만..

RViZ를 수동으로 실행해서 /scan_2D, /scan_3D 토픽을 Add해주고 Fixed Frame 이름을 laser_link로 해주면

노트북에서 라즈베리파이에 연결된 라이다가 스캔한 데이터를 원격으로 표시할 수 있다.

 

<내용>

ROS의 장점이 노드간 XMLRPC 방식으로 메시지 통신을 하기 때문에

노드가 어디에 있던지 인터넷 연결만 되어 있으면 통신이 가능하다는 점이다.

라즈베리파이에 CygLidar를 연결하고 RViZ로 스캔 데이터를 표시 할 수 있지만,

노트북에서도 RViZ를 실행시켜 스캔데이터를 표시 할 수 있다.

 

roscore는 라즈베리파이 또는 노트북중에 한 군데에서 실행해야 한다.

그리고 roscore를 실행하는 장치의 IP주소를 ROS_HOSTNAME, ROS_MASTER_URI 에 적어줘야 한다.

 

그리고 터미널 창을 띄울때 마다 ROS_HOSTNAME을 매번 설정해 줘야 하는데,

이게 귀찮으니 ~/.bashrc에 적어두면 터미널 창이 열릴때 마다 자동으로 실행되서 ROS_HOSTNAME이 설정된다

 

일단 roscore를 라즈베리파이에서 실행했다.

 

Raspberry pi에서 bashrc를 수정한다.

nano ~/.bashrc

$ROS_HOSTNAME = 192.168.0.28

$ROS_MASTER_URI = http://192.168.0.28:11311

 

Notebook에서도 동일하게 bashrc를 수정한다.

nano ~/.bashrc

$ROS_HOSTNAME = 192.168.0.28

$ROS_MASTER_URI = http://192.168.0.28:11311

 

라즈베리파이에 라이다를 연결하고 roscore와 cyglidar_d1 패키지를 실행한다

$roscore  실행하고, 새로운 터미널 창을 열고

$roslaunch cyglidar_d1 cyglidar.launch 실행

 

그리고 노트북에서 rosnode 명령어로 현재 실행중인 node를 조회해 본다.

$rosnode list

/line_laser

 

라즈베리파이와 노트북이 같은 네트워크 내에 있다면 위와 같이 /line_laser가 보인다

 

노드의 자세한 정보를 알고 싶다면..

 

$rosnode info /line_laser

----------------------------------------------------------

Node [/line_laser]
Publications: 
 * /rosout [rosgraph_msgs/Log]
 * /scan_2D [sensor_msgs/PointCloud2]
 * /scan_3D [sensor_msgs/PointCloud2]

Subscriptions: None

Services: 
 * /line_laser/get_loggers
 * /line_laser/set_logger_level


contacting node http://192.168.0.28:41707/ ...
Pid: 2827
Connections:
 * topic: /rosout
    * to: /rosout
    * direction: outbound
    * transport: TCPROS

 

 

노트북에서 토픽 목록을 조회해 보면 /scan_2D, /scan_3D 모두 볼 수 있다.

$rostopic list

/rosout
/rosout_agg
/scan_2D
/scan_3D

 

토픽 내용을 표시해 보면 라즈베리파이로 부터 잘 전송되서 표시된다.

$rostopic echo /scan_2D

0,0,0,0,0.....

 

노트북에서 cyglidar.launch 파일 내용중에 cyglidar 노드를 실행하는 부분을 지우고

rviz를 실행하는 부분만 남겨 놓고 roslaunch로 실행하면.. 에러가 난다.

 

$roslaunch cyglidar_d1 cyglidar_rviz_only.launch

Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

Unable to contact my own server at [http://192.168.0.28:39557/].
This usually means that the network is not configured properly.

A common cause is that the machine cannot connect to itself.  Please check
for errors by running:

ping 192.168.0.28
For more tips, please see
http://www.ros.org/wiki/ROS/NetworkSetup
The traceback for the exception was written to the log file

 

Unable to contact my own server at [http://192.168.0.28:39557/].

이런 에러가 나는데, roslaunch 를 실행할 때 마다 포트번호가 랜덤하게 바뀐다.

분명히 ROS_MASTER_URI = http://192.168.0.28:11311 이라고 적어 줬는데.

포트번호를 11311 이라고 써줬는데!! roslaunch로 rviz를 실행하면 포트번호가 엉뚱하게 뜨면서 에러가 난다!!!

 

구글링을 열심히 해보고 ROS_IP도 설정하고, 뭐.. 몇가지 시도를 해봤지만..

ROS_MASTER_URI의 포트번호가 랜덤하게 바뀌면서 MASTER에 접속이 안되는 문제 해결은 못했다!!!ㅠㅠ

 

노트북에서 node ping 명령으로 /line_laser를 조사해 보면 정상으로 동작함을 알 수 있다.

 

$rosnode ping /line_laser

rosnode: node is [/line_laser]
pinging /line_laser with a timeout of 3.0s
xmlrpc reply from http://192.168.0.28:41707/ time=17.902851ms
xmlrpc reply from http://192.168.0.28:41707/ time=8.000135ms

 

 

그래서 roslaunch 로 rviz를 실행하지 않고, 직접 rviz를 실행시켜서 /scan_2D 토픽을 찾아 표시해 보기로 했다.

 

$rviz

rviz 실행하고 Add 버튼 눌러서 /scan_2D 토픽을 추가했더니 에러가 난다.

아래 그림처럼 Fixed Frame [map] does not exist 라는 에러임

 

 

rviz에서 Fixed Frame 이름을 직접 laser_link라고 입력해 줬더니.. 짠! 하고 스캔된 데이터가 표시됐다!!! ㅋㅋ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Posted by orasman