Andrea Zoppi wrote something. This is links to the work. Some talk has gone on about it in this sig http://www.ros.org/wiki/sig/Embedded. The code is available at https://github.com/openrobots-dev/uROSnode under a 2-clause BSD license. It is still an alpha release (0.1.3) at the moment, but it seems to be solid enough to handle a clone of the "turtlesim_node", under ROS Groovy, with a few known bugs (being fixed). A copy of the documentation is available at http://dl.dropbox.com/u/2771793/uros/doc/html/index.html. On Sat, Apr 27, 2013 at 4:24 AM, Peter Rudolph wrote: > Hi Everyone, > > Due to having no Arduino, but willing to test the connection from an > embedded system to a ros-host, i have written a message generator, > generating C message-header files compatible to standard ros_serial > messages. Also I have written a small version of ros lib, containing types > and function mechanisms to build up a simple node on an embedded system, in > the same style its written on host-machines. > > Following Code is part of my example project running on a > STM32F3Discovery, containing accelerometers, magnetometers and gyroscopes, > it represents a ROS-IMU sensor. The board is available for 15-20$ I think, > me got it from embeddedWorld fair this year. > > int main(void) > { > /* init hardware */ > hardwareInit(); > /* initialize IMU */ > imuInit(); > /* initialize ROS, namespace "imu_sensor*/ > rosInit("imu_sensor"); > /* get pointer to global nodehandle */ > rosNodeHandle_t* nh = rosNodeHandle(); > /* setup ROS IMU message */ > Imu_t imu_msg = rosCreateImu_t(); > /* advertise imu msg */ > rosPublisher_t *imu_pub = nh->advertise(&imu_msg.mh, "/Imu", 512); > /* set frame id */ > imu_msg.header.frame_id = "/base_link"; > /* enter loop */ > while (rosOk()) > { > /* update IMU data */ > imuUpdate(); > /* set data to imu message */ > float* acc = imuGetAcc(); > float* mag = imuGetMag(); > float* gyr = imuGetGyr(); > float* ori = imuGetOrientation(); > imu_msg.angular_velocity.x = gyr[X]; > imu_msg.angular_velocity.y = gyr[Y]; > imu_msg.angular_velocity.z = gyr[Z]; > imu_msg.linear_acceleration.x = acc[X]; > imu_msg.linear_acceleration.y = acc[Y]; > imu_msg.linear_acceleration.z = acc[Z]; > imu_msg.orientation.w = ori[W]; > imu_msg.orientation.x = ori[X]; > imu_msg.orientation.y = ori[Y]; > imu_msg.orientation.z = ori[Z]; > /* set timestamp */ > imu_msg.header.stamp = rosTimeNow(); > /* publish message */ > imu_pub->publish(&imu_msg); > /* spin nodehandle */ > rosSpinOnce(); > /* sleep 50 milliseconds */ > rosSleep(50); > } > } > > > Library code and generated code are at least C99 compatible. Heap size > used is determined by in-/out-buffer lengths like its done in standard > ros_serial. Input is bufferd by a fifo-queue and processed via rosSpin() or > rosSpinOnce() function (same way ros_serial does). Therefor the code could > be usable for any controller understanding C, having a U(S)ART and at least > 4K memory. > > Currently I'm trying to bring up a FreeRTOS-ROS system, to have another > way to implement sensors or something else. > > Now my question is, what shall i do? Put it into ros_serial? Or shall i > make a new ros_embedded package? Or are there already plans to build up an > embedded distribution on RTOS systems, like FreeRTOS? > > Regards, > Peter > > _______________________________________________ > ros-users mailing list > ros-users@code.ros.org > https://code.ros.org/mailman/listinfo/ros-users > >