Ask Your Question

owh's profile - activity

2014-01-28 17:25:19 -0600 marked best answer How to use bilibot?

I just got a bilibot in our lab and am completely blank what to do with it. It is severely lack documentation. Currently diving the web ocean to find info. Hopeful to get some help or directions here. I am new with Ubuntu, ROS, Create; I have been working on MS Visual C++, and started with OpenNI in it.

A few questions as starter: 1. What does the Demo button do? It doesn't do anything when I press it. Can the Bilibot work without monitor, keyboard, mouse (I assume it should be able to)? 2. What does the E-stop do? I am guessing it is emergency stop, but 'what' does it stop? Ok, my Bilibot hasn't move yet. 3. In the Ubuntu, it is a clean desktop and I need to figure out what to do next. I was expecting an icon on the desktop to do some form of demo/examples -- read somewhere. 4. My Bilibot does not come with USB-SCI cable and Create charger dock (for auto homing). Is that normal?

Many thanks for any kind guidance.

2014-01-28 17:24:58 -0600 marked best answer Fundamental questions on ros file system

After learning ROS for a while, I am trying to reorganize/correct some understandings. My current understanding in dealing with ROS packages/stacks is:

  1. Best to install from Ubuntu if available:

    sudo apt-get install ros-electric-stack_name

  2. Otherwise, check out and rosinstall:

    i. cd ~/ros_workspace (I put all checked out packages in here)

    ii. roslocate info package_name > package_name.rosinstall

    iii. rosinstall . /etc/ros/electric package_name.rosinstall

    iv. rosmake package_name (rosdep --install package_name to install system dependencies)

    v. deal with ROS dependencies by iterating 1 or 2

    I have the following line in .bashrc:

    source /opt/ros/electric/setup.bash

    and this line in /opt/ros/electric/setup.bash

    . $SCRIPT_PATH/setup.sh

    and this line in the /opt/ros/electric/setup.sh

    export ROS_PACKAGE_PATH=~/ros_workspace:/opt/ros/electric/stacks

    Due to the above setup, I never bother to source the setup.bash from every rosinstall, neither I edit my .bashrc.

For packages installed in ~/ros_workspace, if I do not need them, I simply delete the folder. I didn't do any other cleanup, assuming I didn't specifically change setup.sh for every rosinstall.

Question:

  1. Are there any problem in the above workflow? What is the best practice?

  2. In rosinstall ~/ros_workspace /opt/ros/electric package_name.rosinstall, why do we need both ~/ros_workspace /opt/ros/electric and how will /opt/ros/electric be used? The packages are always stored in ~/ros_workspace. Am I right that the "/opt/ros/electric" field is only used to add this path to the newly created setup.sh?

  3. I did not add "?rosdistro=electric&variant=robot&overlay=yes (or no)" to the end of rosinstall. What difference will this make? I don't understand the difference between "overlay=yes" and "overlay=on". What does overlay do? Does it check that if things are already available in /opt/ros/electric and only update the difference? If so, see 4.

  4. What does "Developing a stack against a full tree" means, e.g. "rosinstall ~/workspace package_name.rosinstall"? Will we still use all packages available from /opt/ros/electric, e.g. dependencies?

  5. What does "Updating a rosinstall tree" do? Does it update ROS_PACKAGE_PATH in setup.sh with all the paths to packages? Will having "~/workspace:/opt/ros/electric/stacks" in the ROS_PACKAGE_PATH be sufficient if all stacks/packages are in these folders?

  6. I seem to be rosinstalling packages (due to dependencies) most of the time. Will it be necessary to rosinstall the stack instead?

  7. rospack list-duplicates shows a number of duplicates. Should I deal with them? What is the right way to do so (may not know which is latest or dependency for which package)?

  8. I can svn up in stack/package in /opt/ros/electric since they were not svn checked out. I tried update them with sudo apt-get install ros-electric-stack_name. Is this correct? What is the best practice?

  9. When I svn up in those packages in ~/ros_workspace, I received "At revision *". Is that it?

My apology for the long list of fundamental questions. I know this kind of questions don't ... (more)

2014-01-28 17:24:57 -0600 marked best answer rospy talker listener

I am trying ROS across two machines and started with the rospy talker/listener exercise. I checked ssh and netcat without problem. However, there are few problems with 'remote' behaviors that I hope to get some help here.

To clarify my problems, say I have two machines A and B.

PROBLEM 1:

  1. Started roscore on A, export ROS_MASTER_URI=A (using IP:port).
  2. From A, ssh to B without problem.
  3. On B (ssh) export ROS_MASTER_URI=A (using IP:port) and rosrun rospy_tutorials talker.py (also tried talker) and talker talked (series of Hello World strings).
  4. On A, rosrun rospy_tutorials listener.py and nothing happened. rostopic list on A showed /chatter on the list.
  5. Tried swap listener, talker and had same behavior.
  6. Tried started roscore on B (ssh), updated ROS_MASTER_URI and tested above. Received same behavior.
  7. Then physical on machine B, tried listener on it, listener can print the messages from talker (started on B through ssh).

It appears that topic from remote connection can be found on the list however the values are not accessible. This does not seem to be connection problem as both machines can see the same master and same set of topics (list). netcat could allow communicate in both ways.

PROBLEM 2:

I exported ROS_MASTER_URI on B through ssh. When physically on B and opened new terminal, the ROS_MASTER_URI need to be re-exported, i.e. every new terminal carry a default ROS_MASTER_URI=http://localhost:11311. Am I right that this is normal Ubuntu behavior?

Thanks for any help.

2014-01-28 17:24:53 -0600 marked best answer Problem rosmake piano of mit-ros-pkg

I am having problem rosmake the piano package in mit-ros-pkg. The following is the error:

fatal error: SFML/Audio.hpp: No such file or directory

I had tried rosdep install piano, and it gave an error that it couldn't find

E: Unable to locate package libsfml-audio1.5
E: Couldn't find any package by regex 'libsfml-audio1.5'

I tried edit the rosdep.yaml in piano folder to change to libsfml-audio1.6, however rosdep keeps saying:

Executing script below with cwd=/tmp
{{{
#!/bin/bash
#Packages ['libsfml-audio1.5', 'libsfml-dev']
sudo apt-get install libsfml-audio1.5 libsfml-dev
}}}

Does anyone know where do rosdep obtain the above info. It doesn't seem to refer to the rosdep.yaml in the package folder. I checked the mainfest.xml and only refer to libsfml as rosdep.

I tried manually

sudo apt-get install libsfml-audio1.6

The apt installed without problem. However, rosmake piano continues to give the error:

fatal error: SFML/Audio.hpp: No such file or directory

Hope to get help here to fix the above problem. I am on ros-electric on Ubuntu 11.10.

UPDATE:

@AzuriViolin Many thanks for the ans. I do not know why I couldn't reply (comment) directly in your ans.

Indeed, I assumed the only failure was on libsfml-audio but rosdep didn't install libsfml-dev. So, I should:

sudo apt-get install libsfml-dev libsfml-audio1.6

The libsfml-dev provides the header files (developmental files) and so I got through the error of missing Audio.hpp. As you encountered, the next error is the missing linkage to sfml-system in CMakeLists.txt. It was resolved by:

roscd piano
gedit CMakeLists.txt

scroll to the bottom, and add sfml-system (few lines repeated):

rosbuild_add_executable(testsound src/exaudio.cpp)
target_link_libraries(testsound sfml-audio sfml-system)
2014-01-28 17:24:51 -0600 marked best answer RobotSetup Odemetry tutorial tf confusion

After went through tf tutorial, I thought the transformation between two frames of a shall be fixed.

In the odometry tutorial in navigation/Tutorials/RobotSetup/Odom, the transformation is following the changes in odometry readings (x,y,th). I am lost here. I can't visualise "odometry frame". I was expecting that the odometry readings be used without any transform, i.e. if it says x=2m, y=1m, z=0m, th=1rad, then that indicates the position of the base_link, provided the odometry was initialised at the beginning. I am surely terribly wrong in this. I hope some one can help point me to the right direction.

Thanks.

EDIT 1:

@DimitriProsser Many thanks for the explanation.

If the odom transform was published once at startup, then I might understand it fixes the relationship between the odom measurements and world. However, in the navigation/Tutorials/RobotSetup/Odom, the odom transform is between odom and base_link, and it is in the while loop as below:

  ros::Rate r(1.0);
  while(n.ok()){
    current_time = ros::Time::now();

    //compute odometry in a typical way given the velocities of the robot
    double dt = (current_time - last_time).toSec();
    double delta_x = (vx * cos(th) - vy * sin(th)) * dt;
    double delta_y = (vx * sin(th) + vy * cos(th)) * dt;
    double delta_th = vth * dt;

    x += delta_x;
    y += delta_y;
    th += delta_th;

    //since all odometry is 6DOF we'll need a quaternion created from yaw
    geometry_msgs::Quaternion odom_quat = tf::createQuaternionMsgFromYaw(th);

    //first, we'll publish the transform over tf
    geometry_msgs::TransformStamped odom_trans;
    odom_trans.header.stamp = current_time;
    odom_trans.header.frame_id = "odom";
    odom_trans.child_frame_id = "base_link";

    odom_trans.transform.translation.x = x;
    odom_trans.transform.translation.y = y;
    odom_trans.transform.translation.z = 0.0;
    odom_trans.transform.rotation = odom_quat;

    //send the transform
    odom_broadcaster.sendTransform(odom_trans);

    //next, we'll publish the odometry message over ROS
    nav_msgs::Odometry odom;
    odom.header.stamp = current_time;
    odom.header.frame_id = "odom";

    //set the position
    odom.pose.pose.position.x = x;
    odom.pose.pose.position.y = y;
    odom.pose.pose.position.z = 0.0;
    odom.pose.pose.orientation = odom_quat;

    //set the velocity
    odom.child_frame_id = "base_link";
    odom.twist.twist.linear.x = vx;
    odom.twist.twist.linear.y = vy;
    odom.twist.twist.angular.z = vth;

    //publish the message
    odom_pub.publish(odom);

    last_time = current_time;
    r.sleep();
  }

May be I am unable to clearly explain my doubt (my wrong understanding). I am relating this to the explanation in navigation/Tutorials/RobotSetup/TF. I assume odometry is a sensor (encoder) like a laser range finder, hence a transform from odom frame to the base_link frame should be fixed just like the transform from base_laser to base_link. Where do I go wrong?

Thanks again.

EDIT 2:

@ahendrix Many thanks for the explanation. My understanding of "transform" has been wrong. I am thinking along this way now:

In the tf tutorial, the scan (laser) is a measure of distance (of points) from the robot (base_link). Since scan is with reference to lrf (base_laser), it has to be transformed to with reference to robot position (base_link). Since base_laser (lrf) is always fixed ... (more)

2013-02-23 08:04:48 -0600 received badge  Famous Question (source)
2013-02-23 08:04:48 -0600 received badge  Notable Question (source)
2013-02-23 08:04:48 -0600 received badge  Popular Question (source)
2013-02-15 02:04:22 -0600 received badge  Notable Question (source)
2013-02-15 02:04:22 -0600 received badge  Popular Question (source)
2013-02-15 02:04:22 -0600 received badge  Famous Question (source)
2013-01-02 12:52:11 -0600 received badge  Famous Question (source)
2013-01-02 12:52:11 -0600 received badge  Notable Question (source)
2013-01-02 12:52:11 -0600 received badge  Popular Question (source)
2012-11-17 14:59:34 -0600 received badge  Popular Question (source)
2012-11-17 14:59:34 -0600 received badge  Famous Question (source)
2012-11-17 14:59:34 -0600 received badge  Notable Question (source)
2012-11-11 23:34:19 -0600 received badge  Nice Question (source)
2012-10-30 19:48:15 -0600 received badge  Famous Question (source)
2012-10-14 17:36:57 -0600 commented answer Install Fuerte over Electric

Thanks for that important tip on make clean, joq.

2012-10-14 10:27:34 -0600 received badge  Notable Question (source)
2012-10-14 08:49:16 -0600 commented answer Install Fuerte over Electric

As for the "recompile", I had been using rosinstall to install packages to my user/ros. Can I simply "recompile" them using "rosinstall . /opt/ros/fuerte package.rosinstall"?

2012-10-14 08:47:26 -0600 received badge  Commentator
2012-10-14 08:47:26 -0600 commented answer Install Fuerte over Electric

Many thanks! The links are very useful. I wasn't aware of them. Well, I might have been doing overlays with rosinstall (am I?). Has rosws replaced rosinstall? Or are they two different things. My apology that I am still trying to comprehend this stuff.

2012-10-14 08:41:12 -0600 received badge  Popular Question (source)
2012-10-14 07:07:38 -0600 commented answer Install Fuerte over Electric

Many thanks for the reply. I have many doubts at this point, however I shall go ahead and try it out to find out what I should exactly ask.

2012-10-14 06:07:26 -0600 asked a question Install Fuerte over Electric

I am thinking to install Fuerte. I currently have Electric.

I would like to ask if I have to remove the Electric before doing so. If yes, how do I do that? If no, what will happen to those packages in Electric, which I expect will have duplicates in Fuerte? I have also rosinstalled a number of packages in my user folder (in user/ros), which was done with "rosinstall . /opt/ros/electric package.rosinstall". Do I have to do anything to these packages or can I continue to use them as they are (knowing that I will have to change some codes to work with new packages)?

Thanks in advance.

2012-09-24 23:52:21 -0600 received badge  Favorite Question (source)
2012-09-05 04:01:06 -0600 received badge  Famous Question (source)
2012-09-05 04:01:06 -0600 received badge  Popular Question (source)
2012-09-05 04:01:06 -0600 received badge  Notable Question (source)
2012-08-28 19:05:15 -0600 received badge  Famous Question (source)
2012-08-28 19:05:15 -0600 received badge  Notable Question (source)
2012-08-22 04:22:21 -0600 received badge  Famous Question (source)
2012-08-15 14:45:53 -0600 received badge  Notable Question (source)
2012-08-15 14:45:53 -0600 received badge  Famous Question (source)
2012-06-20 21:40:50 -0600 received badge  Notable Question (source)