[ROS Q&A] Couldn’t find an AF_INET address for [ ]
Hi! In this video we see how to solve the problem “Couldn’t find an AF_INET address for ” by answering a real question on ROS Answer.
Step1. Create a project in Robot Ignite Academy(RIA)
We have the best online ROS course available in RIA. It helps you learn ROS in the easiest way without setting up ROS environment locally. The only thing you need is a browser! Create an account here and start to browse the trial course for free now!
Step 2. Create new package and source file
You can type the following command in a shell to create a new package called tutorial with the roscpp and std_msgs dependencies.
catkin_create_pkg tutorial roscpp std_msgs
Now create a source file called tutorial_node.cpp under the tutorial/source directory and paste the following code from ROS Wiki
* This tutorial demonstrates simple sending of messages over the ROS system.
int main(int argc, char **argv)
* The ros::init() function needs to see argc and argv so that it can perform
* any ROS arguments and name remapping that were provided at the command line.
* For programmatic remappings you can use a different version of init() which takes
* remappings directly, but for most command-line programs, passing argc and argv is
* the easiest way to do it. The third argument to init() is the name of the node.
* You must call one of the versions of ros::init() before using any other
* part of the ROS system.
ros::init(argc, argv, "talker");
* NodeHandle is the main access point to communications with the ROS system.
* The first NodeHandle constructed will fully initialize this node, and the last
* NodeHandle destructed will close down the node.
* The advertise() function is how you tell ROS that you want to
* publish on a given topic name. This invokes a call to the ROS
* master node, which keeps a registry of who is publishing and who
* is subscribing. After this advertise() call is made, the master
* node will notify anyone who is trying to subscribe to this topic name,
* and they will in turn negotiate a peer-to-peer connection with this
* node. advertise() returns a Publisher object which allows you to
* publish messages on that topic through a call to publish(). Once
* all copies of the returned Publisher object are destroyed, the topic
* will be automatically unadvertised.
* The second parameter to advertise() is the size of the message queue
* used for publishing messages. If messages are published more quickly
* than we can send them, the number here specifies how many messages to
* buffer up before throwing some away.
ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);
* A count of how many messages we have sent. This is used to create
* a unique string for each message.
int count = ;
* This is a message object. You stuff it with data, and then publish it.
ss << "hello world " << count;
msg.data = ss.str();
* The publish() function is how you send messages. The parameter
* is the message object. The type of this object must agree with the type
* given as a template parameter to the advertise<>() call, as was done
* in the constructor above.
To compile the code, let’s move to tutorial/CMakeLists.txt and uncomment the following part
Now you can run catkin_make and source devel/setup.bash under the catkin_ws to compile the code and run it with
rosrun tutorial tutorial_node
We no longer run the ros master for you in RDS, to start a ros master type roscore in a new shell.
Now you should see the publisher is publishing.
Step 3. Reproduce the error
You can simply have this error if you put the node initializer before the node handle create
ros::init(argc, argv, "talker"); //Correct place: Before the node handle create
//ros::init(argc, argv, "talker"); //Wrong place
Take away today:
You must call ros::init() before creating the first NodeHandle
Edit by Tony Huang
- Click to share on Twitter (Opens in new window)
- Click to share on Facebook (Opens in new window)
- Click to share on Reddit (Opens in new window)
- Click to email this to a friend (Opens in new window)
- Click to print (Opens in new window)
- Click to share on Google+ (Opens in new window)
- Click to share on Tumblr (Opens in new window)
- Share on Skype (Opens in new window)
- Click to share on Pinterest (Opens in new window)
- Click to share on WhatsApp (Opens in new window)
- Click to share on Telegram (Opens in new window)