ros launch 파일 작성 과 노드 시작 순서 제어
1. 저 는 파 라 메 터 를 읽 는 코드 세 션 을 ros: init (argc, argv, "node name") 에 두 었 습 니 다. 그 다음 에 변수 형식 을 정의 한 다음 에 ros: param: get 으로 파 라 메 터 를 가 져 옵 니 다.그 중에서 "~"은 이 매개 변 수 는 개인 적 인 매개 변수 임 을 나타 낸다. 즉, launch 파일 에 써 야 한다.
......
/node>
사이더욱 전면적 인 사유 변수, 네 임 스페이스 는 뒷글 에서 설명 할 것 이다.
다음 예제:
ros::init(argc,argv,"PCAN_Test");
init();
//parameter load test start ......
string dev_name;
ros::param::get("~dev_name",dev_name);
ROS_INFO("PCAN Device:%s",dev_name.c_str());
bool fifo_send_on=false;
ros::param::get("~fifo_send_on",fifo_send_on);
ROS_INFO("FIFO send :%s",fifo_send_on==false?"false":"true");
bool display_on=false;
ros::param::get("~display_on",display_on);
ROS_INFO("Data display:%s",display_on==false?"false":"true");
//parameter load test end ......
세 개의 변 수 를 정 의 했 습 니 다. devname pcan usb 포트 설정, fifosend_on 과 display 는 fifo 가 보 낼 지, 데이터 디 스 플레이 를 열 지 여 부 를 제어 합 니 다.이번 devname 사용 시 devname.c_str () 는 const char 형식 과 일치 할 수 있 습 니 다. 이 동작 은 string 에 저 장 된 문자열 주 소 를 꺼 내 는 것 입 니 다. 내용 은 string 과 같 습 니 다. if(dev_name.c_str() !="")
pcan_handle = funLINUX_CAN_Open(dev_name.c_str(), O_RDWR );
else
{
pcan_handle = funLINUX_CAN_Open(szDevNode, O_RDWR );//use mapping function
dev_name=DEFAULT_NODE;
}
//judge whether the call is success.if pcan_handle=null,the call would be failed
if(pcan_handle){
printf("CAN Bus test: %s have been opened
", dev_name.c_str());
errno = funCAN_VersionInfo(pcan_handle, txt);
if (!errno)
printf("CAN Bus test: driver version = %s
", txt);
else {
perror("CAN Bus test: CAN_VersionInfo()");
}
if (wBTR0BTR1) {
errno = funCAN_Init(pcan_handle, wBTR0BTR1, nExtended);
if (errno) {
perror("CAN Bus test: CAN_Init()");
}
else
printf("Device Info: %s; CAN_BAUD_1M; CAN_INIT_TYPE_ST
", dev_name.c_str());
}
}
else
printf("CAN Bus test: can't open %s
", dev_name.c_str());
//initial a talker to publish the force data and can id.
ros::NodeHandle force_handle;
ros::Publisher force_pub=force_handle.advertise<:forcedata>("ArrayForcePUB",1);//advertise a topic named "ArrayForceDEV"
ros::Rate loop_rate(500);
//data receive test
while(ros::ok())
{ //HANDLE h,ros::Publisher pub,int server_fifo_fd,bool display_on,bool publish_on,bool fifo_send_on
read_loop(pcan_handle,force_pub,server_fifo_fd,display_on,true,fifo_send_on);
if(fifo_send_on) printf("Send Count No.%d\t
",send_count);
ros::spinOnce();
loop_rate.sleep();
}
2, launch 파일 에는 다음 과 같이 설정 되 어 있 습 니 다. pkg 후 대응 하 는 파일 의 가방 이름, type 후 CMakeList. txt 에서 해당 파일 에 대한 addexecutable (pcan test src/pcan test) 에서 실행 가능 한 파일 의 이름 입 니 다. python 에 서 는 파일 이름 입 니 다. python 의 실행 가능 한 파일 은 파일 자체 (해석 언어, matlab 와 같 음) 이기 때문에 이번 에는 c++ 프로 그래 밍 을 파일 이름 전체 이름 으로 잘못 쓰 지 마 십시오. name 은 노드 가 시 작 된 이름 을 표시 합 니 다. 이 이름 은 ros: init 에서 초기 화 된 이름 을 덮어 씁 니 다.output 후 매개 변 수 는 화면 에서 인쇄 정 보 를 출력 하 는 것 을 표시 합 니 다. 그렇지 않 으 면 인쇄 정 보 는 임시 파일 에 저 장 됩 니 다.인자 에 name 은 ros::param::get () 의 첫 번 째 문자열 에서 "~"후의 이름 을 삭제 합 니 다. launch 는 실행 할 때 일치 하 는 것 을 찾 습 니 다. type 은 변수 형식 이 고 value 는 구체 적 인 값 입 니 다.다음은 launch 파일 전문 입 니 다.
주: src 에서 launch 폴 더 를 만 든 다음 에 launch 파일 을 만 들 면 됩 니 다. 다른 작업 을 하지 않 아 도 됩 니 다.3. 위 에서 ros::param::get 내용 에 대한 소 개 는 비교적 간단 합 니 다. 보다 전면적 인 launch 의 예 는 다음 과 같 습 니 다. launch 의 개인 변수 와 공유 변수 예 를 포함 합 니 다.
group 은 하나의 노드 그룹 으로 특정한 설정 을 통 해 전체 그룹의 노드 작 동 정지 통 제 를 할 수 있 습 니 다. ROS launch 정리 에서 상세 하 게 소개 하 는 것 을 참고 하 십시오.ns 는 네 임 스페이스 입 니 다.ros::param::get 을 사용 할 때 다음 과 같은 세 가지 관 계 를 포함 하 는 변수 가 있 습 니 다.
/camera_topic_root
/group_ns/camera_topic_ns
/group_ns/node_name/camera_topic_private
따라서 ros::param::get 을 통 해 인 자 를 얻 으 려 면 다음 과 같 아야 합 니 다.
ros::param::get("/camera_topic_root",camera_topic); // /camera_topic_root
ros::param::get("camera_topic_ns",camera_topic); // /group_ns/camera_topic_ns
ros::param::get("~camera_topic_private",camera_topic); // /group_ns/node_name/camera_topic_private
4. ubuntu 에서 노드 시작 순 서 를 제어 하 는 간단 한 전략 은 셸 을 통 해 이 루어 지 는 것 이다.새 파일 의 이름 은 xxx. sh 입 니 다.
#!/bin/bash
roslaunch bhand_controller bhand_controller.launch &
sleep 5
echo "bhand controller starting success!"
roslaunch beginner_tutorials bhand_force_control.launch &
sleep 0.1
wait
exit 0
첫 번 째 줄 은 bash 로 실행 하고 sleep 는 프레젠테이션 을 표시 하 며 echo 는 일정한 내용 을 출력 하 는 데 사 용 됩 니 다. ubuntu 셸 에 관 한 다른 조작 은 문장 뒤의 '&' 기 호 를 잊 지 않 고 관련 자 료 를 스스로 조회 할 수 있 습 니 다.따라서 정책 은 특정한 노드 가 먼저 실행 되 어야 한다 면 launch 파일 을 따로 작성 한 다음 셸 통 제 를 통 해 먼저 시작 할 수 있 습 니 다.작성 저장 후 터미널 에서 xxx. sh 에 게 실행 권한 을 부여 합 니 다. sudo chmod a + x xxx. sh 이후./xxx. sh 를 통 해 시작 할 수 있 습 니 다. xxx 는 임의의 문 자 를 대표 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python Robot Simulator (Klampt)개요 클램프(Kris'Locomotion and Manipulation Planning Toolbox)는 로봇의 모델링, 시뮬레이션, 계획, 최적화 및 시각화를 위한 오픈 소스 크로스 플랫폼 소프트웨어 패키지입니다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.