On Wed, Mar 16, 2011 at 1:22 PM, Patrick Goebel <span dir="ltr"><<a href="mailto:patrick@pirobot.org">patrick@pirobot.org</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">


  
    
  
  <div text="#000000" bgcolor="#ffffff">
    Adam got my firmware situation worked out for the Razor IMU so I am
    now getting data over the /dev/imu device and the /imu ROS topic.<br>
    <br>
    And Adam's udev rule below (after substituting for my serial number)
    works perfectly for me under Ubuntu 10.04.  However, the following
    rule based on the Eric's link to <a href="http://answers.ros.org" target="_blank">answers.ros.org</a> does not:<br>
    <br>
    SUBSYSTEMS=="usb", KERNEL=="ttyUSB[0-9]*", ATTRS{idVendor}=="0403",
    ATTRS{idSeri<br>
    al}=="A600eIpn", SYMLINK+="imu"<br></div></blockquote><div><br></div><div>I have a guess at why this might not be working. See below for details.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div text="#000000" bgcolor="#ffffff">
    <br>
    Googling around for more info on this topic, it appears that some
    people use a command called "udevinfo" for getting device attributes
    but the command does not exist under Ubuntu 10.04.  Instead, you're
    supposed to use udevadm.  For example, on my system where the IMU is
    on device /dev/ttyUSB1 I get:<br>
    <br>
    $ udevadm info -q all -n /dev/ttyUSB1<br>
    P:
/devices/pci0000:00/0000:00:1d.7/usb1/1-1/1-1.3/1-1.3:1.0/ttyUSB1/tty/ttyUSB1<br>
    N: ttyUSB1<br>
    S: char/188:1<br>
    S: serial/by-path/pci-0000:00:1d.7-usb-0:1.3:1.0-port0<br>
    S: serial/by-id/usb-FTDI_FT232R_USB_UART_A600eIpn-if00-port0<br>
    E: UDEV_LOG=3<br>
    E:
DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb1/1-1/1-1.3/1-1.3:1.0/ttyUSB1/tty/ttyUSB1<br>
    E: MAJOR=188<br>
    E: MINOR=1<br>
    E: DEVNAME=/dev/ttyUSB1<br>
    E: SUBSYSTEM=tty<br>
    E: ID_PORT=0<br>
    E: ID_PATH=pci-0000:00:1d.7-usb-0:1.3:1.0<br>
    E: ID_VENDOR=FTDI<br>
    E: ID_VENDOR_ENC=FTDI<br>
    E: ID_VENDOR_ID=0403<br>
    E: ID_MODEL=FT232R_USB_UART<br>
    E: ID_MODEL_ENC=FT232R\x20USB\x20UART<br>
    E: ID_MODEL_ID=6001<br>
    E: ID_REVISION=0600<br>
    E: ID_SERIAL=FTDI_FT232R_USB_UART_A600eIpn<br>
    E: ID_SERIAL_SHORT=A600eIpn<br>
    E: ID_TYPE=generic<br>
    E: ID_BUS=usb<br>
    E: ID_USB_INTERFACES=:ffffff:<br>
    E: ID_USB_INTERFACE_NUM=00<br>
    E: ID_USB_DRIVER=ftdi_sio<br>
    E: ID_IFACE=00<br>
    E: ID_VENDOR_FROM_DATABASE=Future Technology Devices International,
    Ltd<br>
    E: ID_MODEL_FROM_DATABASE=FT232 USB-Serial (UART) IC<br>
    E: DEVLINKS=/dev/char/188:1
    /dev/serial/by-path/pci-0000:00:1d.7-usb-0:1.3:1.0-port0
    /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A600eIpn-if00-port0<br>
    <br>
    From this output, I never would have guessed Adam's solution.  For
    one thing, there isn't even a "product" attribute listed.  Does this
    mean that people are using a different command/utility for getting
    the device info?<br></div></blockquote><div><br></div><div>Since udev can match attributes from the lowest device level (ie the driver (ftdi_sio) ) or one level up the parent chain (so, say, generic USB at once point or even up to the PCI bus the USB connects to), you will also want to include the parent devices. To do this, include the "--attribute-walk" option when you run the udevadm query. See the attached udevadm output for a sample when I run "udevadm info -q all --attribute-walk" against my UVC webcam. Note that there are a number of "parent devices" that are more generic, such as the USB host controller in my PC. See <a href="http://reactivated.net/writing_udev_rules.html#udevinfo">http://reactivated.net/writing_udev_rules.html#udevinfo</a> for the rules about using multiple parent devices when matching attributes in your udev rules. The short of it is that you have to pick a single parent device to match against.</div>
<div><br></div><div>Now, to address your earlier difficulty with the modification to that rule. I don't have an FTDI device handy, so I may be wrong, but is the serial you are trying to match actually on the same "parent device" as the idVendor attribute you are also matching against? If it's on a different parent device, that would be the source of the problem. If you aren't sure about it from the output (or if it looks correct), post the output of udevadm that you had above, but including the "--attribute-walk" option as well and I'll see if I spot anything weird. </div>
<div><br></div><div>Though, thinking about it, I think the serial attribute would have to be on whatever device got selected by "idVendor" for me to include it later on in the %s{serial} bit in my symlink... Is it actually called "idSerial" or "serial" in the output from adding "--attribute-walk"?</div>
<div><br></div><div>- Eric</div><meta http-equiv="content-type" content="text/html; charset=utf-8"><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div text="#000000" bgcolor="#ffffff">

    <br>
    Thanks!<br><font color="#888888">
    patrick</font><div><div></div><div class="h5"><br>
    <br>
    <br>
    On 03/16/2011 07:56 AM, Adam Stambler wrote:
    <blockquote type="cite">Hello,<br>
      <br>
      Using a udev script like that is exactly what we are doing right
      now on our robots with all of our serial ports.  We have udev
      scripts  matching the FTDI serial number to the device name. <br>
      <br>
      For example: <br>
      KERNEL=="ttyUSB[0-9]*", ATTRS{product}=="FT232R USB UART",
      ATTRS{serial}=="A700ek5i", SYMLINK+="imu"<br>
      <br>
      My end goal, was to have udev launch an avr_bridge script that
      queries the device for the name programmed into it.  This name
      would then become the /dev symbol.  However, I haven't gotten the
      udev script working for that yet.<br>
      <br>
      -Adam<br>
      <br>
      <div class="gmail_quote">On Wed, Mar 16, 2011 at 10:50 AM, Eric
        Perko <span dir="ltr"><<a href="mailto:wisesage5001@gmail.com" target="_blank">wisesage5001@gmail.com</a>></span>
        wrote:<br>
        <blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204, 204, 204);padding-left:1ex">
          <div>On Wed, Mar 16, 2011 at 10:17 AM, Jeff
            Rousseau <span dir="ltr"><<a href="mailto:drzaiusx11@gmail.com" target="_blank">drzaiusx11@gmail.com</a>></span>
            wrote:<br>
          </div>
          <div class="gmail_quote">
            <div>
              <blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204, 204, 204);padding-left:1ex">
                Just a thought, but make sure that /dev/ttyUSB0 is
                actually the razor.<br>
                I'd be careful doing a symlink from USB0 to /dev/imu
                unless you really<br>
                only have a single usb serial device in your system.  I
                have 3 on my<br>
                robot, so I just created some udev scripts like shown on
                the hokyo<br>
                tutorial:<br>
                <br>
                <a href="http://www.ros.org/wiki/hokuyo_node#Using_udev_to_Give_Hokuyos_Consistent_Device_Names" target="_blank">http://www.ros.org/wiki/hokuyo_node#Using_udev_to_Give_Hokuyos_Consistent_Device_Names</a></blockquote>

              <div>
                <br>
              </div>
            </div>
            <div>For an example udev script that will assign a unique
              device name to an FTDI chip (which is what does
              serial->usb for the Sparkfun IMU), see <a href="http://answers.ros.org/question/65/how-can-i-get-a-unique-device-path-for-my" target="_blank">http://answers.ros.org/question/65/how-can-i-get-a-unique-device-path-for-my</a> .
              You could then symlink /dev/imu to that unique device path
              and be 100% sure that /dev/imu is definitely the IMU,
              regardless of how many other ttyUSB devices you have or
              the order they were plugged in in.</div>
            <div><br>
            </div>
            <font color="#888888">
              <div>- Eric</div>
            </font>
            <div>
              <div>
                <div> </div>
                <blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204, 204, 204);padding-left:1ex">
                  <br>
                  <div>
                    <div><br>
                      On Sat, Mar 12, 2011 at 10:03 AM, Patrick Goebel
                      <<a href="mailto:patrick@pirobot.org" target="_blank">patrick@pirobot.org</a>>
                      wrote:<br>
                      > Hi Adam,<br>
                      ><br>
                      > Thanks for making this wrapper available.   I
                      have a Sparkfun 9d_razor and I<br>
                      > have upgraded the firmware using the .pde
                      files in<br>
                      > imu_9drazor/src/SF9DOF_AHRS.  I did this
                      under Windows using the Arduino IDE<br>
                      > (version 0022) and the upload proceeded
                      without errors.<br>
                      ><br>
                      > Back on Linux with the IMU on port
                      /dev/ttyUSB0 I followed the Wiki<br>
                      > instructions:<br>
                      ><br>
                      > $ sudo ln -s /dev/ttyUSB0 /dev/imu<br>
                      > $ roslaunch imu_9drazor imu.launch<br>
                      ><br>
                      > The launch proceeded without errors with the
                      output:<br>
                      > process[imu_node-1]: started with pid [23276]<br>
                      > process[imu_msg_converter-2]: started with
                      pid [23277]<br>
                      ><br>
                      > However, when I echo the imu topic with
                      "rostopic echo imu" there is no data<br>
                      > being published. Ditto for the topic
                      imu/imu_raw.  Both topics are listed<br>
                      > with "rostopic list".<br>
                      ><br>
                      > One silly question: aside from having the IMU
                      connected to the USB port, do<br>
                      > I also have to apply power to the white power
                      connector?  I did not have to<br>
                      > do this under Windows to see data via the
                      firmware test application.<br>
                      ><br>
                      > Any thoughts?<br>
                      ><br>
                      > Thanks!<br>
                      > Patrick Goebel<br>
                      > <a href="http://www.pirobot.org" target="_blank">http://www.pirobot.org</a><br>
                      ><br>
                      ><br>
                      > On 01/10/2011 09:06 PM, Adam Stambler wrote:<br>
                      ><br>
                      > Hi,<br>
                      ><br>
                      > Just an IMU won't be able to track the
                      position of the IMU over time.  It<br>
                      > can be combined with odometry measurements
                      with a kalman filter to a decent<br>
                      > estimate though.<br>
                      ><br>
                      > If you are looking for a sparkfun IMU with a
                      premade ros-wrapper, I have a<br>
                      > wrapper for the sparkfun 9d razor imu called
                      imu_9drazor.  It is a part of<br>
                      > the rutgers-ros-pkg.<br>
                      ><br>
                      > Regards,<br>
                      > Adam<br>
                      ><br>
                      > On Mon, Jan 10, 2011 at 11:58 PM, abhy <<a href="mailto:abhy.12354@gmail.com" target="_blank">abhy.12354@gmail.com</a>>
                      wrote:<br>
                      >><br>
                      >> hello,<br>
                      >><br>
                      >> Does ROS have Sparkfun IMU supporting
                      driver?<br>
                      >><br>
                      >> "<a href="http://www.robotshop.com/sfe-atomic-imu-6-degrees-of-freedom-xbee-ready-1.html" target="_blank">http://www.robotshop.com/sfe-atomic-imu-6-degrees-of-freedom-xbee-ready-1.html</a>"<br>

                      >><br>
                      >> Is this IMU sufficient for giving X, Y, Z
                      coordinates of the Robot?<br>
                      >><br>
                      >> Thanks,<br>
                      >> Abhy<br>
                      >> --<br>
                      >> View this message in context:<br>
                      >> <a href="http://ros-users.122217.n3.nabble.com/ROS-driver-supporting-Sparkfun-IMU-tp2232681p2232681.html" target="_blank">http://ros-users.122217.n3.nabble.com/ROS-driver-supporting-Sparkfun-IMU-tp2232681p2232681.html</a><br>

                      >> Sent from the ROS-Users mailing list
                      archive at Nabble.com.<br>
                      >>
                      _______________________________________________<br>
                      >> ros-users mailing list<br>
                      >> <a href="mailto:ros-users@code.ros.org" target="_blank">ros-users@code.ros.org</a><br>
                      >> <a href="https://code.ros.org/mailman/listinfo/ros-users" target="_blank">https://code.ros.org/mailman/listinfo/ros-users</a><br>
                      ><br>
                      ><br>
                      >
                      _______________________________________________<br>
                      > ros-users mailing list<br>
                      > <a href="mailto:ros-users@code.ros.org" target="_blank">ros-users@code.ros.org</a><br>
                      > <a href="https://code.ros.org/mailman/listinfo/ros-users" target="_blank">https://code.ros.org/mailman/listinfo/ros-users</a><br>
                      ><br>
                      >
                      _______________________________________________<br>
                      > ros-users mailing list<br>
                      > <a href="mailto:ros-users@code.ros.org" target="_blank">ros-users@code.ros.org</a><br>
                      > <a href="https://code.ros.org/mailman/listinfo/ros-users" target="_blank">https://code.ros.org/mailman/listinfo/ros-users</a><br>
                      ><br>
                      ><br>
                      _______________________________________________<br>
                      ros-users mailing list<br>
                      <a href="mailto:ros-users@code.ros.org" target="_blank">ros-users@code.ros.org</a><br>
                      <a href="https://code.ros.org/mailman/listinfo/ros-users" target="_blank">https://code.ros.org/mailman/listinfo/ros-users</a><br>
                    </div>
                  </div>
                </blockquote>
              </div>
            </div>
          </div>
          <br>
          <br>
          _______________________________________________<br>
          ros-users mailing list<br>
          <a href="mailto:ros-users@code.ros.org" target="_blank">ros-users@code.ros.org</a><br>
          <a href="https://code.ros.org/mailman/listinfo/ros-users" target="_blank">https://code.ros.org/mailman/listinfo/ros-users</a><br>
          <br>
        </blockquote>
      </div>
      <br>
      <pre><fieldset></fieldset>
_______________________________________________
ros-users mailing list
<a href="mailto:ros-users@code.ros.org" target="_blank">ros-users@code.ros.org</a>
<a href="https://code.ros.org/mailman/listinfo/ros-users" target="_blank">https://code.ros.org/mailman/listinfo/ros-users</a>
</pre>
    </blockquote>
  </div></div></div>

<br>_______________________________________________<br>
ros-users mailing list<br>
<a href="mailto:ros-users@code.ros.org">ros-users@code.ros.org</a><br>
<a href="https://code.ros.org/mailman/listinfo/ros-users" target="_blank">https://code.ros.org/mailman/listinfo/ros-users</a><br>
<br></blockquote></div><br>