Hải Phòng => Cần gấp giảng viên lập trình robot dạy về lập trình robot với ROS Predictive Localizati tuyển gấp đi làm ngay T08/2025

Tuyển dụng Check with seller Hải Phòng => Cần gấp giảng viên lập trình robot dạy về lập trình robot với ROS Predictive Localizati

Published date:2025-08-09
  • Location: Hải Phòng, Việt Nam

Tuyển dụng giáo viên ngành giáo dục Hải Phòng => Chào bạn,

Tôi hiểu bạn đang cần gấp một giảng viên có kinh nghiệm về lập trình robot, đặc biệt là về ROS và Predictive Localization. Tuy nhiên, tôi là một AI, nên không thể trực tiếp làm giảng viên. Dù vậy, tôi có thể cung cấp cho bạn một về Predictive Localization trong ROS, hy vọng nó sẽ giúp bạn phần nào trong quá trình học tập và giảng dạy.

Hướng dẫn chi tiết về Predictive Localization với ROS



1. Giới thiệu chung về Predictive Localization



Localization (Định vị):

Là quá trình ước tính vị trí và hướng của robot trong môi trường.

Predictive Localization (Định vị dự đoán):

Là một kỹ thuật định vị kết hợp thông tin hiện tại từ cảm biến với các mô hình dự đoán để ước tính vị trí của robot trong tương lai. Điều này đặc biệt hữu ích trong môi trường động hoặc khi cảm biến bị nhiễu.

Ưu điểm của Predictive Localization:


Cải thiện độ chính xác và độ tin cậy của định vị.
Giảm thiểu ảnh hưởng của nhiễu cảm biến.
Cho phép robot hoạt động hiệu quả hơn trong môi trường động.

2. Các thành phần chính trong Predictive Localization



Cảm biến:

Cung cấp dữ liệu về môi trường xung quanh robot (ví dụ: LiDAR, camera, IMU).

Mô hình chuyển động (Motion Model):

Mô tả cách robot di chuyển dựa trên các lệnh điều khiển (ví dụ: vận tốc tuyến tính và vận tốc góc).

Mô hình cảm biến (Sensor Model):

Mô tả mối quan hệ giữa dữ liệu cảm biến và môi trường xung quanh.

Bộ lọc (Filter):

Kết hợp dữ liệu cảm biến, mô hình chuyển động và mô hình cảm biến để ước tính vị trí của robot. Các bộ lọc phổ biến bao gồm:

Kalman Filter (KF):

Giả định rằng tất cả các mô hình đều tuyến tính và Gaussian.

Extended Kalman Filter (EKF):

Mở rộng KF để xử lý các mô hình phi tuyến.

Unscented Kalman Filter (UKF):

Sử dụng một tập hợp các điểm mẫu (sigma points) để xấp xỉ phân phối Gaussian.

Particle Filter (PF):

Sử dụng một tập hợp các hạt (particles) để biểu diễn phân phối xác suất của vị trí robot.

3. Triển khai Predictive Localization trong ROS



3.1. Cài đặt ROS và các gói cần thiết



Đảm bảo bạn đã cài đặt ROS (ví dụ: Noetic Ninjemys) và các gói liên quan đến localization, ví dụ:

```bash
sudo apt update
sudo apt install ros-noetic-navigation
sudo apt install ros-noetic-robot-localization
```

3.2. Tạo một ROS Package



```bash
mkdir -p catkin_ws/src
cd catkin_ws/src
catkin_create_pkg my_localization_pkg roscpp rospy sensor_msgs nav_msgs tf
cd ..
catkin_make
source devel/setup.bash
```

3.3. Xây dựng Motion Model



Tạo một node ROS để ước tính vị trí robot dựa trên các lệnh điều khiển.
Sử dụng thông tin vận tốc (tuyến tính và góc) từ các topic `/cmd_vel` hoặc `/odom`.
Áp dụng các phương trình chuyển động (kinematics) để tính toán vị trí mới của robot sau một khoảng thời gian nhất định.

Ví dụ (motion_model.cpp):

```cpp
include
include
include
include

double x = 0.0;
double y = 0.0;
double theta = 0.0;
double vx = 0.0;
double vy = 0.0;
double vth = 0.0;

void cmd_vel_callback(const geometry_msgs::Twist::ConstPtr& msg) {
vx = msg->linear.x;
vy = msg->linear.y;
vth = msg->angular.z;
}

int main(int argc, char*argv){
ros::init(argc, argv, motion_model);

ros::NodeHandle n;
ros::Publisher odom_pub = n.advertise(odom, 50);
ros::Subscriber cmd_vel_sub = n.subscribe(cmd_vel, 10, cmd_vel_callback);
tf::TransformBroadcaster odom_broadcaster;

ros::Time current_time, last_time;
current_time = ros::Time::now();
last_time = ros::Time::now();

ros::Rate r(10.0);
while(n.ok()){

current_time = ros::Time::now();
double dt = (current_time - last_time).toSec();

// Update position
double delta_x = (vx cos(theta) - vy sin(theta)) dt;
double delta_y = (vx sin(theta) + vy cos(theta)) dt;
double delta_th = vth dt;

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

// Convert quaternion
geometry_msgs::Quaternion odom_quat = tf::createQuaternionMsgFromYaw(theta);

// Publish transform
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;

odom_broadcaster.sendTransform(odom_trans);

// Publish odometry message
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;

odom_pub.publish(odom);

last_time = current_time;
ros::spinOnce();
r.sleep();
}
}
```

Trong `CMakeLists.txt`:

```cmake
add_executable(motion_model src/motion_model.cpp)
target_link_libraries(motion_model ${catkin_LIBRARIES})
add_dependencies(motion_model ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
```

3.4. Xây dựng Sensor Model



Tạo một node ROS để xử lý dữ liệu cảm biến (ví dụ: LiDAR).
Xây dựng một mô hình cảm biến mô tả mối quan hệ giữa dữ liệu cảm biến và môi trường xung quanh.
Ví dụ: Nếu bạn sử dụng LiDAR, bạn có thể sử dụng ray tracing để mô phỏng các tia laser và so sánh chúng với bản đồ môi trường.

3.5. Triển khai Bộ lọc (ví dụ: EKF)



Sử dụng gói `robot_localization` để triển khai EKF.
Cấu hình EKF để sử dụng Motion Model và Sensor Model bạn đã xây dựng.
Điều chỉnh các tham số của EKF để đạt được hiệu suất định vị tốt nhất.

Ví dụ cấu hình `ekf.yaml`:

```yaml
frequency: 30.0
sensor_timeout: 0.1
two_d_mode: true

odom0: /odom
odom0_config: [true, true, false,
false, false, true,
false, false, false,
false, false, false,
false, false, false]
odom0_differential: false
odom0_relative: false

imu0: /imu/data
imu0_config: [false, false, false,
true, true, true,
false, false, false,
true, true, true,
false, false, false]
imu0_differential: false
imu0_relative: true

process_noise_covariance: [0.05, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.05, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.06, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.03, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.03, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.06, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.025, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.025, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.04, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.01, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.01, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.02, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.01, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.01, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.015]

initial_estimate_covariance: [1e-9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
1e-9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 1e-9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 1e-9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 1e-9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 1e-9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 1e-9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1e-9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1e-9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1e-9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1e-9, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1e-9, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1e-9, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1e-9, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1e-9, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1e-9]

```

3.6. Kết hợp Motion Model và Sensor Model với EKF



Đăng ký các topic chứa dữ liệu từ Motion Model và Sensor Model vào EKF.
EKF sẽ sử dụng các thông tin này để ước tính vị trí của robot.

3.7. Visualizing kết quả



Sử dụng `RViz` để hiển thị vị trí ước tính của robot trên bản đồ.
So sánh vị trí ước tính với vị trí thực tế để đánh giá hiệu suất của hệ thống định vị.

4. Predictive Step (Bước dự đoán)



Sau khi có được ước tính vị trí hiện tại, sử dụng Motion Model để dự đoán vị trí của robot trong tương lai.
Dự đoán này có thể được sử dụng để lập kế hoạch đường đi hoặc để điều khiển robot một cách chủ động hơn.

5. Các lưu ý quan trọng



Tuning:

Quá trình tuning các tham số của bộ lọc (ví dụ: covariance) là rất quan trọng để đạt được hiệu suất tốt nhất.

Đánh giá:

Sử dụng các metrics như Absolute Trajectory Error (ATE) và Relative Pose Error (RPE) để đánh giá hiệu suất của hệ thống định vị.

Bản đồ:

Chất lượng của bản đồ ảnh hưởng lớn đến độ chính xác của định vị.

Xử lý ngoại lệ:

Cần có cơ chế xử lý ngoại lệ khi cảm biến bị lỗi hoặc khi robot hoạt động trong môi trường không quen thuộc.

6. Tài liệu tham khảo



ROS Wiki:

[http://wiki.ros.org/](http://wiki.ros.org/)

robot\_localization package:

[http://wiki.ros.org/robot\_localization](http://wiki.ros.org/robot_localization)

Các bài báo khoa học về Predictive Localization:

Tìm kiếm trên Google Scholar.

Ví dụ cụ thể về việc sử dụng Particle Filter (PF) để Predictive Localization



(Đây là một ví dụ đơn giản, bạn cần điều chỉnh nó cho phù hợp với hệ thống robot của mình)

1. Tạo một class Particle:



```cpp
include

class Particle {
public:
double x, y, theta;
double weight;

Particle(double x, double y, double theta, double weight = 1.0) : x(x), y(y), theta(theta), weight(weight) {}

void predict(double v, double omega, double dt, double alpha_1, double alpha_2, double alpha_3, double alpha_4) {
std::random_device rd{};
std::mt19937 gen{rd()};
std::normal_distribution<> noise_v(0, sqrt(alpha_1 v v + alpha_2 omega omega));
std::normal_distribution<> noise_omega(0, sqrt(alpha_3 v v + alpha_4 omega omega));

double v_hat = v + noise_v(gen);
double omega_hat = omega + noise_omega(gen);

if (fabs(omega_hat) < 1e-6) { // Avoid division by zero
x += v_hat cos(theta) dt;
y += v_hat sin(theta) dt;
} else {
x += (v_hat / omega_hat) (sin(theta + omega_hat dt) - sin(theta));
y += (v_hat / omega_hat) (-cos(theta + omega_hat dt) + cos(theta));
theta += omega_hat dt;
}
theta = fmod(theta, 2 M_PI); // Normalize theta
}

void updateWeight(double sensor_x, double sensor_y, const std::vector>& landmarks, double sensor_range, double sigma_range, double sigma_bearing) {
weight = 1.0;
for (const auto& landmark : landmarks) {
double dx = landmark.first - x;
double dy = landmark.second - y;
double expected_range = sqrt(dx dx + dy dy);
double expected_bearing = atan2(dy, dx) - theta;
expected_bearing = fmod(expected_bearing + M_PI, 2 M_PI) - M_PI;

double range_prob = exp(-pow(sensor_range - expected_range, 2) / (2 sigma_range sigma_range));
double bearing_prob = exp(-pow(fmod(sensor_x - expected_bearing + M_PI, 2 M_PI) - M_PI, 2) / (2 sigma_bearing sigma_bearing));

weight *= range_prob bearing_prob;
}
}
};
```

2. Tạo một class Particle Filter:



```cpp
include
include
include

class ParticleFilter {
public:
std::vector particles;
int num_particles;

ParticleFilter(int num_particles) : num_particles(num_particles) {
std::random_device rd{};
std::mt19937 gen{rd()};
std::uniform_real_distribution<> dis(0.0, 1.0);

for (int i = 0; i < num_particles; ++i) {
particles.emplace_back(dis(gen) 10, dis(gen) 10, dis(gen) 2 M_PI); // Initialize randomly in a 10x10 area
}
}

void predict(double v, double omega, double dt, double alpha_1, double alpha_2, double alpha_3, double alpha_4) {
for (auto& particle : particles) {
particle.predict(v, omega, dt, alpha_1, alpha_2, alpha_3, alpha_4);
}
}

void updateWeights(double sensor_x, double sensor_y, const std::vector>& landmarks, double sensor_range, double sigma_range, double sigma_bearing) {
for (auto& particle : particles) {
particle.updateWeight(sensor_x, sensor_y, landmarks, sensor_range, sigma_range, sigma_bearing);
}
}

void resample() {
std::vector weights(num_particles);
for (int i = 0; i < num_particles; ++i) {
weights[i] = particles[i].weight;
}

// Normalize weights
double sum_weights = std::accumulate(weights.begin(), weights.end(), 0.0);
if (sum_weights > 0) {
for (int i = 0; i < num_particles; ++i) {
weights[i] /= sum_weights;
}
} else {
// Handle the case where all weights are zero (e.g., by resetting the filter)
std::random_device rd{};
std::mt19937 gen{rd()};
std::uniform_real_distribution<> dis(0.0, 1.0);
for (int i = 0; i < num_particles; ++i) {
particles[i] = Particle(dis(gen) 10, dis(gen) 10, dis(gen) 2 M_PI);
weights[i] = 1.0 / num_particles;
}
}

std::random_device rd{};
std::mt19937 gen{rd()};
std::uniform_real_distribution<> dis(0.0, 1.0 / num_particles);

std::vector new_particles;
int index = static_cast(dis(gen) num_particles);
double beta = 0.0;

for (int i = 0; i < num_particles; ++i) {
beta += dis(gen) 2 std::max(weights.begin(), weights.end())[std::distance(weights.begin(), std::max_element(weights.begin(), weights.end()))];
while (beta > weights[index]) {
beta -= weights[index];
index = (index + 1) % num_particles;
}
new_particles.push_back(particles[index]);
}

particles = new_particles;
}

std::pair getBestEstimate() const {
double best_x = 0.0;
double best_y = 0.0;
double best_theta = 0.0;
double total_weight = 0.0;

for (const auto& particle : particles) {
best_x += particle.x particle.weight;
best_y += particle.y particle.weight;
best_theta += particle.theta particle.weight;
total_weight += particle.weight;
}

if (total_weight > 0) {
best_x /= total_weight;
best_y /= total_weight;
best_theta /= total_weight;
}

return {best_x, best_y};
}
};
```

3. Trong Node ROS chính:



```cpp
include
include
include
include particle_filter.h

ParticleFilter pf(1000); // 1000 particles

// Landmarks (example)
std::vector> landmarks = {
{2.0, 2.0},
{8.0, 3.0},
{5.0, 7.0}
};

double sensor_x, sensor_y; // Example sensor readings

void cmd_vel_callback(const geometry_msgs::Twist::ConstPtr& msg) {
double v = msg->linear.x;
double omega = msg->angular.z;
double dt = 0.1; // Example time step

pf.predict(v, omega, dt, 0.1, 0.1, 0.1, 0.1); // Example noise parameters

// Simulate sensor data (replace with actual sensor readings)
sensor_x = v*dt + (rand() % 10 - 5)/10.0; // adding some noise
sensor_y = omega*dt + (rand() % 10 - 5)/10.0; // adding some noise

pf.updateWeights(sensor_x, sensor_y, landmarks, 1.0, 0.2, 0.2); // Example sensor parameters

pf.resample();

auto estimate = pf.getBestEstimate();
ROS_INFO(Estimated position: x=%f, y=%f, estimate.first, estimate.second);
}

int main(int argc, char*argv) {
ros::init(argc, argv, particle_filter_node);
ros::NodeHandle n;
ros::Subscriber cmd_vel_sub = n.subscribe(cmd_vel, 10, cmd_vel_callback);
ros::spin();
return 0;
}
```

Giải thích:



`Particle` class:

Đại diện cho một giả thuyết về vị trí robot. Bao gồm `x`, `y`, `theta` (hướng), và `weight` (mức độ tin cậy).

`predict` method:

Dự đoán vị trí mới của hạt dựa trên vận tốc, vận tốc góc, và thời gian. Thêm nhiễu vào quá trình chuyển động để mô phỏng sự không chắc chắn.

`updateWeight` method:

Tính toán trọng số của hạt dựa trên sự phù hợp giữa dự đoán và dữ liệu cảm biến.

`ParticleFilter` class:

Quản lý một tập hợp các hạt.

`predict` method (PF):

Gọi `predict` method của từng hạt.

`updateWeights` method (PF):

Gọi `updateWeight` method của từng hạt.

`resample` method:

Chọn lại các hạt dựa trên trọng số của chúng. Các hạt có trọng số cao hơn có nhiều khả năng được chọn hơn.

`getBestEstimate` method:

Trả về ước tính vị trí tốt nhất dựa trên trọng số của các hạt.

`main` function:

Khởi tạo ROS node, đăng ký subscriber cho topic `/cmd_vel`, và chạy particle filter.

Quan trọng:



Thay thế dữ liệu cảm biến giả lập:

Ví dụ trên sử dụng dữ liệu cảm biến giả lập. Bạn cần thay thế chúng bằng dữ liệu thực tế từ cảm biến của robot (ví dụ: LiDAR, camera).

Điều chỉnh tham số:

Các tham số như số lượng hạt, covariance, và noise parameters cần được điều chỉnh để đạt được hiệu suất tốt nhất.

Xây dựng sensor model:

Ví dụ này sử dụng một sensor model rất đơn giản. Bạn cần xây dựng một sensor model phức tạp hơn để mô phỏng chính xác các đặc tính của cảm biến bạn đang sử dụng.

Map:

Để localization được chính xác bạn cần có map của môi trường. Bạn có thể sử dụng các package như `gmapping` hoặc `cartographer` để tạo map.

Global Localization:

Particle Filter có thể được sử dụng để global localization (xác định vị trí ban đầu của robot khi không có thông tin trước).

Lời khuyên cho giảng viên:



Bắt đầu với các ví dụ đơn giản và tăng dần độ phức tạp.
Khuyến khích sinh viên thử nghiệm với các tham số khác nhau để hiểu rõ hơn về cách chúng ảnh hưởng đến hiệu suất của hệ thống định vị.
Sử dụng các công cụ visualization như RViz để giúp sinh viên hiểu rõ hơn về cách hoạt động của các bộ lọc.
Giao các bài tập thực tế để sinh viên có thể áp dụng những kiến thức đã học vào giải quyết các vấn đề thực tế.
Hướng dẫn sinh viên đọc và nghiên cứu các bài báo khoa học để cập nhật những kiến thức mới nhất về Predictive Localization.

Hy vọng hướng dẫn này sẽ giúp bạn. Chúc bạn thành công trong việc giảng dạy!

Contact seller Share

Useful information

  • Avoid scams by acting locally or paying with PayPal
  • Never pay with Western Union, Moneygram or other anonymous payment services
  • Don't buy or sell outside of your country. Don't accept cashier cheques from outside your country
  • This site is never involved in any transaction, and does not handle payments, shipping, guarantee transactions, provide escrow services, or offer "buyer protection" or "seller certification"

Related listings

Comments

    Leave your comment (spam and offensive messages will be removed)

    Tuyển gấp đi làm ngay, nhiều vị trí bao ăn ở không cần kinh nghiệm

    Việc làm tuyển gấp,việc làm tết tuyển nhân viên thành phố hồ chí minh, Hồ Chí Minh tuyển gấp thành phố hồ chí minh tuyển nhân viên ngân hàng tại thành phố hồ chí minh tuyển công nhân viên chức Việc làm sài gòn tuyển dụng mua bán nhanh tuyển nhân viên nữ tuyển nhân viên lương cao thành phố hồ chí minh tuyển nhân viên 24 thành phố hồ chí minh tuyển bảo vệ thành phố hồ chí minh Việc làm tuyển dụng TGDD Tìm việc nhanh 24h tuyển gấp thành phố hồ chí minh, Hồ Chí Minh tìm việc làm thành phố hồ chí minh Siêu thị việc làm thành phố hồ chí minh việc làm chợ tốt, chợ tốt việc làm, tìm việc làm chợ tốt, chợ tốt tìm việc làm, tìm việc chợ tốt, viec làm chợ tốt, người tìm việc chợ tốt, kiếm việc làm chợ tốt, chợ tốt tìm việc, chợ tốt việc làm lương tuần, chợ tốt kiếm việc làm, tìm việc làm trên chợ tốt, vieclam chotot, cho tot tìm việc, chotot tim kiem viec lam, chotot tim viec, chotot tuyen dung, chotot tuyen lai xe, chotot tìm việc, chotot viec lam, chotot viec làm, chơ tot viec lam, chơ tôt viêc lam, chơ tốt tìm việc làm, chợ tốt giới thiệu việc làm, chợ tốt kiếm việc, chợ tốt làm việc, chợ tốt người tìm việc, chợ tốt tim viec, chợ tốt tìm kiếm việc làm, chợ tốt tìm người làm, chợ tốt tìm việc làm rửa chén nhà hàng, chợ tốt tìm việc làm theo giờ, chợ tốt tìm việc làm thêm, chợ tốt tìm việc làm tài xế, chợ tốt tìm việc làm tại nhà, chợ tốt tìm việc làm tạp vụ, chợ tốt viec lam, chợ tốt việc, chợ tốt việc làm & đối tác, chợ tốt việc làm bảo vệ, chợ tốt việc làm gia công tại nhà, chợ tốt việc làm lương tuần đóng gói dán tem, chợ tốt việc làm may mặc, chợ tốt việc làm part time, chợ tốt việc làm thêm, chợ tốt việc làm thời vụ, chợ tốt việc làm tài xế, chợ tốt việc làm tại nhà, chợ tốt việc làm tạp vụ, chợ tốt việc làm tết Việc làm tuyển dụng đi làm sau tết, tuyển công chức, bách hoá, của hàng viec lam tot

    việc làm tốt Đống Đa, Hà Nội cho quý bà | chợ việc làm Kiên Giang cho sếp nữ | việc làm uy tín Kiên Giang cho sếp nam | tuyển dụng gấp Kiên Giang mới nhất hôm nay | cần tuyển gấp Kiên Giang đi làm ngay | tìm việc làm 8 tiếng Đăk Nông hôm nay | cần tìm việc An Dương, Hải Phòng làm lương tuần | tuyển người Cao Bằng mới nhất | tìm việc làm Bắc Ninh cần tuyển gấp | tìm việc làm chợ tốt Thạch Thất, thành phố Hà Nội lương cao | chợ tốt việc làm Sóc Sơn - Hà Nội chính sách tốt | cho tốt việc làm Bình Thủy, TP. Cần Thơ bao ăn ở | cần người gấp Thanh Trì, thành phố Hà Nội phụ cấp tiền cơm | việc làm tốt Cầu Giấy - Hà Nội phụ cấp xăng xe | chợ việc làm Tp. Phan Thiết có lương tháng mười ba | việc làm uy tín Đống Đa, Hà Nội được đóng bảo hiểm | tuyển dụng gấp Sơn Tây - Hà Nội bảo hiểm full lương | cần tuyển gấp Hà Nam nhận người lớn tuổi | tìm việc làm 9 tiếng Quận Tây Hồ, Thành phố Hà Nội không cần kinh nghiệm | cần tìm việc TP Cao Lãnh, Đồng Tháp cho quý bà | tuyển người quận 5, Tp HCM cho sếp nữ | tìm việc làm Đà Lạt cho sếp nam | tìm việc làm chợ tốt Hoàng Mai ,TP Hà Nội mới nhất hôm nay | chợ tốt việc làm Thành phố Phan Rang - Tháp Chàm đi làm ngay | cho tốt việc làm Hai Bà Trưng - Hà Nội hôm nay | cần người gấp Quang Binh Province làm lương tuần | việc làm tốt Thành phố Điện Biên Phủ mới nhất | chợ việc làm An Minh - Tỉnh Kiên Giang cần tuyển gấp | việc làm uy tín Sóc trăng lương cao | tuyển dụng gấp Thanh Hoa chính sách tốt | cần tuyển gấp Điện biên bao ăn ở | tìm việc làm 10 tiếng Sóc Sơn, TP Hà Nội phụ cấp tiền cơm | cần tìm việc Từ Liêm, Thành phố Hà Nội phụ cấp xăng xe | tuyển người Tp Phan Rang-Tháp Chàm tỉnh Ninh Thuận có lương tháng mười ba | tìm việc làm Việt Nam được đóng bảo hiểm | tìm việc làm chợ tốt Cầu Giấy - Hà Nội bảo hiểm full lương | chợ tốt việc làm Hoàn Kiếm, Tp. Hà Nội nhận người lớn tuổi | cho tốt việc làm Bắc Giang không cần kinh nghiệm | cần người gấp TP. Thái Nguyên cho quý bà | việc làm tốt Cữu Long cho sếp nữ | chợ việc làm Đồng Tháp cho sếp nam | việc làm uy tín Vũng Tàu mới nhất hôm nay | tuyển dụng gấp Thu Duc City đi làm ngay | cần tuyển gấp Cầu Giấy, Hà Nội hôm nay | tìm việc làm 11 tiếng sadec làm lương tuần | cần tìm việc Cần Thơ mới nhất | tuyển người Hai Bà Trưng, Hà Nội cần tuyển gấp | tìm việc làm Núi Thành - Quảng Nam lương cao | tìm việc làm chợ tốt TP. Thái Bình chính sách tốt | chợ tốt việc làm Châu Thành, Sóc Trăng bao ăn ở | cho tốt việc làm Q.11, TP. HCM phụ cấp tiền cơm | cần người gấp Q.10, TP. HCM phụ cấp xăng xe | việc làm tốt Hưng Yên có lương tháng mười ba | chợ việc làm Phan Thiết được đóng bảo hiểm | việc làm uy tín Quảng Bình bảo hiểm full lương | tuyển dụng gấp Lâm Đồng nhận người lớn tuổi | cần tuyển gấp Điện Biên không cần kinh nghiệm | tìm việc làm 12 tiếng Bù Đăng cho quý bà | cần tìm việc Quận Phú Nhuận, HCM cho sếp nữ | tuyển người Tư Nghĩa - Quảng Ngãi cho sếp nam | tìm việc làm Phùng Hưng - Huế mới nhất hôm nay | tìm việc làm chợ tốt Tp Thủ Duwcs đi làm ngay | chợ tốt việc làm Quận 2, TP.HCM hôm nay | cho tốt việc làm Bảo Lộc làm lương tuần | cần người gấp Thủ Đức, TP. Hồ Chí Minh mới nhất | việc làm tốt Sóc Trăng cần tuyển gấp | chợ việc làm Hưng Yên lương cao | việc làm uy tín Điện Biên chính sách tốt | tuyển dụng gấp Nhật Bản bao ăn ở | cần tuyển gấp Điện Biên phụ cấp tiền cơm | tìm việc làm 13 tiếng Thanh Hoá phụ cấp xăng xe | cần tìm việc Ba Đình, Hà Nội có lương tháng mười ba | tuyển người Quận 4 được đóng bảo hiểm | tìm việc làm Ngữ Pháp bảo hiểm full lương | tìm việc làm chợ tốt Bù Đăng nhận người lớn tuổi | chợ tốt việc làm Miền Trung không cần kinh nghiệm | cho tốt việc làm Điện Biên cho quý bà | cần người gấp Cao Bằng cho sếp nữ | việc làm tốt Đồng Tháp cho sếp nam |

    vieclamchotot | chototvieclam | chợ tốt việc làm | Việc làm uy tín