Lin Yuan is a fifth-year PhD student in Department of at the Department of Electrical & Computer Engineering of Purdue University.
His research interests are Machine Learning and Cognitive Robotics.
IROS2011 ASP-AVS workshop
Today I’m going to give a presentation on IROS2011 ASP-AVS workshop. This is my first ever conference/workshop presentation. //Excited!!
Robust Semantic Place Recognition with Vocabulary Tree and Landmark Detection
Links: PDF | Video
Formal links of this publication will be made available later in a publications section.
Beauty in the dual space
Reading djvu files on Purdue ECN machines
As I’m moving out of my previous office EE51, I found myself staying in MSEE189 for a lot of time. The bad thing about these linux machines are that you do not have root permission to install softwares you want. It doesn’t display Chinese characters neither. (Which I found no way to solve for now.) But the good thing is now I can read djvu files on these linux machines. Here is how:
- Download a version of djvulibre3 source first (As ECN only support up to QT3, they should consider updating now.
- ./configure->make->make install prefix=”~/someplace”
- add “export LD_LIBRARY_PATH=”~/someplace/lib” to ~/.bashrc
After that, you can get a copy of djvulibre3 that is runnable as regular user, which doesn’t need to be installed with root permission.
I’m attaching a copy of my compiled djvulibre binary that you can download and use on these Purdue ECN linux x86_64 machines here: djvulibre3
Rebuilding opencv2 package in ROS-diamondback with FFMPEG support
ROS is publishing ros-electric distribution in a few months, and opencv2 package is going to be deprecated. We are going to need opencv by ourselves again (hooray). But before an ros-electric release comes, there are still some problems with using opencv2 package in ros-diamondback, especially when we need ffmpeg support, to use cv::VideoCapture.
To rebuild the opencv2 package with ffmpeg support, you need to follow these steps:
1. locate your opencv2 package:
$ roscd opencv2
2. if you installed ros using SVN, then simply edit Makefile,
locate the line with “-D WITH_FFMPEG=OFF”, change the OFF to ON.
then save the Makefile, then type
$ rm installed
$ make
3. if you installed ros using apt-get, then we need to make using root. (perhaps not so good choice, but it works at least).
$ sudo su -
# source /opt/ros/diamondback/setup.bash
# roscd opencv2
# rm installed
# gedit Makefile (modify the Makefile as mentioned in step2)
# make
4. after this make, you can use cv::VideoCapture to open cam/avi files now. However, I ran into another annoying warning which pops out constantly when you convert yuv image to bgr image, like this: [swscaler @ 0x842fa20]No accelerated colorspace conversion found.
The reason of the warning is that opencv2 uses a custom built ffmpeg library which resides in /3rdparty/include/ffmpeg_, without libx264 support. We can override this library with 0.7.3 ffmpeg library which can be downloaded from here: http://www.ffmpeg.org/releases/ffmpeg-0.7.3.tar.gz
After downloading, follow the instructions here: http://ubuntuforums.org/showthread.php?t=786095
up to step5.
Now we’ve installed our own ffmpeg library. Build opencv2 package again, then the annoying swscale warning will be gone!
Running ROS with P3DX+SickLMS2xx+Kinect
Basically I followed the excellent tutorial written by Nikhil Soni: http://thebattlegoeson.blogspot.com/2011/06/xyz.html
except that I want to make a few notes:
1. The default sicktoolbox package I get from apt-get ros-diamondpack-laser-drivers didn’t work. I had to apt-get remove it and svn co a new package and do make by myself. After that, you will get the “build” directory as mentioned in the tutorial by Nikhil. Only adding a statement “sleep(30)” was enough for me. I didn’t need to add the open flag “O_DELAY” and by the way that was an invalid flag by my GCC. In order to update your sicktoolbox package, you need to run “make” and “make install” again from the “build” directory. “rosmake” doesn’t really update the binary in sicktoolbox/bin
2. There is a launch file that I would like to provide for putting together those many packages needed to run p2os+sicklms2xx+kinect+joystick
<launch>
<!-- run the teleop node to send movement velocities to the pioneer -->
<param name="~/port" value="/dev/ttyUSB0" />
<param name="axis_vx" type="int" value="1" />
<param name="axis_vw" type="int" value="0" />
<param name="axis_vy" type="int" value="2" />
<param name="deadman_button" type="int" value="0" />
<param name="run_button" type="int" value="0" />
<node pkg="p2os_dashboard" type="p2os_dashboard" name="p2os_dashboard"/>
<node pkg="p2os_driver" type="p2os" name="p2os" />
<node pkg="p2os_teleop" type="p2os_teleop" name="p2os_teleop">
<remap from="/des_vel" to="/base_controller/command" />
</node>
<!-- run a joy node to control the pioneer -->
<node pkg="joy" type="joy_node" name="pioneer_joy_controller">
<param name="dev" type="string" value="/dev/input/js0" />
</node>
<node pkg="sicktoolbox_wrapper" type="sicklms" name="sicklms">
<param name="~/port" value="/dev/ttyUSB1" />
<param name="~/baud" value="38400"/>
<param name="~/resolution" value="1.0"/>
</node>
<include file="$(find openni_camera)/launch/openni_node.launch"/>
</launch>Note here that the tricky part is the axis and deadmanbutton setup for the joystick. You need to check your joystick’s button numbers to apply correspondingly. deadmanbutton and run button need to be set to the same, in order that you click that button together with joystick to drive the robot.
ros cv::namedWindow doesn’t show up
Description: running ROS on Ubuntu10.04 with built-in OpenCV 2.2, wanted to show an image in an HighGUI window.
I added
cv::namedWindow(“Image Window”, CV_WINDOW_AUTOSIZE);
in the constructor
and
cv::imshow(“Image Window”, image); //cv::Mat image;
in the main loop.
but the image window never showed up
Solution:
1) add
cv::waitKey(1); // can be other numbers for waiting
then the window would pop up by itself.
2) in the constructor or before the main loop, add the following code. (Need <boost/thread.hpp>)
static boost::once_flag cv_thread_flag = BOOST_ONCE_INIT; boost::call_once(cv_thread_flag, &cv::startWindowThread);
Semantic Place Recognition
How to – create a wordpress blog on your Purdue ITAP web server
Recently I got several inquiries on how to setup a wordpress blog style homepage using Purdue ITAP’s web server.
So I decided to write up this “how to” tutorial.
Step 0: Preparation
- Download wordpress to your own computer:
http://wordpress.org/latest.zip - Download a ssh client software at your preference, for example:
PuTTY: http://www.putty.org/
SSH Secure Shell: http://www.colorado.edu/its/docs/authenticate/printouts/win_ssh.html - Maybe you would also like to learn how to setup a “network drive” on Windows, so that your can browse your ITAP server space easily.
Please refer to here: http://www.itap.purdue.edu/tlt/careeraccount/
Step 1: Uploading WordPress
- Access your ITAP server space with any one method mentioned in Step0-3.
- Upload your downloaded wordpress.zip file onto your ITAP server space, put it to the ***www*** directory.
- Remote login to your ITAP server using the ssh client software you have downloaded, with the following details:
Hostname: expert.ics.purdue.edu
username: your career account name
password: your password
After logging in, you would see something like:
“Sun Microsystems Inc. SunOS 5.10 Generic January 2005″
“expert.ics.purdue.edu%”
Then, following the following commands:
expert.ics.purdue.edu% cd www expert.ics.purdue.edu% ls wordpress-3.0.4.zip expert.ics.purdue.edu% unzip wordpress-3.0.4.zip #Bunch of outputs now... #Finishing unzip expert.ics.purdue.edu% ls wordpress wordpress-3.0.4.zip expert.ics.purdue.edu% mv wordpress/* . expert.ics.purdue.edu% rm -rf wordpress/ wordpress-3.0.4.zip
(I’m doing the unzip on the server side to save your time from unzipping it in the Windows network drive, that will be very slow!
However, you could still do the unzip using Windows network drive as you like.) - Now, open your browser, and type “http://web.ics.purdue.edu/~yourcareeraccount/”
- Here you go, you are ready to begin setting up the wordpress
Step 2: Preparing an MySQL account
- Purdue provide to every student a MySQL account with about 50MB database.
- Create you MySQL account using the link: https://www.purdue.edu/apps/ics/a/MySQLAccount
Remember your password, we assume it is “purdue’
Step 3: Famous WordPress 5 Minute Install:
- The famous installation process is described in more detail here:
http://codex.wordpress.org/Installing_WordPress#Famous_5-Minute_Install - To summarize, simply first go to:
http://web.ics.purdue.edu/~yourcareeraccount/
- You should see the welcome screen telling you to install WordPress.
- Click next until the page asking for database information.
- Fill in the following:
Database Name: yourcareeraccount
User Name: yourcareeraccount
Password: purdue ( as we assumed before. This password is different than your career account password).
Database Host: mydb.ics.purdue.edu
Table Prefix: you can just keep it. - After that, WordPress will try to setup this configuration. There should be no need to upload a configuration file by yourself. However, if anything wrong happens (like no writing permision, etc.), you need to edit the wp_config.php by yourself and upload it onto the server by yourself. Follow the installation process mentioned earlier.
- After setting up database, all the other steps basically is just like creating a new blog on any well known websites.
Step 4:
Happy Blogging! You can now start to customize your website, using ways to add menus, widgets, etc. To make it more research oriented.
Purdue Mymail for Thunderbird
This post is out-dated. For the most recent documents, see this (Mobile devices) and this (Email clients).
Purdue Mymail configuration:
Mobile Devices:
https://www.purdue.edu/goldanswers/app/portlets/results/viewsolution.jsp?solutionid=041027917252509&isguest=true
Thunderbird:
Normally you only need to change the original “username.mail.purdue.edu” to “mymail.purdue.edu”
With the original “STARTTLS” + port 143
If this doesn’t work, try changing “connection security” to “SSL/TLS”, port to “993″.
For the outgoing server,
Server name: smtp.purdue.edu
port: 587
Security type: STARTTLS
