+ All Categories
Home > Documents > roscon.ros.orgpipe1->pub->publish(msg); executor.add_node(pipe1); executor.add_node(pipe2);...

roscon.ros.orgpipe1->pub->publish(msg); executor.add_node(pipe1); executor.add_node(pipe2);...

Date post: 22-May-2020
Category:
Upload: others
View: 12 times
Download: 0 times
Share this document with a friend
57
Transcript

voidcallback(conststd_msgs::String::ConstPtr&msg){ROS_INFO("Iheard:[%s]",msg->data.c_str());}

intmain(intargc,char*argv[]){ros::init(argc,argv,"listener");

ros::NodeHandlenode;

ros::Subscribersub=node.subscribe("chatter",10,callback);

ros::spin();

return0;}

//voidcallback(conststd_msgs::String::ConstPtr&msg)

{//ROS_INFO("Iheard:[%s]",msg->data.c_str());

}

intmain(intargc,char*argv[]){//ros::init(argc,argv,"listener");

//ros::NodeHandlenode;

//ros::Subscribersub=node.subscribe("chatter",10,callback);

//ros::spin();

return0;}

//voidcallback(conststd_msgs::String::ConstPtr&msg)voidcallback(std_msgs::msg::String::ConstSharedPtrmsg){//ROS_INFO("Iheard:[%s]",msg->data.c_str());printf("Iheard:[%s]\n",msg->data.c_str());}

intmain(intargc,char*argv[]){//ros::init(argc,argv,"listener");rclcpp::init(argc,argv);

//ros::NodeHandlenode;autonode=rclcpp::Node::make_shared("listener");

//ros::Subscribersub=node.subscribe("chatter",10,callback);autosub=node->create_subscription<std_msgs::msg::String>("chatter",rmw_qos_profile_default,callback);

//ros::spin();rclcpp::spin(node);

return0;}

//voidcallback(conststd_msgs::String::ConstPtr&msg)voidcallback(std_msgs::msg::String::ConstSharedPtrmsg){//ROS_INFO("Iheard:[%s]",msg->data.c_str());printf("Iheard:[%s]\n",msg->data.c_str());}

intmain(intargc,char*argv[]){//ros::init(argc,argv,"listener");rclcpp::init(argc,argv);

//ros::NodeHandlenode;autonode=rclcpp::Node::make_shared("listener");

//ros::Subscribersub=node.subscribe("chatter",10,callback);autosub=node->create_subscription<std_msgs::msg::String>("chatter",rmw_qos_profile_default,callback);

//ros::spin();rclcpp::spin(node);

return0;}

//voidcallback(conststd_msgs::String::ConstPtr&msg)voidcallback(std_msgs::msg::String::ConstSharedPtrmsg){//ROS_INFO("Iheard:[%s]",msg->data.c_str());printf("Iheard:[%s]\n",msg->data.c_str());}

intmain(intargc,char*argv[]){//ros::init(argc,argv,"listener");rclcpp::init(argc,argv);

//ros::NodeHandlenode;autonode=rclcpp::Node::make_shared("listener");

//ros::Subscribersub=node.subscribe("chatter",10,callback);autosub=node->create_subscription<std_msgs::msg::String>("chatter",rmw_qos_profile_default,callback);

//ros::spin();rclcpp::spin(node);

return0;}

//voidcallback(conststd_msgs::String::ConstPtr&msg)voidcallback(std_msgs::msg::String::ConstSharedPtrmsg){//ROS_INFO("Iheard:[%s]",msg->data.c_str());printf("Iheard:[%s]\n",msg->data.c_str());}

intmain(intargc,char*argv[]){//ros::init(argc,argv,"listener");rclcpp::init(argc,argv);

//ros::NodeHandlenode;autonode=rclcpp::Node::make_shared("listener");

//ros::Subscribersub=node.subscribe("chatter",10,callback);autosub=node->create_subscription<std_msgs::msg::String>("chatter",rmw_qos_profile_default,callback);

//ros::spin();rclcpp::spin(node);

return0;}

spin()

shared_ptr

"testing" "testing2"

"testing" publish(...)

"testing2"

std::shared_ptr<std_msgs::msg::String>msg(newstd_msgs::msg::String());

msg->data="testing";publisher->publish(msg);//Theuserstillhasownershipatthispoint,coulddosomethinglikethis:msg->data="testing2";

unique_ptr

unique_ptr

unique_ptr

unique_ptr

std::unique_ptr<A>a,b;a.reset(newA());//aisvalid.//bisanullptr.b=a;//Ownershipofthepointerreturnedby`newA()`transfered.//aisnownullptr.//bisnowvalid.

std::unique_ptr<std_msgs::msg::String>msg(newstd_msgs::msg::String());

msg->data="testing";publisher->publish(msg);//Thisisnon-blocking,themessagegoesintoaqueue.//Theusernolongerhasaccesstothemessagecreatedabove.//Insteadthemiddlewarenowownsit,andthisisnolongervalid://msg->data="testing2";//<--accessnullptr,willcausesegmentationfault.

voidcallback(std_msgs::msg::String::ConstSharedPtrmsg){//msg->data="newvalue";Thisisillegal;theuserdoesn'townit.std_msgs::msg::Stringmsg_copy(*msg);//Mustmakeacopythattheuserowns.msg_copy="newvalue";outgoing_publisher->publish(msg_copy);}

unique_ptr

voidcallback(std_msgs::msg::String::UniquePtrmsg){msg->data="newvalue";//Editdirectly;middlewarerelinquishedownership.outgoing_publisher->publish(msg);}

structIncrementerPipe:publicrclcpp::Node{IncrementerPipe(conststd::string&name,conststd::string&in,conststd::string&out)//...[this](std_msgs::msg::Int32::UniquePtr&msg){printf("Receivedmessagewithvalue:%d,andaddress:%p\n",msg->data,msg.get());printf("sleepingfor1second...\n");if(!rclcpp::sleep_for(1_s)){return;//Returnifthesleepfailed(e.g.onctrl-c).}printf("done.\n");msg->data++;//Incrementthemessage'sdata.printf("Incrementingandsendingwithvalue:%d,andaddress:%p\n",msg->data,msg.get());this->pub->publish(msg);//Sendthemessagealongtotheoutputtopic.});}//..};

intmain(intargc,char*argv[]){rclcpp::init(argc,argv);rclcpp::executors::SingleThreadedExecutorexecutor;

autopipe1=std::make_shared<IncrementerPipe>("pipe1","topic1","topic2");autopipe2=std::make_shared<IncrementerPipe>("pipe2","topic2","topic1");//..//Publishthefirstmessage(kickingoffthecycle).std::unique_ptr<std_msgs::msg::Int32>msg(newstd_msgs::msg::Int32());msg->data=42;printf("Publishedfirstmessagewithvalue:%d,andaddress:%p\n",msg->data,msg.get());pipe1->pub->publish(msg);

executor.add_node(pipe1);executor.add_node(pipe2);executor.spin();return0;}

shared_ptr

memcpy

Besteffort

Reliable

Keeplast

Keepall

VolatileTransientlocal

typedefstructRMW_PUBLIC_TYPErmw_qos_profile_t{enumrmw_qos_history_policy_thistory;size_tdepth;enumrmw_qos_reliability_policy_treliability;enumrmw_qos_durability_policy_tdurability;}rmw_qos_profile_t;

rosmsg ☹amentresourceindex

.yaml∀

roscpp pkg-configrclcpp CMakefind_package()

Challenge


Recommended