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
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;}
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
Alpha1
Alpha2
class_loader pluginlib