Science Score: 44.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (12.4%) to scientific vocabulary
Last synced: 6 months ago · JSON representation ·

Repository

Basic Info
  • Host: GitHub
  • Owner: godhj93
  • Language: Python
  • Default Branch: master
  • Size: 44.8 MB
Statistics
  • Stars: 1
  • Watchers: 1
  • Forks: 0
  • Open Issues: 0
  • Releases: 0
Created about 1 year ago · Last pushed 12 months ago
Metadata Files
Readme Citation

README.md

1. Introduction

This repository contains the code and data for the paper "Demonstrating Artistic Drawing on Low-Cost Artist Robot" presented at CoRL 2025. The paper discusses the development of a low-cost artist robot capable of drawing pictures on paper. The robot is built using ROS and MuJoCo and comprises a Koch1.1 robot and a pen holder. It is controlled by a computer via ROS, enabling it to draw pictures by moving the pen holder.

system_overview

Demo Video

2. Setup

We provide a Dockerfile to create an image with all the necessary tools to run the workflow. To build the image, run the following command:

```bash

To build the image

sh build.sh

To run the container

sh run.sh ``` When you successfully build the image and run the container, you will be inside the container as shown below:

build_image run_container

Since MuJoCo is used for simulating koch1.1, we need GUI support. To run the container with GUI support, run the following command:

```bash

In another terminal, run the following command

xhost + ```

xhost

When you successfully run the container, you can access ROS workspace as follows:

```bash

To move to the workspace

cd ~/lowcostartistrobot/lerobotws/

build source code

catkin build

source the workspace

source devel/setup.bash ```

To run the simulation, run the following command:

```bash

To fix link error to use CUDA, run the following command

ldconfig

To run the low cost artist robot in the simulation

roslaunch lerobot simulation.launch

To run the real robot, run the following command

roslaunch lerobot real_bot.launch ```

  • You can see the drawing result via RViz in real-time

Additional features

We augmented Whisper model which can listen to the user's voice and convert it to text. If you have a microphone, you can use this feature!

By default, we disabled this feature. To enable this feature, you can change the script as follows:

```python3

In the "lowcostartistrobot/lerobotws/src/lerobot/scripts/drawing_client.py"

Change the value of "MIC" to True (Line 22)

MIC = True ```

3. Real Robot Configuration

We adopted the Koch1.1 robot as the base robot for our low-cost artist robot. The Koch1.1 robot is a 6-DOF robot arm with a 3D-printed structure and Dynamixel XL-330 and XL-430 actuators. The assembly of the robot is straightforward. Details on the assembly and connection of the robot to the computer are provided in the following repository: Koch1.1. You have to see "the follower arm" part in the repository to assemble the robot. This video will help you to assemble the robot.

Pen and Pen Holder Design

We designed a pen holder specifically for the Koch1.1 robot, enabling precise movement of a pen in the x, y, and z directions. The pen holder was modeled in SolidWorks and fabricated using 3D printing technology. It is securely mounted to the Koch1.1 robot using screws, ensuring stability during operation. In our study, we utilized four actuators to control the pen, with an additional servo included to support further development and enhanced functionality.

The 3D model of the pen holder is provided in the 3D_Models directory. It is available in both STL and SLDPRT formats, ensuring compatibility with SolidWorks. Additionally, the directory contains a 3D model of a compatible pen, also provided in STL and SLDPRT formats, making it easy to integrate and use with SolidWorks for your projects.

Pen Holder Pen Assembly

You can modify the robot description for your specific pen holder design by editing the "lowcostartistrobot/lerobotws/src/lerobot/scripts/lowcostrobot/lowcostrobot.xml" file.

In the file, you can adjust the following parameters to match your pen holder design: xml <joint name="joint5" class="joint5"/> <geom pos="-0.01 0.004 -0.01" quat="-0.5 0.5 0.5 0.5" type="mesh" name="Pen_Holder" mesh="Pen_Holder" rgba="1 1 1 1"/> <geom pos="-0.0035 0.025 0.05" quat="0 1 0 0" type="mesh" name="Pen" mesh="Pen" rgba="0.5 0.5 0.5 1"/> Here, you can adjust the position and orientation of the pen holder and pen to match your design. Additionally, The filepath must be updated to reflect the location of your STL files in the same file.

xml <asset> <mesh file="/root/low_cost_artist_robot/lerobot_ws/src/lerobot/scripts/low_cost_robot/assets/STL/Follower_Base.stl" scale="0.001 0.001 0.001"/> <mesh file="/root/low_cost_artist_robot/lerobot_ws/src/lerobot/scripts/low_cost_robot/assets/STL/Follower_Shoulder_Rotation.stl" scale="0.001 0.001 0.001"/> <mesh file="/root/low_cost_artist_robot/lerobot_ws/src/lerobot/scripts/low_cost_robot/assets/STL/Follower_Shoulder_To_Elbow.stl" scale="0.001 0.001 0.001"/> <mesh file="/root/low_cost_artist_robot/lerobot_ws/src/lerobot/scripts/low_cost_robot/assets/STL/Follower_Elbow_To_Wrist_Extension.stl" scale="0.001 0.001 0.001"/> <mesh file="/root/low_cost_artist_robot/lerobot_ws/src/lerobot/scripts/low_cost_robot/assets/STL/Follower_Elbow_To_Wrist.stl" scale="0.001 0.001 0.001"/> <mesh file="/root/low_cost_artist_robot/lerobot_ws/src/lerobot/scripts/low_cost_robot/assets/STL/Pen_Holder.stl" scale="0.001 0.001 0.001"/> <mesh file="/root/low_cost_artist_robot/lerobot_ws/src/lerobot/scripts/low_cost_robot/assets/STL/Pen.stl" scale="0.001 0.001 0.001"/> <mesh file="/root/low_cost_artist_robot/lerobot_ws/src/lerobot/scripts/low_cost_robot/assets/STL/XL-330.stl" scale="0.001 0.001 0.001"/> <mesh file="/root/low_cost_artist_robot/lerobot_ws/src/lerobot/scripts/low_cost_robot/assets/STL/XL-430.stl" scale="0.001 0.001 0.001"/> </asset>

Whiteboard

To simulate the drawing process on the whiteboard, you can use the "lowcostartistrobot/lerobotws/src/lerobot/scripts/lowcostrobot/scene.xml" file. The size of the whiteboard can be adjusted by modifying the size parameter within the file. Additionally, it is essential to specify the friction parameter to ensure the simulation aligns with your specific requirements.

```xml

<body name="white_board" pos="-0.05 0.2 0.01">
    <inertial pos="0 0 0" mass="0.1" diaginertia="0.00016667 0.00016667 0.00016667"/>
    <geom friction="0.2 0.01 0.001" condim="3" pos="0.08 0.15 0" size="0.2 0.2 0.001" type="box" name="white_board" rgba="1 1 1 1" priority="1"/>
</body>

```

4. Recording your own drawing

When you try to record your own drawing in the simulation, you can refer the following script:

```python

In the "lowcostartistrobot/lerobotws/src/lerobot/scripts/drawing_server.py"

Line 35-69

import enum

class Resolution(enum.Enum): SD = (480, 640) HD = (720, 1280) UHD = (2160, 3840)

def quartic(t: float) -> float: return 0 if abs(t) > 1 else (1 - t*2) * 2

def blendcoef(t: float, duration: float, std: float) -> float: normalisedtime = 2 * t / duration - 1 return quartic(normalised_time / std)

def unitsmooth(normalisedtime: float) -> float: return 1 - np.cos(normalised_time * 2 * np.pi)

def azimuth( time: float, duration: float, totalrotation: float, offset: float ) -> float: return offset + unitsmooth(time / duration) * total_rotation

res = Resolution.SD fps = 60 duration = 1000.0 ctrlrate = 2 ctrlstd = 0.05 totalrot = 180 blendstd = .8

Line 110-134

Camera

global res, fps h, w = res.value world.vis.global.offheight = h world.vis.global.offwidth = w renderer = mujoco.Renderer(world, height=h, width=w)

np.random.seed(12345)

Rendering options for visual and collision geoms.

vis = mujoco.MjvOption() vis.geomgroup[2] = True vis.geomgroup[3] = False coll = mujoco.MjvOption() coll.geomgroup[2] = False coll.geomgroup[3] = True coll.flags[mujoco.mjtVisFlag.mjVIS_CONVEXHULL] = True

Create a camera that will revolve around the robot.

camera = mujoco.MjvCamera() mujoco.mjvdefaultFreeCamera(world, camera) camera.distance = 0.5 offset = world.vis.global.azimuth frames = []

Line 153-170

Camera

if len(frames) < data.time * fps:

target_body_name = "link5"  # Object name to look at
target_body_id = mujoco.mj_name2id(world, mujoco.mjtObj.mjOBJ_BODY, target_body_name)

camera.lookat[:] = data.xpos[target_body_id]

camera.azimuth = azimuth(data.time, duration, total_rot, offset)
renderer.update_scene(data, camera, scene_option=vis)
vispix = renderer.render().copy().astype(np.float32)
renderer.update_scene(data, camera, scene_option=coll)
collpix = renderer.render().copy().astype(np.float32)
b = blend_coef(data.time, duration, blend_std)
frame = (1 - b) * vispix + b * collpix
frame = frame.astype(np.uint8)
frames.append(frame)

```

You can modify the above script to record your own drawing in the simulation. You can adjust the resolution, frame rate, duration, and other parameters to match your specific requirements. Additionally, you can modify the camera settings to capture the drawing process from different angles and perspectives.

For the drawing result, you can use RViz to visualize the drawing process in real-time by running the following command:

bash rosbag record -a -O drawing_result.bag

You can replay the recorded bag file using the following command:

bash rosbag play drawing_result.bag

Owner

  • Name: H.J Shin
  • Login: godhj93
  • Kind: user
  • Location: Ulsan, Republic of Korea
  • Company: Autonomous System Laboratory UNIST

godhj@unist.ac.kr

Citation (CITATION.cff)

cff-version: 1.2.0
message: "If you use this software, please cite it as below."
authors:
- family-names: "Dahis"
  given-names: "Ricardo"
title: "Template Repository for Research Papers"
date-released: 2021-11-10
url: "https://github.com/rdahis/paper_template"

GitHub Events

Total
  • Watch event: 1
  • Member event: 2
  • Push event: 20
  • Create event: 2
Last Year
  • Watch event: 1
  • Member event: 2
  • Push event: 20
  • Create event: 2